From 010811f8e498822e0bbc715bdf1f88011bb4743d Mon Sep 17 00:00:00 2001 From: jchristopherson Date: Thu, 6 Mar 2025 13:46:12 -0600 Subject: [PATCH 1/8] Update --- .github/workflows/cmake.yml | 2 +- .github/workflows/fpm.yml | 123 +++++++++++++++++++----------------- CMakeLists.txt | 2 +- fpm.toml | 2 +- 4 files changed, 67 insertions(+), 62 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index f31c442..a6ba7a1 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -24,7 +24,7 @@ jobs: toolchain: {compiler: intel, version: '2023.2'} steps: - - uses: awvwgk/setup-fortran@v1 + - uses: awvwgk/setup-fortran@v1.6.1 id: setup-fortran with: compiler: ${{ matrix.toolchain.compiler }} diff --git a/.github/workflows/fpm.yml b/.github/workflows/fpm.yml index 4e76797..7a001b8 100644 --- a/.github/workflows/fpm.yml +++ b/.github/workflows/fpm.yml @@ -8,15 +8,12 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-11] - gcc_v: [10] # Version of GFortran we want to use. + os: [ubuntu-latest] + gcc_v: [12] # Version of GFortran we want to use. include: - os: ubuntu-latest os-arch: linux-x86_64 - - os: macos-11 - os-arch: macos-x86_64 - env: FC: gfortran GCC_V: ${{ matrix.gcc_v }} @@ -25,13 +22,6 @@ jobs: - name: Checkout code uses: actions/checkout@v1 - - name: Install GFortran macOS - if: contains(matrix.os, 'macos') - run: | - ln -s /usr/local/bin/gfortran-${GCC_V} /usr/local/bin/gfortran - which gfortran-${GCC_V} - which gfortran - - name: Install GFortran Linux if: contains(matrix.os, 'ubuntu') run: | @@ -39,12 +29,18 @@ jobs: --slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${GCC_V} \ --slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_V} + - name: Install BLAS & LAPACK + if: contains(matrix.os, 'ubuntu') + run: | + sudo apt-get update + sudo apt-get install libopenblas-dev liblapack-dev + - name: Install fpm - uses: fortran-lang/setup-fpm@v3 + uses: fortran-lang/setup-fpm@v5 with: - fpm-version: 'v0.8.2' + fpm-version: 'v0.10.1' - - name: Build FERROR + - name: Build LINALG run: | gfortran --version fpm build @@ -70,6 +66,8 @@ jobs: install: | mingw-w64-x86_64-gcc-fortran mingw-w64-x86_64-fpm + mingw-w64-x86_64-openblas + mingw-w64-x86_64-lapack - name: fpm build run: | @@ -81,47 +79,54 @@ jobs: run: | fpm test - intel-build: - runs-on: ubuntu-latest - strategy: - fail-fast: false - - env: - FPM_FC: ifort - FC: ifort - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Add Intel repository (Linux) - run: | - wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB - sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB - rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB - echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list - sudo apt-get update - - - name: Install Intel oneAPI compiler (Linux) - run: | - sudo apt-get install intel-oneapi-compiler-fortran - - - name: Setup Intel oneAPI environment - run: | - source /opt/intel/oneapi/setvars.sh - printenv >> $GITHUB_ENV - - - name: Install fpm - uses: fortran-lang/setup-fpm@v3 - with: - fpm-version: 'v0.8.2' - - - name: fpm build - run: | - ifort --version - fpm --version - fpm build --profile debug --flag "-warn nointerfaces" - - - name: fpm test - run: | - fpm test --profile debug --flag "-warn nointerfaces" \ No newline at end of file + # intel-build: + # runs-on: ubuntu-latest + # strategy: + # fail-fast: false + + # env: + # FPM_FC: ifx + # FC: ifx + + # steps: + # - name: Checkout code + # uses: actions/checkout@v3 + + # - name: Add Intel repository (Linux) + # run: | + # wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + # sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + # rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + # echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + # sudo apt-get update + + # - name: Install Intel oneAPI compiler (Linux) + # run: | + # sudo apt-get install intel-oneapi-compiler-fortran + + # - name: Setup Intel oneAPI environment + # run: | + # source /opt/intel/oneapi/setvars.sh + # printenv >> $GITHUB_ENV + + # - name: Install MKL + # run: | + # sudo apt-get update + # sudo apt-get -y install intel-mkl + # sudo apt update + # sudo apt -y install intel-mkl + + # - name: Install fpm + # uses: fortran-lang/setup-fpm@v3 + # with: + # fpm-version: 'v0.8.2' + + # - name: fpm build + # run: | + # ifx --version + # fpm --version + # fpm build --profile debug --flag "-warn nointerfaces" + + # - name: fpm test + # run: | + # fpm test --profile debug --flag "-warn nointerfaces" \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 179bace..c09e220 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.24) project( fplot LANGUAGES Fortran - VERSION 1.7.1 + VERSION 1.7.2 ) # Get helper macros and functions diff --git a/fpm.toml b/fpm.toml index 7d26439..41b7c4f 100644 --- a/fpm.toml +++ b/fpm.toml @@ -1,5 +1,5 @@ name = "fplot" -version = "1.7.1" +version = "1.7.2" license = "GPL-3.0" author = "Jason Christopherson" maintainer = "Jason Christopherson" From 8f8183467cf5729ef85ec71f7e492b371ca8f278 Mon Sep 17 00:00:00 2001 From: jchristopherson Date: Thu, 27 Mar 2025 19:56:52 -0500 Subject: [PATCH 2/8] Restructure code --- src/CMakeLists.txt | 12 +- src/fplot_arrow.f90 | 326 +- src/fplot_axis.f90 | 41 - src/fplot_colormap.f90 | 221 +- src/fplot_colors.f90 | 121 +- src/fplot_constants.f90 | 152 + src/fplot_core.f90 | 7865 +--------------------- src/fplot_core_routines.f90 | 44 +- src/fplot_delaunay_tri_surface.f90 | 81 +- src/fplot_errors.f90 | 125 + src/fplot_filled_plot_data.f90 | 96 +- src/fplot_label.f90 | 97 +- src/fplot_latex_terminal.f90 | 47 +- src/fplot_legend.f90 | 132 +- src/fplot_multiplot.f90 | 205 +- src/fplot_plot.f90 | 397 +- src/fplot_plot_2d.f90 | 118 +- src/fplot_plot_3d.f90 | 174 +- src/fplot_plot_axis.f90 | 270 +- src/fplot_plot_bar.f90 | 39 +- src/fplot_plot_data.f90 | 671 +- src/fplot_plot_data_2d.f90 | 719 +- src/fplot_plot_data_3d.f90 | 647 +- src/fplot_plot_data_bar.f90 | 234 +- src/fplot_plot_data_colored.f90 | 39 - src/fplot_plot_data_error_bars.f90 | 335 +- src/fplot_plot_data_histogram.f90 | 104 +- src/fplot_plot_data_tri_2d.f90 | 83 +- src/fplot_plot_object.f90 | 21 + src/fplot_plot_polar.f90 | 151 +- src/fplot_png_terminal.f90 | 64 +- src/fplot_qt_terminal.f90 | 23 +- src/fplot_scatter_plot_data.f90 | 283 - src/fplot_simplify.f90 | 125 +- src/fplot_surface_plot.f90 | 180 +- src/fplot_surface_plot_data.f90 | 473 +- src/fplot_terminal.f90 | 127 +- src/fplot_tri_surface_plot_data.f90 | 65 +- src/fplot_triangulations_delaunay_2d.f90 | 96 +- src/fplot_vector_field_plot_data.f90 | 176 +- src/fplot_windows_terminal.f90 | 23 +- src/fplot_wxt_terminal.f90 | 23 +- 42 files changed, 5557 insertions(+), 9668 deletions(-) delete mode 100644 src/fplot_axis.f90 create mode 100644 src/fplot_constants.f90 create mode 100644 src/fplot_errors.f90 delete mode 100644 src/fplot_plot_data_colored.f90 create mode 100644 src/fplot_plot_object.f90 delete mode 100644 src/fplot_scatter_plot_data.f90 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 36ed8c3..8d2b387 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,19 +17,13 @@ set(FPLOT_SOURCES ${dir}/fplot_legend.f90 ${dir}/fplot_plot.f90 ${dir}/fplot_colormap.f90 - ${dir}/fplot_scatter_plot_data.f90 ${dir}/fplot_simplify.f90 - ${dir}/fplot_plot_data_2d.f90 - ${dir}/fplot_plot_data_3d.f90 - ${dir}/fplot_surface_plot_data.f90 ${dir}/fplot_plot_2d.f90 ${dir}/fplot_plot_3d.f90 ${dir}/fplot_surface_plot.f90 - ${dir}/fplot_axis.f90 ${dir}/fplot_label.f90 ${dir}/fplot_multiplot.f90 ${dir}/fplot_plot_data_error_bars.f90 - ${dir}/fplot_plot_data_colored.f90 ${dir}/fplot_plot_data_bar.f90 ${dir}/fplot_plot_data_histogram.f90 ${dir}/fplot_plot_bar.f90 @@ -41,5 +35,11 @@ set(FPLOT_SOURCES ${dir}/fplot_filled_plot_data.f90 ${dir}/fplot_triangulations_delaunay_2d.f90 ${dir}/fplot_arrow.f90 + ${dir}/fplot_errors.f90 + ${dir}/fplot_constants.f90 + ${dir}/fplot_plot_object.f90 + ${dir}/fplot_plot_data_2d.f90 + ${dir}/fplot_plot_data_3d.f90 + ${dir}/fplot_surface_plot_data.f90 ) set(FPLOT_SOURCES ${FPLOT_SOURCES} PARENT_SCOPE) diff --git a/src/fplot_arrow.f90 b/src/fplot_arrow.f90 index 7fd239a..c07e691 100644 --- a/src/fplot_arrow.f90 +++ b/src/fplot_arrow.f90 @@ -1,101 +1,245 @@ -submodule (fplot_core) fplot_arrow +module fplot_arrow + use iso_fortran_env + use fplot_plot_object + use fplot_colors + use fplot_constants + use strings implicit none + private + public :: plot_arrow + + type, extends(plot_object) :: plot_arrow + !! Defines an arrow that can be drawn on a plot. + logical, private :: m_visible = .true. + !! Visible? + real(real32), private, dimension(3) :: m_tail = [0.0, 0.0, 0.0] + !! The x, y, z coordinates of the tail. + real(real32), private, dimension(3) :: m_head = [0.0, 0.0, 0.0] + !! The x, y, z coordinates of the head. + type(color), private :: m_color = CLR_BLACK + !! The arrow color. + integer(int32), private :: m_linestyle = LINE_SOLID + !! The line style. + real(real32), private :: m_linewidth = 1.0 + !! The line width. + integer(int32), private :: m_head_type = ARROW_HEAD + !! The head configuration. + integer(int32), private :: m_filling = ARROW_FILLED + !! Arrow filling. + logical, private :: m_front = .true. + !! Move to front? + real(real32), private :: m_size = 0.375 + !! Arrow head size. + real(real32), private :: m_angle = 10.0 + !! Arrow head angle. + real(real32), private :: m_backangle = 90.0 + !! Arrow head back angle. + logical, private :: m_use_default_size = .true. + !! Use default head size. + contains + procedure, public :: get_is_visible => par_get_is_visible + procedure, public :: set_is_visible => par_set_is_visible + procedure, public :: get_tail_location => par_get_tail + generic, public :: set_tail_location => par_set_tail_1, & + par_set_tail_2, par_set_tail_3 + procedure, private :: par_set_tail_1 + procedure, private :: par_set_tail_2 + procedure, private :: par_set_tail_3 + procedure, public :: get_head_location => par_get_head + generic, public :: set_head_location => par_set_head_1, & + par_set_head_2, par_set_head_3 + procedure, private :: par_set_head_1 + procedure, private :: par_set_head_2 + procedure, private :: par_set_head_3 + procedure, public :: get_color => par_get_color + procedure, public :: set_color => par_set_color + procedure, public :: get_line_style => par_get_line_style + procedure, public :: set_line_style => par_set_line_style + procedure, public :: get_line_width => par_get_line_width + procedure, public :: set_line_width => par_set_line_width + procedure, public :: get_head_type => par_get_head_type + procedure, public :: set_head_type => par_set_head_type + procedure, public :: get_head_fill => par_get_fill + procedure, public :: set_head_fill => par_set_fill + procedure, public :: get_move_to_front => par_get_move_to_front + procedure, public :: set_move_to_front => par_set_move_to_front + procedure, public :: get_head_size => par_get_head_size + procedure, public :: set_head_size => par_set_head_size + procedure, public :: get_head_angle => par_get_head_angle + procedure, public :: set_head_angle => par_set_head_angle + procedure, public :: get_head_back_angle => par_get_head_back_angle + procedure, public :: set_head_back_angle => par_set_head_back_angle + procedure, public :: get_use_default_size => par_get_use_default_size + procedure, public :: set_use_default_size => par_set_use_default_size + procedure, public :: get_command_string => par_get_cmd + end type + contains ! ------------------------------------------------------------------------------ -pure module function par_get_is_visible(this) result(rst) +pure function par_get_is_visible(this) result(rst) + !! Gets a value determining if the arrow is visible. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. logical :: rst + !! True if the arrow is visible; else, false. rst = this%m_visible end function ! -------------------- -module subroutine par_set_is_visible(this, x) +subroutine par_set_is_visible(this, x) + !! Sets a value determining if the arrow is visible. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. logical, intent(in) :: x + !! True if the arrow is visible; else, false. this%m_visible = x end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_tail(this) result(rst) +pure function par_get_tail(this) result(rst) + !! Gets the coordinates of the arrow's tail. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. real(real32), dimension(3) :: rst + !! A 3-element array containing the x, y, and z coordinates of the + !! arrow's tail. rst = this%m_tail end function ! -------------------- -module subroutine par_set_tail_1(this, x) +subroutine par_set_tail_1(this, x) + !! Sets the coordinates of the arrow's tail. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. real(real32), intent(in) :: x(3) + !! A 3-element array containing the x, y, and z coordinates of the + !! arrow's tail. this%m_tail = x end subroutine ! -------------------- -module subroutine par_set_tail_2(this, x, y) +subroutine par_set_tail_2(this, x, y) + !! Sets the coordinates of the arrow's tail. class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y + !! The plot_arrow object. + real(real32), intent(in) :: x + !! The x-coordinate of the arrow's tail. + real(real32), intent(in) :: y + !! !! The y-coordinate of the arrow's tail. this%m_tail = [x, y, 0.0] end subroutine ! -------------------- -module subroutine par_set_tail_3(this, x, y, z) +subroutine par_set_tail_3(this, x, y, z) + !! Sets the coordinates of the arrow's tail. class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y, z + !! The plot_arrow object. + real(real32), intent(in) :: x + !! The x-coordinate of the arrow's tail. + real(real32), intent(in) :: y + !! The y-coordinate of the arrow's tail. + real(real32), intent(in) :: z + !! The z-coordinate of the arrow's tail. this%m_tail = [x, y, z] end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_head(this) result(rst) +pure function par_get_head(this) result(rst) + !! Gets the coordinates of the arrow's head. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. real(real32), dimension(3) :: rst + !! A 3-element array containing the x, y, and z coordinates of the + !! arrow's head. rst = this%m_head end function ! -------------------- -module subroutine par_set_head_1(this, x) +subroutine par_set_head_1(this, x) + !! Sets the location of the arrow's head. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. real(real32), intent(in) :: x(3) + !! A 3-element array containing the x, y, and z coordinates of the + !! arrow's head. this%m_head = x end subroutine ! -------------------- -module subroutine par_set_head_2(this, x, y) +subroutine par_set_head_2(this, x, y) + !! Sets the location of the arrow's head. class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y + !! The plot_arrow object. + real(real32), intent(in) :: x + !! The x-coordinate of the arrow's head. + real(real32), intent(in) :: y + !! The y-coordinate of the arrow's head. this%m_head = [x, y, 0.0] end subroutine ! -------------------- -module subroutine par_set_head_3(this, x, y, z) +subroutine par_set_head_3(this, x, y, z) + !! Sets the location of the arrow's head. class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y, z + !! The plot_arrow object. + real(real32), intent(in) :: x + !! The x-coordinate of the arrow's head. + real(real32), intent(in) :: y + !! The y-coordinate of the arrow's head. + real(real32), intent(in) :: z + !! The z-coordinate of the arrow's head. this%m_head = [x, y, z] end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_color(this) result(rst) +pure function par_get_color(this) result(rst) + !! Gets the color of the arrow. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. type(color) :: rst + !! The color. rst = this%m_color end function ! -------------------- -module subroutine par_set_color(this, x) +subroutine par_set_color(this, x) + !! Sets the color of the arrow. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. type(color), intent(in) :: x + !! The color. this%m_color = x end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_line_style(this) result(rst) +pure function par_get_line_style(this) result(rst) + !! Gets the line style used to draw the arrow. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. integer(int32) :: rst + !! The line style. rst = this%m_linestyle end function ! -------------------- -module subroutine par_set_line_style(this, x) +subroutine par_set_line_style(this, x) + !! Sets the line style used to draw the arrow. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. integer(int32), intent(in) :: x + !! The line style. The value must be one of the following. + !! + !! - LINE_SOLID + !! + !! - LINE_DASHED + !! + !! - LINE_DASH_DOTTED + !! + !! - LINE_DASH_DOT_DOT + !! + !! - LINE_DOTTED + !! + !! If the value is not one of the above, the command is ignored. if (x == LINE_DASHED .or. & x == LINE_DASH_DOTTED .or. & x == LINE_DASH_DOT_DOT .or. & @@ -107,30 +251,52 @@ module subroutine par_set_line_style(this, x) end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_line_width(this) result(rst) +pure function par_get_line_width(this) result(rst) + !! Gets the width of the lines used to draw the arrow. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. real(real32) :: rst + !! The width of the line. rst = this%m_linewidth end function ! -------------------- -module subroutine par_set_line_width(this, x) +subroutine par_set_line_width(this, x) + !! Sets the width of the lines used to draw the arrow. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. real(real32), intent(in) :: x + !! The width of the line. this%m_linewidth = x end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_head_type(this) result(rst) +pure function par_get_head_type(this) result(rst) + !! Gets the type of arrow head. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. integer(int32) :: rst + !! The arrow head type. rst = this%m_head_type end function ! -------------------- -module subroutine par_set_head_type(this, x) +subroutine par_set_head_type(this, x) + !! Sets the type of arrow head. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. integer(int32), intent(in) :: x + !! The arrow head type. It must be one of the following constants. + !! + !! - ARROW_HEAD + !! + !! - ARROW_BACKHEAD + !! + !! - ARROW_HEADS + !! + !! - ARROW_NO_HEAD + !! + !! If the value is not one of the above, the command is ignored. if (x == ARROW_BACKHEAD .or. & x == ARROW_HEAD .or. & x == ARROW_HEADS .or. & @@ -141,16 +307,33 @@ module subroutine par_set_head_type(this, x) end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_fill(this) result(rst) +pure function par_get_fill(this) result(rst) + !! Gets a flag denoting the head fill type. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. integer(int32) :: rst + !! The flag denoting head fill. rst = this%m_filling end function ! -------------------- -module subroutine par_set_fill(this, x) +subroutine par_set_fill(this, x) + !! Sets a flag denoting the head fill type. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. integer(int32), intent(in) :: x + !! The flag denoting head fill. It must be one of the following + !! constants. + !! + !! - ARROW_FILLED + !! + !! - ARROW_EMPTY + !! + !! - ARROW_NO_BORDER + !! + !! - ARROW_NO_FILL + !! + !! If the value is not one of the above, the command is ignored. if (x == ARROW_FILLED .or. & x == ARROW_EMPTY .or. & x == ARROW_NO_BORDER .or. & @@ -161,80 +344,113 @@ module subroutine par_set_fill(this, x) end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_move_to_front(this) result(rst) +pure function par_get_move_to_front(this) result(rst) + !! Gets a value determining if the arrow should be moved to the front. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. logical :: rst + !! True if the arrow should be moved to the front; else, false. rst = this%m_front end function ! -------------------- -module subroutine par_set_move_to_front(this, x) +subroutine par_set_move_to_front(this, x) + !! Sets a value determining if the arrow should be moved to the front. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. logical, intent(in) :: x + !! True if the arrow should be moved to the front; else, false. this%m_front = x end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_head_size(this) result(rst) +pure function par_get_head_size(this) result(rst) + !! Gets the size of the arrow head. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. real(real32) :: rst + !! The head size. rst = this%m_size end function ! -------------------- -module subroutine par_set_head_size(this, x) +subroutine par_set_head_size(this, x) + !! Sets the size of the arrow head. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. real(real32), intent(in) :: x + !! The head size. this%m_size = x end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_head_angle(this) result(rst) +pure function par_get_head_angle(this) result(rst) + !! Gets the angle of the arrow head. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. real(real32) :: rst + !! The angle, in degrees. rst = this%m_angle end function ! -------------------- -module subroutine par_set_head_angle(this, x) +subroutine par_set_head_angle(this, x) + !! Sets the angle of the arrow head. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. real(real32), intent(in) :: x + !! The angle, in degrees. this%m_angle = x end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_head_back_angle(this) result(rst) +pure function par_get_head_back_angle(this) result(rst) + !! Gets the angle of the back of the arrow head. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. real(real32) :: rst + !! The angle, in degrees. rst = this%m_backangle end function ! -------------------- -module subroutine par_set_head_back_angle(this, x) +subroutine par_set_head_back_angle(this, x) + !! Sets the angle of the back of the arrow head. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. real(real32), intent(in) :: x + !! The angle, in degrees. this%m_backangle = x end subroutine ! ------------------------------------------------------------------------------ -pure module function par_get_use_default_size(this) result(rst) +pure function par_get_use_default_size(this) result(rst) + !! Gets a value determining if arrow head sizing defaults should be used. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. logical :: rst + !! True if the defaults should be used; else, false. rst = this%m_use_default_size end function ! -------------------- -module subroutine par_set_use_default_size(this, x) +subroutine par_set_use_default_size(this, x) + !! Sets a value determining if arrow head sizing defaults should be used. class(plot_arrow), intent(inout) :: this + !! The plot_arrow object. logical, intent(in) :: x + !! True if the defaults should be used; else, false. this%m_use_default_size = x end subroutine ! ------------------------------------------------------------------------------ -module function par_get_cmd(this) result(rst) - ! Arguments +function par_get_cmd(this) result(rst) + !! Returns the appropriate GNUPLOT command string to establish appropriate + !! parameters. class(plot_arrow), intent(in) :: this + !! The plot_arrow object. character(len = :), allocatable :: rst + !! The GNUPLOT command string. ! Local Variables type(string_builder) :: str @@ -333,23 +549,23 @@ module function par_get_cmd(this) result(rst) end function ! ------------------------------------------------------------------------------ -pure module subroutine par_assign(x, y) - type(plot_arrow), intent(out) :: x - class(plot_arrow), intent(in) :: y - x%m_visible = y%m_visible - x%m_tail = y%m_tail - x%m_head = y%m_head - x%m_color = y%m_color - x%m_linestyle = y%m_linestyle - x%m_linewidth = y%m_linewidth - x%m_head_type = y%m_head_type - x%m_filling = y%m_filling - x%m_front = y%m_front - x%m_size = y%m_size - x%m_angle = y%m_angle - x%m_backangle = y%m_backangle - x%m_use_default_size = y%m_use_default_size -end subroutine +! pure subroutine par_assign(x, y) +! type(plot_arrow), intent(out) :: x +! class(plot_arrow), intent(in) :: y +! x%m_visible = y%m_visible +! x%m_tail = y%m_tail +! x%m_head = y%m_head +! x%m_color = y%m_color +! x%m_linestyle = y%m_linestyle +! x%m_linewidth = y%m_linewidth +! x%m_head_type = y%m_head_type +! x%m_filling = y%m_filling +! x%m_front = y%m_front +! x%m_size = y%m_size +! x%m_angle = y%m_angle +! x%m_backangle = y%m_backangle +! x%m_use_default_size = y%m_use_default_size +! end subroutine ! ------------------------------------------------------------------------------ -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_axis.f90 b/src/fplot_axis.f90 deleted file mode 100644 index a45695c..0000000 --- a/src/fplot_axis.f90 +++ /dev/null @@ -1,41 +0,0 @@ -! fplot_axis.f90 - -submodule (fplot_core) fplot_axis -contains -! ****************************************************************************** -! X_AXIS MEMBERS -! ------------------------------------------------------------------------------ - module function xa_get_id(this) result(x) - class(x_axis), intent(in) :: this - character(len = :), allocatable :: x - x = this%m_id - end function - -! ****************************************************************************** -! Y_AXIS MEMBERS -! ------------------------------------------------------------------------------ - module function ya_get_id(this) result(x) - class(y_axis), intent(in) :: this - character(len = :), allocatable :: x - x = this%m_id - end function - -! ****************************************************************************** -! Y2_AXIS MEMBERS -! ------------------------------------------------------------------------------ - module function y2a_get_id(this) result(x) - class(y2_axis), intent(in) :: this - character(len = :), allocatable :: x - x = this%m_id - end function - -! ****************************************************************************** -! Z_AXIS MEMBERS -! ------------------------------------------------------------------------------ - module function za_get_id(this) result(x) - class(z_axis), intent(in) :: this - character(len = :), allocatable :: x - x = this%m_id - end function - -end submodule \ No newline at end of file diff --git a/src/fplot_colormap.f90 b/src/fplot_colormap.f90 index a58dc5d..92dea51 100644 --- a/src/fplot_colormap.f90 +++ b/src/fplot_colormap.f90 @@ -1,14 +1,125 @@ ! fplot_colormap.f90 -submodule (fplot_core) fplot_colormap +module fplot_colormap + use iso_fortran_env + use fplot_plot_object + use strings + use ferror + use fplot_errors + use fplot_colors + use forcolormap, cmap => Colormap ! avoid conflict with the internally defined colormap type + implicit none + private + public :: cmap + public :: colormap + public :: cm_get_string_result + public :: rainbow_colormap + public :: hot_colormap + public :: cool_colormap + public :: parula_colormap + public :: grey_colormap + public :: earth_colormap + public :: custom_colormap + + type, abstract, extends(plot_object) :: colormap + !! A colormap object for a surface plot. + character(len = :), private, allocatable :: m_label + !! The label to associate with the colormap. + logical, private :: m_horizontal = .false. + !! The colormap should be drawn horizontally. + logical, private :: m_drawBorder = .true. + !! Draw the colormap border. + logical, private :: m_showTics = .true. + !! Show the tic marks. + contains + procedure, public :: get_command_string => cm_get_cmd + procedure(cm_get_string_result), deferred, public :: get_color_string + procedure, public :: get_label => cm_get_label + procedure, public :: set_label => cm_set_label + procedure, public :: get_horizontal => cm_get_horizontal + procedure, public :: set_horizontal => cm_set_horizontal + procedure, public :: get_draw_border => cm_get_draw_border + procedure, public :: set_draw_border => cm_set_draw_border + procedure, public :: get_show_tics => cm_get_show_tics + procedure, public :: set_show_tics => cm_set_show_tics + end type + + interface + function cm_get_string_result(this) result(x) + !! Retrieves a string result from a colormap object. + import colormap + class(colormap), intent(in) :: this + !! The colormap object. + character(len = :), allocatable :: x + !! The string. + end function + end interface +! ------------------------------------------------------------------------------ + type, extends(colormap) :: rainbow_colormap + !! Defines a rainbow colormap. + contains + procedure, public :: get_color_string => rcm_get_clr + end type + +! ------------------------------------------------------------------------------ + type, extends(colormap) :: hot_colormap + !! Defines a colormap consisting of "hot" colors. + contains + procedure, public :: get_color_string => hcm_get_clr + end type + +! ------------------------------------------------------------------------------ + type, extends(colormap) :: cool_colormap + !! Defines a colormap consisting of "cool" colors. + contains + procedure, public :: get_color_string => ccm_get_clr + end type + +! ------------------------------------------------------------------------------ + type, extends(colormap) :: parula_colormap + !! Defines a colormap equivalent to the MATLAB parula colormap. + contains + procedure, public :: get_color_string => pcm_get_clr + end type + +! ------------------------------------------------------------------------------ + type, extends(colormap) :: grey_colormap + !! Defines a grey-scaled colormap. + contains + procedure, public :: get_color_string => gcm_get_clr + end type + +! ------------------------------------------------------------------------------ + type, extends(colormap) :: earth_colormap + !! Defines an earthy-colored colormap. + contains + procedure, public :: get_color_string => ecm_get_clr + end type + +! ------------------------------------------------------------------------------ + type, extends(colormap) :: custom_colormap + !! Defines a custom colormap that utilizes the FORCOLORMAP library + !! to provide the map. + class(cmap), private, pointer :: m_map => null() + !! The FORCOLORMAP object. + contains + final :: custom_final + procedure, public :: get_color_string => custom_get_clr + procedure, public :: set_colormap => custom_set + procedure, public :: get_colormap => custom_get + end type + +! ------------------------------------------------------------------------------ contains ! ****************************************************************************** ! COLORMAP MEMBERS ! ------------------------------------------------------------------------------ - module function cm_get_cmd(this) result(x) - ! Arguments + function cm_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this colormap object. class(colormap), intent(in) :: this + !! The colormap object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -65,9 +176,12 @@ module function cm_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - pure module function cm_get_label(this) result(rst) + pure function cm_get_label(this) result(rst) + !! Gets the label to associate with the colorbar. class(colormap), intent(in) :: this + !! The colormap object. character(len = :), allocatable :: rst + !! The label. if (allocated(this%m_label)) then rst = this%m_label else @@ -76,51 +190,76 @@ pure module function cm_get_label(this) result(rst) end function ! -------------------- - module subroutine cm_set_label(this, x) + subroutine cm_set_label(this, x) + !! Sets the label to associate with the colorbar. class(colormap), intent(inout) :: this + !! The colormap object. character(len = *), intent(in) :: x + !! The label. this%m_label = x end subroutine ! ------------------------------------------------------------------------------ - pure module function cm_get_horizontal(this) result(rst) + pure function cm_get_horizontal(this) result(rst) + !! Gets a logical value determining if the colormap should be + !! drawn horizontally and below the plot. class(colormap), intent(in) :: this + !! The colormap object. logical :: rst + !! Returns true if the colormap should be drawn horizontally; + !! else, false. rst = this%m_horizontal end function ! -------------------- - module subroutine cm_set_horizontal(this, x) + subroutine cm_set_horizontal(this, x) + !! Sets a logical value determining if the colormap should be + !! drawn horizontally and below the plot. class(colormap), intent(inout) :: this + !! The colormap object. logical, intent(in) :: x + !! Set to true if the colormap should be drawn horizontally; + !! else, false. this%m_horizontal = x end subroutine ! ------------------------------------------------------------------------------ - pure module function cm_get_draw_border(this) result(rst) + pure function cm_get_draw_border(this) result(rst) + !! Gets a logical value determining if the border should be drawn. class(colormap), intent(in) :: this + !! The colormap object. logical :: rst + !! Returns true if the border should be drawn; else, false. rst = this%m_drawBorder end function ! -------------------- - module subroutine cm_set_draw_border(this, x) + subroutine cm_set_draw_border(this, x) + !! Sets a logical value determining if the border should be drawn. class(colormap), intent(inout) :: this + !! The colormap object. logical, intent(in) :: x + !! Set to true if the border should be drawn; else, false. this%m_drawBorder = x end subroutine ! ------------------------------------------------------------------------------ - pure module function cm_get_show_tics(this) result(rst) + pure function cm_get_show_tics(this) result(rst) + !! Gets a logical value determining if the tic marks should be drawn. class(colormap), intent(in) :: this + !! The colormap object. logical :: rst + !! Returns true if the tic marks should be drawn; else, false. rst = this%m_showTics end function ! -------------------- - module subroutine cm_set_show_tics(this, x) + subroutine cm_set_show_tics(this, x) + !! Sets a logical value determining if the tic marks should be drawn. class(colormap), intent(inout) :: this + !! The colormap object. logical, intent(in) :: x + !! Set to true if the tic marks should be drawn; else, false. this%m_showTics = x end subroutine @@ -131,9 +270,12 @@ module subroutine cm_set_show_tics(this, x) ! ****************************************************************************** ! RAINBOW_COLORMAP MEMBERS ! ------------------------------------------------------------------------------ - module function rcm_get_clr(this) result(x) + function rcm_get_clr(this) result(x) + !! Gets the GNUPLOT string defining the color distribution. class(rainbow_colormap), intent(in) :: this + !! The rainbow_colormap object. character(len = :), allocatable :: x + !! The command string. x = '0 "dark-blue", 1 "blue", 2 "cyan", 3 "green", 4 "yellow", ' // & '5 "orange", 6 "red", 7 "dark-red"' end function @@ -141,18 +283,24 @@ module function rcm_get_clr(this) result(x) ! ****************************************************************************** ! HOT_COLORMAP MEMBERS ! ------------------------------------------------------------------------------ - module function hcm_get_clr(this) result(x) + function hcm_get_clr(this) result(x) + !! Gets the GNUPLOT string defining the color distribution. class(hot_colormap), intent(in) :: this + !! The hot_colormap object. character(len = :), allocatable :: x + !! The command string. x = '0 "black", 1 "red", 2 "orange", 3 "yellow", 4 "white"' end function ! ****************************************************************************** ! COOL_COLORMAP MEMBERS ! ------------------------------------------------------------------------------ - module function ccm_get_clr(this) result(x) + function ccm_get_clr(this) result(x) + !! Gets the GNUPLOT string defining the color distribution. class(cool_colormap), intent(in) :: this + !! The cool_colormap object. character(len = :), allocatable :: x + !! The command string. type(string_builder) :: str @@ -172,9 +320,12 @@ module function ccm_get_clr(this) result(x) ! ****************************************************************************** ! PARULA_COLORMAP MEMBERS ! ------------------------------------------------------------------------------ - module function pcm_get_clr(this) result(x) + function pcm_get_clr(this) result(x) + !! Gets the GNUPLOT string defining the color distribution. class(parula_colormap), intent(in) :: this + !! The parula_colormap object. character(len = :), allocatable :: x + !! The command string. type(string_builder) :: str @@ -194,9 +345,12 @@ module function pcm_get_clr(this) result(x) ! ****************************************************************************** ! GREY_COLORMAP MEMBERS ! ------------------------------------------------------------------------------ - module function gcm_get_clr(this) result(x) + function gcm_get_clr(this) result(x) + !! Gets the GNUPLOT string defining the color distribution. class(grey_colormap), intent(in) :: this + !! The grey_colormap object. character(len = :), allocatable :: x + !! The command string. type(string_builder) :: str @@ -215,9 +369,12 @@ module function gcm_get_clr(this) result(x) ! ****************************************************************************** ! EARTH_COLORMAP ! ------------------------------------------------------------------------------ - module function ecm_get_clr(this) result(x) + function ecm_get_clr(this) result(x) + !! Gets the GNUPLOT string defining the color distribution. class(earth_colormap), intent(in) :: this + !! The earth_colormap object. character(len = :), allocatable :: x + !! The command string. type(string_builder) :: str @@ -239,10 +396,14 @@ module function ecm_get_clr(this) result(x) ! ****************************************************************************** ! ADDED: Jan. 08, 2024 - JAC +! CUSTOM_COLORMAP ! ------------------------------------------------------------------------------ - module function custom_get_clr(this) result(x) + function custom_get_clr(this) result(x) + !! Gets the GNUPLOT string defining the color distribution. class(custom_colormap), intent(in) :: this + !! The custom_colormap object. character(len = :), allocatable :: x + !! The command string. type(string_builder) :: str integer(int32) :: i, n, r, g, b @@ -272,11 +433,17 @@ module function custom_get_clr(this) result(x) end function ! ------------------------------------------------------------------------------ - module subroutine custom_set(this, map, err) - ! Arguments + subroutine custom_set(this, map, err) + !! Sets the FORCOLORMAP colormap object. class(custom_colormap), intent(inout) :: this + !! The custom_colormap object. class(cmap), intent(in) :: map + !! The FORCOLORMAP colormap object. The custom_colormap object + !! stores a copy of this object; therefore, any changes made to + !! x after calls to this routine will not impact the behavior of + !! the custom_colormap object. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: flag @@ -294,23 +461,25 @@ module subroutine custom_set(this, map, err) if (associated(this%m_map)) deallocate(this%m_map) allocate(this%m_map, source = map, stat = flag) if (flag /= 0) then - call errmgr%report_error("custom_init", & - "Memory allocation error code " // char(to_string(flag)) // ".", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "custom_set", flag) return end if end subroutine ! ------------------------------------------------------------------------------ - module function custom_get(this) result(rst) + function custom_get(this) result(rst) + !! Gets a pointer to the FORCOLORMAP colormap object. class(custom_colormap), intent(in) :: this + !! The custom_colormap object. class(cmap), pointer :: rst + !! A pointer to the FORCOLORMAP colormap object. rst => this%m_map end function ! ------------------------------------------------------------------------------ - module subroutine custom_final(this) + subroutine custom_final(this) type(custom_colormap), intent(inout) :: this + !! The custom_colormap object. if (associated(this%m_map)) then deallocate(this%m_map) nullify(this%m_map) @@ -318,4 +487,4 @@ module subroutine custom_final(this) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_colors.f90 b/src/fplot_colors.f90 index e14a93c..8a8c486 100644 --- a/src/fplot_colors.f90 +++ b/src/fplot_colors.f90 @@ -1,12 +1,105 @@ ! fplot_colors.f90 -submodule (fplot_core) fplot_colors +module fplot_colors + use iso_fortran_env + implicit none + private + public :: color + public :: operator(==) + public :: operator(/=) + public :: CLR_BLACK + public :: CLR_WHITE + public :: CLR_RED + public :: CLR_LIME + public :: CLR_BLUE + public :: CLR_YELLOW + public :: CLR_CYAN + public :: CLR_MAGENTA + public :: CLR_SILVER + public :: CLR_GRAY + public :: CLR_MAROON + public :: CLR_OLIVE + public :: CLR_GREEN + public :: CLR_PURPLE + public :: CLR_TEAL + public :: CLR_NAVY + public :: CLR_ORANGE + public :: color_list + + type color + !! Describes an RGB color. + integer(int32), public :: red = 0 + !! The red component of the color (must be between 0 and 255). + integer(int32), public :: green = 0 + !! The green component of the color (must be between 0 and 255). + integer(int32), public :: blue = 255 + !! The blue component of the color (must be between 0 and 255). + contains + procedure, public, pass :: to_hex_string => clr_to_hex_string + procedure, public, pass :: copy_from => clr_copy_from + end type + + interface operator(==) + module procedure :: clr_equals + end interface + + interface operator(/=) + module procedure :: clr_not_equals + end interface + + type(color), parameter :: CLR_BLACK = color(0, 0, 0) + !! Black. + type(color), parameter :: CLR_WHITE = color(255, 255, 255) + !! White. + type(color), parameter :: CLR_RED = color(255, 0, 0) + !! Red. + type(color), parameter :: CLR_LIME = color(0, 255, 0) + !! Lime. + type(color), parameter :: CLR_BLUE = color(0, 0, 255) + !! Blue. + type(color), parameter :: CLR_YELLOW = color(255, 255, 0) + !! Yellow. + type(color), parameter :: CLR_CYAN = color(0, 255, 255) + !! Cyan. + type(color), parameter :: CLR_MAGENTA = color(255, 0, 255) + !! Magenta. + type(color), parameter :: CLR_SILVER = color(192, 192, 192) + !! Silver. + type(color), parameter :: CLR_GRAY = color(128, 128, 128) + !! Gray. + type(color), parameter :: CLR_MAROON = color(128, 0, 0) + !! Maroon. + type(color), parameter :: CLR_OLIVE = color(128, 128, 0) + !! Olive. + type(color), parameter :: CLR_GREEN = color(0, 128, 0) + !! Green. + type(color), parameter :: CLR_PURPLE = color(128, 0, 128) + !! Purple. + type(color), parameter :: CLR_TEAL = color(0, 128, 128) + !! Teal. + type(color), parameter :: CLR_NAVY = color(0, 0, 128) + !! Navy. + type(color), parameter :: CLR_ORANGE = color(255, 165, 0) + !! Orange. + + ! A list of colors that can be cycled through by plotting code + type(color), parameter, dimension(7) :: color_list = [ & + color(0, int(0.447 * 255), int(0.741 * 255)), & + color(int(0.85 * 255), int(0.325 * 255), int(0.098 * 255)), & + color(int(0.929 * 255), int(0.694 * 255), int(0.125 * 255)), & + color(int(0.494 * 255), int(0.184 * 255), int(0.556 * 255)), & + color(int(0.466 * 255), int(0.674 * 255), int(0.188 * 255)), & + color(int(0.301 * 255), int(0.745 * 255), int(0.933 * 255)), & + color(int(0.635 * 255), int(0.078 * 255), int(0.184 * 255))] + contains ! ------------------------------------------------------------------------------ - pure module function clr_to_hex_string(this) result(txt) - ! Arguments + pure function clr_to_hex_string(this) result(txt) + !! Returns the color in hexadecimal format. class(color), intent(in) :: this + !! The color object. character(6) :: txt + !! A string containing the hexadecimal equivalent. ! Local Variables integer(int32) :: r, g, b, clr @@ -44,9 +137,13 @@ pure module function clr_to_hex_string(this) result(txt) end function ! ------------------------------------------------------------------------------ - pure module subroutine clr_copy_from(this, clr) + subroutine clr_copy_from(this, clr) + !! Copies another color to this color. class(color), intent(inout) :: this + !! The color object. class(color), intent(in) :: clr + !! The color to copy. + this%red = clr%red this%green = clr%green this%blue = clr%blue @@ -55,14 +152,14 @@ pure module subroutine clr_copy_from(this, clr) ! ****************************************************************************** ! ADDED: JAN. 09, 2024 - JAC ! ------------------------------------------------------------------------------ - pure module subroutine clr_assign(x, y) - type(color), intent(out) :: x - class(color), intent(in) :: y - call x%copy_from(y) - end subroutine + ! pure subroutine clr_assign(x, y) + ! type(color), intent(out) :: x + ! class(color), intent(in) :: y + ! call x%copy_from(y) + ! end subroutine ! ------------------------------------------------------------------------------ - pure module function clr_equals(x, y) result(rst) + pure function clr_equals(x, y) result(rst) type(color), intent(in) :: x, y logical :: rst rst = .true. @@ -75,11 +172,11 @@ pure module function clr_equals(x, y) result(rst) end function ! ------------------------------------------------------------------------------ - pure module function clr_not_equals(x, y) result(rst) + pure function clr_not_equals(x, y) result(rst) type(color), intent(in) :: x, y logical :: rst rst = .not.clr_equals(x, y) end function ! ------------------------------------------------------------------------------ -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_constants.f90 b/src/fplot_constants.f90 new file mode 100644 index 0000000..1edd0cc --- /dev/null +++ b/src/fplot_constants.f90 @@ -0,0 +1,152 @@ +module fplot_constants + use iso_fortran_env + implicit none + + +! ****************************************************************************** +! GNUPLOT TERMINAL CONSTANTS +! ------------------------------------------------------------------------------ + integer(int32), parameter :: GNUPLOT_TERMINAL_WIN32 = 1 + !! Defines a Win32 terminal. + integer(int32), parameter :: GNUPLOT_TERMINAL_WXT = 2 + !! Defines a WXT terminal. + integer(int32), parameter :: GNUPLOT_TERMINAL_QT = 3 + !! Defines a QT terminal. + integer(int32), parameter :: GNUPLOT_TERMINAL_PNG = 4 + !! Defines a PNG terminal. + integer(int32), parameter :: GNUPLOT_TERMINAL_LATEX = 5 + !! Defines a LATEX terminal. + +! ****************************************************************************** +! MARKER CONSTANTS +! ------------------------------------------------------------------------------ + integer(int32), parameter :: MARKER_PLUS = 1 + !! Defines a + data point marker. + integer(int32), parameter :: MARKER_X = 2 + !! Defines an x data point marker. + integer(int32), parameter :: MARKER_ASTERISK = 3 + !! Defines an * data point marker. + integer(int32), parameter :: MARKER_EMPTY_SQUARE = 4 + !! Defines an empty square-shaped data point marker. + integer(int32), parameter :: MARKER_FILLED_SQUARE = 5 + !! Defines an filled square-shaped data point marker. + integer(int32), parameter :: MARKER_EMPTY_CIRCLE = 6 + !! Defines an empty circle-shaped data point marker. + integer(int32), parameter :: MARKER_FILLED_CIRCLE = 7 + !! Defines an filled circle-shaped data point marker. + integer(int32), parameter :: MARKER_EMPTY_TRIANGLE = 8 + !! Defines an empty triangle-shaped data point marker. + integer(int32), parameter :: MARKER_FILLED_TRIANGLE = 9 + !! Defines an filled triangle-shaped data point marker. + integer(int32), parameter :: MARKER_EMPTY_NABLA = 10 + !! Defines an empty nabla-shaped data point marker. + integer(int32), parameter :: MARKER_FILLED_NABLA = 11 + !! Defines an filled nabla-shaped data point marker. + integer(int32), parameter :: MARKER_EMPTY_RHOMBUS = 12 + !! Defines an empty rhombus-shaped data point marker. + integer(int32), parameter :: MARKER_FILLED_RHOMBUS = 13 + !! Defines an filled rhombus-shaped data point marker. + +! ****************************************************************************** +! LINE CONSTANTS +! ------------------------------------------------------------------------------ + integer(int32), parameter :: LINE_SOLID = 1 + !! Defines a solid line. + integer(int32), parameter :: LINE_DASHED = 2 + !! Defines a dashed line. + integer(int32), parameter :: LINE_DOTTED = 3 + !! Defines a dotted line. + integer(int32), parameter :: LINE_DASH_DOTTED = 4 + !! Defines a dash-dotted line. + integer(int32), parameter :: LINE_DASH_DOT_DOT = 5 + !! Defines a dash-dot-dotted line. + +! ****************************************************************************** +! LEGEND CONSTANTS +! ------------------------------------------------------------------------------ + character(len = *), parameter :: LEGEND_TOP = "top" + !! Defines the legend should be placed at the top of the plot. + character(len = *), parameter :: LEGEND_CENTER = "center" + !! Defines the legend should be centered on the plot. + character(len = *), parameter :: LEGEND_LEFT = "left" + !! Defines the legend should be placed at the left of the plot. + character(len = *), parameter :: LEGEND_RIGHT = "right" + !! Defines the legend should be placed at the right of the plot. + character(len = *), parameter :: LEGEND_BOTTOM = "bottom" + !! Defines the legend should be placed at the bottom of the plot. + character(len = *), parameter :: LEGEND_ARRANGE_VERTICALLY = "vertical" + !! Defines the legend should be arranged such that the column count + !! is minimized. + character(len = *), parameter :: LEGEND_ARRANGE_HORIZONTALLY = "horizontal" + !! Defines the legend should be arranged such that the row count + !! is minimized. + +! ****************************************************************************** +! POLAR PLOT CONSTANTS +! ------------------------------------------------------------------------------ + character(len = *), parameter :: POLAR_THETA_TOP = "top" + !! States that theta should start at the top of the plot. + character(len = *), parameter :: POLAR_THETA_RIGHT = "right" + !! States that theta should start at the right of the plot. + character(len = *), parameter :: POLAR_THETA_BOTTOM = "bottom" + !! States that theta should start at the bottom of the plot. + character(len = *), parameter :: POLAR_THETA_LEFT = "left" + !! States that theta should start at the left of the plot. + character(len = *), parameter :: POLAR_THETA_CCW = "ccw" + !! States that theta should proceed in a counter-clockwise direction. + character(len = *), parameter :: POLAR_THETA_CW = "cw" + !! States that theta should proceed in a clockwise direction. + +! ****************************************************************************** +! COORDINATE SYSTEM CONSTANTS +! ------------------------------------------------------------------------------ + integer(int32), parameter :: COORDINATES_CARTESIAN = 100 + !! Defines a Cartesian coordinate system. + integer(int32), parameter :: COORDINATES_SPHERICAL = 101 + !! Defines a spherical coordinate system. + integer(int32), parameter :: COORDINATES_CYLINDRICAL = 102 + !! Defines a cylindrical coordinate system. + +! ****************************************************************************** +! ARROW CONSTANTS +! ------------------------------------------------------------------------------ + integer(int32), parameter :: ARROW_NO_HEAD = 0 + !! Defines an arrow with no head. + integer(int32), parameter :: ARROW_HEAD = 1 + !! Defines an arrow with a traditional head. + integer(int32), parameter :: ARROW_BACKHEAD = 2 + !! Defines an arrow with it's head at it's back end (tail). + integer(int32), parameter :: ARROW_HEADS = 3 + !! Defines an arrow with a head on both ends. + integer(int32), parameter :: ARROW_FILLED = 100 + !! Defines a filled arrow head. + integer(int32), parameter :: ARROW_EMPTY = 101 + !! Defines an empty arrow head. + integer(int32), parameter :: ARROW_NO_FILL = 102 + !! Defines an arrow head without fill. + integer(int32), parameter :: ARROW_NO_BORDER = 103 + !! Defines an arrow head with no border. + +! ****************************************************************************** +! PLOT DATA CONSTANTS +! ------------------------------------------------------------------------------ + integer(int32), parameter :: PLOTDATA_MAX_NAME_LENGTH = 128 + !! Defines the maximum number of characters allowed in a graph label. + +! ****************************************************************************** +! PRIVATE/DEFAULT CONSTANTS +! ------------------------------------------------------------------------------ + integer(int32), parameter :: GNUPLOT_DEFAULT_WINDOW_WIDTH = 640 + !! The default GNUPLOT window width, in pixels. + integer(int32), parameter :: GNUPLOT_DEFAULT_WINDOW_HEIGHT = 420 + !! The default GNUPLOT window height, in pixels. + integer(int32), parameter :: GNUPLOT_MAX_LABEL_LENGTH = 128 + !! Defines the maximum number of characters allowed in a graph label. + character(len = *), parameter :: GNUPLOT_DEFAULT_FONTNAME = "Calibri" + !! Defines the default font used by text on the graph. + integer(int32), parameter :: GNUPLOT_DEFAULT_FONT_SIZE = 14 + !! Defines the default font size used by text on the graph. + integer(int32), parameter :: GNUPLOT_MAX_PATH_LENGTH = 256 + !! Defines the maximum number of characters allowed in a file path. + +end module \ No newline at end of file diff --git a/src/fplot_core.f90 b/src/fplot_core.f90 index bdd9f1b..7643321 100644 --- a/src/fplot_core.f90 +++ b/src/fplot_core.f90 @@ -12,41 +12,50 @@ !! !! @image html example_surface_plot_lighting_2.png module fplot_core - use iso_fortran_env, only : real64, real32, int32 - use iso_c_binding - use collections - use strings - use ferror - use forcolormap, cmap => Colormap ! avoid conflict with the internally defined colormap type + use fplot_constants + use fplot_core_routines + use fplot_colors + use fplot_plot_object + use fplot_plot_data + use fplot_plot_axis + use fplot_terminal + use fplot_windows_terminal + use fplot_qt_terminal + use fplot_wxt_terminal + use fplot_png_terminal + use fplot_latex_terminal + use fplot_label + use fplot_arrow + use fplot_legend + use fplot_plot_data_2d + use fplot_plot_data_3d + use fplot_surface_plot_data + use fplot_plot_data_error_bars + use fplot_plot_data_bar + use fplot_plot_data_histogram + use fplot_colormap + use fplot_filled_plot_data + use fplot_triangulations_delaunay_2d + use fplot_plot_data_tri_2d + use fplot_delaunay_tri_surface + use fplot_tri_surface_plot_data + use fplot_vector_field_plot_data + use fplot_plot + use fplot_plot_2d + use fplot_plot_3d + use fplot_surface_plot + use fplot_multiplot + use fplot_plot_bar + use fplot_plot_polar implicit none private - public :: PLOT_OUT_OF_MEMORY_ERROR - public :: PLOT_INVALID_INPUT_ERROR - public :: PLOT_INVALID_OPERATION_ERROR - public :: PLOT_ARRAY_SIZE_MISMATCH_ERROR - public :: PLOT_GNUPLOT_FILE_ERROR + + ! FPLOT_CONSTANTS.F90 public :: GNUPLOT_TERMINAL_WIN32 public :: GNUPLOT_TERMINAL_WXT public :: GNUPLOT_TERMINAL_QT public :: GNUPLOT_TERMINAL_PNG public :: GNUPLOT_TERMINAL_LATEX - public :: CLR_BLACK - public :: CLR_WHITE - public :: CLR_RED - public :: CLR_LIME - public :: CLR_BLUE - public :: CLR_YELLOW - public :: CLR_CYAN - public :: CLR_MAGENTA - public :: CLR_SILVER - public :: CLR_GRAY - public :: CLR_MAROON - public :: CLR_OLIVE - public :: CLR_GREEN - public :: CLR_PURPLE - public :: CLR_TEAL - public :: CLR_NAVY - public :: CLR_ORANGE public :: MARKER_PLUS public :: MARKER_X public :: MARKER_ASTERISK @@ -90,7727 +99,169 @@ module fplot_core public :: ARROW_EMPTY public :: ARROW_NO_FILL public :: ARROW_NO_BORDER + + ! FPLOT_CORE_ROUTINES.F90 public :: linspace public :: logspace public :: meshgrid + + ! FPLOT_COLORS.F90 public :: color + public :: operator(==) + public :: operator(/=) + public :: CLR_BLACK + public :: CLR_WHITE + public :: CLR_RED + public :: CLR_LIME + public :: CLR_BLUE + public :: CLR_YELLOW + public :: CLR_CYAN + public :: CLR_MAGENTA + public :: CLR_SILVER + public :: CLR_GRAY + public :: CLR_MAROON + public :: CLR_OLIVE + public :: CLR_GREEN + public :: CLR_PURPLE + public :: CLR_TEAL + public :: CLR_NAVY + public :: CLR_ORANGE + public :: color_list + + ! FPLOT_PLOT_OBJECT.F90 + public :: plot_object + public :: get_string_result + + ! FPLOT_PLOT_DATA.F90 public :: plot_data + public :: pd_get_string_result + public :: plot_data_colored + public :: scatter_plot_data + public :: spd_get_int_value + public :: spd_get_string_result + public :: spd_get_value + public :: spd_set_value + + ! FPLOT_PLOT_AXIS.F90 public :: plot_axis + public :: pa_get_string_result + public :: x_axis + public :: y_axis + public :: y2_axis + public :: z_axis + + ! FPLOT_TERMINAL.F90 public :: terminal + public :: term_get_string_result + + ! FPLOT_WINDOWS_TERMINAL.F90 public :: windows_terminal + + ! FPLOT_QT_TERMINAL.F90 public :: qt_terminal + + ! FPLOT_WXT_TERMINAL.F90 public :: wxt_terminal + + ! FPLOT_PNG_TERMINAL.F90 public :: png_terminal + + ! FPLOT_LATEX_TERMINAL.F90 public :: latex_terminal + + ! FPLOT_LABEL.F90 + public :: plot_label + + ! FPLOT_ARROW.F90 + public :: plot_arrow + + ! FPLOT_LEGEND.F90 public :: legend - public :: plot - public :: scatter_plot_data + + ! FPLOT_PLOT_DATA_2D.F90 public :: plot_data_2d - public :: plot_2d + + ! FPLOT_PLOT_DATA_3D.F90 public :: plot_data_3d - public :: plot_3d + + ! FPLOT_SURFACE_PLOT_DATA.F90 public :: surface_plot_data - public :: surface_plot + + ! FPLOT_PLOT_DATA_ERROR_BARS.F90 + public :: plot_data_error_bars + + ! FPLOT_PLOT_DATA_BAR.F90 + public :: plot_data_bar + + ! FPLOT_PLOT_DATA_HISTOGRAM.F90 + public :: plot_data_histogram + + ! FPLOT_COLORMAP.F90 + public :: cmap public :: colormap + public :: cm_get_string_result public :: rainbow_colormap public :: hot_colormap public :: cool_colormap - public :: plot_label - public :: multiplot - public :: plot_data_error_bars - public :: plot_data_colored - public :: plot_data_bar - public :: plot_data_histogram - public :: plot_bar - public :: plot_data_tri_2d - public :: delaunay_tri_surface - public :: delaunay_tri_2d - public :: tri_surface_plot_data - public :: vector_field_plot_data - public :: plot_polar - public :: filled_plot_data public :: parula_colormap public :: grey_colormap public :: earth_colormap - public :: simplify_polyline - public :: plot_arrow public :: custom_colormap - public :: cmap - public :: assignment(=) - public :: operator(==) - public :: operator(/=) - -! ****************************************************************************** -! ERROR CODES -! ------------------------------------------------------------------------------ - !> @brief Occurs if there is insufficient memory available for the - !! requested operation. - integer(int32), parameter :: PLOT_OUT_OF_MEMORY_ERROR = 1000 - !> @brief Occurs if an invalid input is provided. - integer(int32), parameter :: PLOT_INVALID_INPUT_ERROR = 1001 - !> @brief Occurs if an attempt is made to perform an invalid operation. - integer(int32), parameter :: PLOT_INVALID_OPERATION_ERROR = 1002 - !> @brief Occurs if there is an array size mismatch error. - integer(int32), parameter :: PLOT_ARRAY_SIZE_MISMATCH_ERROR = 1003 - !> @brief Occurs if there is a GNUPLOT file error. - integer(int32), parameter :: PLOT_GNUPLOT_FILE_ERROR = 1004 - -! ****************************************************************************** -! GNUPLOT TERMINAL CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief Defines a Win32 terminal. - integer(int32), parameter :: GNUPLOT_TERMINAL_WIN32 = 1 - !> @brief Defines a WXT terminal. - integer(int32), parameter :: GNUPLOT_TERMINAL_WXT = 2 - !> @brief Defines a QT terminal. - integer(int32), parameter :: GNUPLOT_TERMINAL_QT = 3 - !> @brief Defines a PNG terminal. - integer(int32), parameter :: GNUPLOT_TERMINAL_PNG = 4 - !> @brief Defines a LATEX terminal. - integer(int32), parameter :: GNUPLOT_TERMINAL_LATEX = 5 - -! ****************************************************************************** -! MARKER CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief Defines a + data point marker. - integer(int32), parameter :: MARKER_PLUS = 1 - !> @brief Defines an x data point marker. - integer(int32), parameter :: MARKER_X = 2 - !> @brief Defines an * data point marker. - integer(int32), parameter :: MARKER_ASTERISK = 3 - !> @brief Defines an empty square-shaped data point marker. - integer(int32), parameter :: MARKER_EMPTY_SQUARE = 4 - !> @brief Defines an filled square-shaped data point marker. - integer(int32), parameter :: MARKER_FILLED_SQUARE = 5 - !> @brief Defines an empty circle-shaped data point marker. - integer(int32), parameter :: MARKER_EMPTY_CIRCLE = 6 - !> @brief Defines an filled circle-shaped data point marker. - integer(int32), parameter :: MARKER_FILLED_CIRCLE = 7 - !> @brief Defines an empty triangle-shaped data point marker. - integer(int32), parameter :: MARKER_EMPTY_TRIANGLE = 8 - !> @brief Defines an filled triangle-shaped data point marker. - integer(int32), parameter :: MARKER_FILLED_TRIANGLE = 9 - !> @brief Defines an empty nabla-shaped data point marker. - integer(int32), parameter :: MARKER_EMPTY_NABLA = 10 - !> @brief Defines an filled nabla-shaped data point marker. - integer(int32), parameter :: MARKER_FILLED_NABLA = 11 - !> @brief Defines an empty rhombus-shaped data point marker. - integer(int32), parameter :: MARKER_EMPTY_RHOMBUS = 12 - !> @brief Defines an filled rhombus-shaped data point marker. - integer(int32), parameter :: MARKER_FILLED_RHOMBUS = 13 - -! ****************************************************************************** -! LINE CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief Defines a solid line. - integer(int32), parameter :: LINE_SOLID = 1 - !> @brief Defines a dashed line. - integer(int32), parameter :: LINE_DASHED = 2 - !> @brief Defines a dotted line. - integer(int32), parameter :: LINE_DOTTED = 3 - !> @brief Defines a dash-dotted line. - integer(int32), parameter :: LINE_DASH_DOTTED = 4 - !> @brief Defines a dash-dot-dotted line. - integer(int32), parameter :: LINE_DASH_DOT_DOT = 5 - -! ****************************************************************************** -! LEGEND CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief Defines the legend should be placed at the top of the plot. - character(len = *), parameter :: LEGEND_TOP = "top" - !> @brief Defines the legend should be centered on the plot. - character(len = *), parameter :: LEGEND_CENTER = "center" - !> @brief Defines the legend should be placed at the left of the plot. - character(len = *), parameter :: LEGEND_LEFT = "left" - !> @brief Defines the legend should be placed at the right of the plot. - character(len = *), parameter :: LEGEND_RIGHT = "right" - !> @brief Defines the legend should be placed at the bottom of the plot. - character(len = *), parameter :: LEGEND_BOTTOM = "bottom" - !> @brief Defines the legend should be arranged such that the column count - !! is minimized. - character(len = *), parameter :: LEGEND_ARRANGE_VERTICALLY = "vertical" - !> @brief Defines the legend should be arranged such that the row count - !! is minimized. - character(len = *), parameter :: LEGEND_ARRANGE_HORIZONTALLY = "horizontal" - -! ****************************************************************************** -! POLAR PLOT CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief States that theta should start at the top of the plot. - character(len = *), parameter :: POLAR_THETA_TOP = "top" - !> @brief States that theta should start at the right of the plot. - character(len = *), parameter :: POLAR_THETA_RIGHT = "right" - !> @brief States that theta should start at the bottom of the plot. - character(len = *), parameter :: POLAR_THETA_BOTTOM = "bottom" - !> @brief States that theta should start at the left of the plot. - character(len = *), parameter :: POLAR_THETA_LEFT = "left" - !> @brief States that theta should proceed in a counter-clockwise direction. - character(len = *), parameter :: POLAR_THETA_CCW = "ccw" - !> @brief States that theta should proceed in a clockwise direction. - character(len = *), parameter :: POLAR_THETA_CW = "cw" - -! ****************************************************************************** -! COORDINATE SYSTEM CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief Defines a Cartesian coordinate system. - integer(int32), parameter :: COORDINATES_CARTESIAN = 100 - !> @brief Defines a spherical coordinate system. - integer(int32), parameter :: COORDINATES_SPHERICAL = 101 - !> @brief Defines a cylindrical coordinate system. - integer(int32), parameter :: COORDINATES_CYLINDRICAL = 102 - -! ****************************************************************************** -! PLOT DATA CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief Defines the maximum number of characters allowed in a graph label. - integer(int32), parameter :: PLOTDATA_MAX_NAME_LENGTH = 128 - -! ****************************************************************************** -! PRIVATE/DEFAULT CONSTANTS -! ------------------------------------------------------------------------------ - !> @brief The default GNUPLOT window width, in pixels. - integer(int32), parameter :: GNUPLOT_DEFAULT_WINDOW_WIDTH = 640 - !> @brief The default GNUPLOT window height, in pixels. - integer(int32), parameter :: GNUPLOT_DEFAULT_WINDOW_HEIGHT = 420 - !> @brief Defines the maximum number of characters allowed in a graph label. - integer(int32), parameter :: GNUPLOT_MAX_LABEL_LENGTH = 128 - !> @brief Defines the default font used by text on the graph. - character(len = *), parameter :: GNUPLOT_DEFAULT_FONTNAME = "Calibri" - !> @brief Defines the default font size used by text on the graph. - integer(int32), parameter :: GNUPLOT_DEFAULT_FONT_SIZE = 14 - !> @brief Defines the maximum number of characters allowed in a file path. - integer(int32), parameter :: GNUPLOT_MAX_PATH_LENGTH = 256 - -! ****************************************************************************** -! OPERATORS -! ------------------------------------------------------------------------------ - interface assignment(=) - module procedure :: clr_assign - module procedure :: lbl_assign - module procedure :: par_assign - end interface - - interface operator(==) - module procedure :: clr_equals - end interface - - interface operator(/=) - module procedure :: clr_not_equals - end interface - -! ****************************************************************************** -! BASE TYPES -! ------------------------------------------------------------------------------ - !> @brief The base type for a GNUPLOT object. - type, abstract :: plot_object - contains - !> @brief Returns the appropriate GNUPLOT command string to define the - !! plot object properties. - procedure(get_string_result), deferred, public :: get_command_string - end type - -! ****************************************************************************** -! FPLOT_CORE_ROUTINES.F90 -! ------------------------------------------------------------------------------ - interface - !> @brief Constructs a linearly spaced array. - !! - !! @param[in] start The first value in the array. - !! @param[in] finish The last value in the array. - !! @param[in] npts The number of values in the array. - !! - !! @return The resulting array. - pure module function linspace(start, finish, npts) result(x) - real(real64), intent(in) :: start, finish - integer(int32), intent(in) :: npts - real(real64), allocatable, dimension(:) :: x - end function - - !> @brief Construcst a logarithmically spaced array. - !! - !! @param[in] start The exponent of the first value in the array. - !! @param[in] finish The exponent of the final value in the array. - !! @param[in] npts The number of values in the array. - !! - !! @return The resulting array. - pure module function logspace(start, finish, npts) result(x) - real(real64), intent(in) :: start, finish - integer(int32), intent(in) :: npts - real(real64), allocatable, dimension(:) :: x - end function - - !> @brief Constructs two matrices (X and Y) from x and y data arrays. - !! - !! @param[in] x An M-element array of x data points. - !! @param[in] y An N-element array of y data points. - !! @return An N-by-M-by-2 array containing the x data matrix on the - !! first page of the array, and the y data matrix on the second page. - pure module function meshgrid(x, y) result(xy) - real(real64), intent(in), dimension(:) :: x, y - real(real64), allocatable, dimension(:,:,:) :: xy - end function - end interface - -! ****************************************************************************** -! FPLOT_COLORS.F90 -! ------------------------------------------------------------------------------ - !> @brief Describes an RGB color. - type color - !> @brief The red component of the color (must be between 0 and 255). - integer(int32), public :: red = 0 - !> @brief The green component of the color (must be between 0 and 255). - integer(int32), public :: green = 0 - !> @brief The blue component of the color (must be between 0 and 255). - integer(int32), public :: blue = 255 - contains - !> @brief Returns the color in hexadecimal format. - !! - !! @par Syntax - !! @code{.f90} - !! pure character(6) function clr_to_hex_string(class(color) this) - !! @endcode - !! - !! @param[in] this The color object. - !! @return A string containing the hexadecimal equivalent. - procedure, public, pass :: to_hex_string => clr_to_hex_string - !> @brief Copies another color to this color. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine copy_from(class(color) this, class(color) clr) - !! @endcode - !! - !! @param[in,out] this The color object. - !! @param[in] clr The color to copy. - procedure, public, pass :: copy_from => clr_copy_from - end type - -! ------------------------------------------------------------------------------ - interface - pure module function clr_to_hex_string(this) result(txt) - class(color), intent(in) :: this - character(6) :: txt - end function - - pure module subroutine clr_copy_from(this, clr) - class(color), intent(inout) :: this - class(color), intent(in) :: clr - end subroutine - - pure module subroutine clr_assign(x, y) - type(color), intent(out) :: x - class(color), intent(in) :: y - end subroutine - - pure module function clr_equals(x, y) result(rst) - type(color), intent(in) :: x, y - logical :: rst - end function - - pure module function clr_not_equals(x, y) result(rst) - type(color), intent(in) :: x, y - logical :: rst - end function - end interface - -! ------------------------------------------------------------------------------ - !> @brief Defines a black color. - type(color), parameter :: CLR_BLACK = color(0, 0, 0) - !> @brief Defines a white color. - type(color), parameter :: CLR_WHITE = color(255, 255, 255) - !> @brief Defines a red color. - type(color), parameter :: CLR_RED = color(255, 0, 0) - !> @brief Defines a lime color. - type(color), parameter :: CLR_LIME = color(0, 255, 0) - !> @brief Defines a blue color. - type(color), parameter :: CLR_BLUE = color(0, 0, 255) - !> @brief Defines a yellow color. - type(color), parameter :: CLR_YELLOW = color(255, 255, 0) - !> @brief Defines a cyan color. - type(color), parameter :: CLR_CYAN = color(0, 255, 255) - !> @brief Defines a magenta color. - type(color), parameter :: CLR_MAGENTA = color(255, 0, 255) - !> @brief Defines a silver color. - type(color), parameter :: CLR_SILVER = color(192, 192, 192) - !> @brief Defines a gray color. - type(color), parameter :: CLR_GRAY = color(128, 128, 128) - !> @brief Defines a maroon color. - type(color), parameter :: CLR_MAROON = color(128, 0, 0) - !> @brief Defines a olive color. - type(color), parameter :: CLR_OLIVE = color(128, 128, 0) - !> @brief Defines a green color. - type(color), parameter :: CLR_GREEN = color(0, 128, 0) - !> @brief Defines a purple color. - type(color), parameter :: CLR_PURPLE = color(128, 0, 128) - !> @brief Defines a teal color. - type(color), parameter :: CLR_TEAL = color(0, 128, 128) - !> @brief Defines a navy color. - type(color), parameter :: CLR_NAVY = color(0, 0, 128) - !> @brief Defines an orange color. - type(color), parameter :: CLR_ORANGE = color(255, 165, 0) - - ! A list of colors that can be cycled through by plotting code - type(color), parameter, dimension(7) :: color_list = [ & - color(0, int(0.447 * 255), int(0.741 * 255)), & - color(int(0.85 * 255), int(0.325 * 255), int(0.098 * 255)), & - color(int(0.929 * 255), int(0.694 * 255), int(0.125 * 255)), & - color(int(0.494 * 255), int(0.184 * 255), int(0.556 * 255)), & - color(int(0.466 * 255), int(0.674 * 255), int(0.188 * 255)), & - color(int(0.301 * 255), int(0.745 * 255), int(0.933 * 255)), & - color(int(0.635 * 255), int(0.078 * 255), int(0.184 * 255))] - ! type(color), parameter, dimension(8) :: color_list = [ & - ! CLR_BLUE, CLR_GREEN, CLR_RED, CLR_CYAN, CLR_LIME, CLR_PURPLE, & - ! CLR_ORANGE, CLR_BLACK] - -! ****************************************************************************** -! FPLOT_LABEL.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a label object for a plot. - type, extends(plot_object) :: plot_label - private - !> Determines if the label is visible - logical :: m_visible = .true. - !> The x, y, and z coordinates of the label - real(real32), dimension(3) :: m_position - !> The rotation angle of the label - real(real32) :: m_angle = 0.0 - !> The label text - character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_text - contains - !> @brief Gets the GNUPLOT command string for the label. - !! - !! @par Syntax - !! @code{.f90} - !! character(:) function allocatable get_command_string(class(plot_label) this) - !! @endcode - !! - !! @param[in] this The plot_label object. - !! @return The command string. - procedure, public :: get_command_string => lbl_get_cmd - !> @brief Gets a value determining if the label is to be drawn. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_is_visible(class(plot_label) this) - !! @endcode - !! - !! @param[in] this The plot_label object. - !! @return Returns true if the label is to be drawn; else, false. - procedure, public :: get_is_visible => lbl_get_is_visible - !> @brief Sets a value determining if the label is to be drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_is_visible(class(plot_label) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_label object. - !! @param[in] x Set to true to draw the label; else, false. - procedure, public :: set_is_visible => lbl_set_is_visible - !> @brief Gets the position of the label in terms of plot coordinates. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) dimension(3) function get_position(class(plot_label) this) - !! @endcode - !! - !! @param[in] this The plot_label object. - !! @return A 3-element array containing the X, Y, and Z position of the label. - procedure, public :: get_position => lbl_get_position - !> @brief Sets the position of the label in terms of plot coordinates. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_position(class(plot_label) this, real(real32) x(3)) - !! @endcode - !! - !! @param[in,out] this The plot_label object. - !! @param[in] x A 3-element array containing the X, Y, and Z position of the - !! label. - procedure, public :: set_position => lbl_set_position - !> @brief Gets the angle of the label text, in degrees. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_angle(class(plot_label) this) - !! @endcode - !! - !! @param[in] this The plot_label object. - !! @return The angle, in degrees. - procedure, public :: get_angle => lbl_get_angle - !> @brief Sets the angle of the label text, in degrees. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_angle(class(plot_label) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The plot_label object. - !! @param[in] x The angle, in degrees. - procedure, public :: set_angle => lbl_set_angle - !> @brief Gets the text displayed by the label. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function allocatable get_text(class(plot_label) this) - !! @endcode - !! - !! @param[in] this The plot_label object. - !! @return The string of text to display. - procedure, public :: get_text => lbl_get_txt - !> @brief Sets the text displayed by the label. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_text(class(plot_label) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The plot_label object. - !! @param[in] x The text string to display. - procedure, public :: set_text => lbl_set_txt - end type - -! ------------------------------------------------------------------------------ - interface - module function lbl_get_cmd(this) result(x) - class(plot_label), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function lbl_get_is_visible(this) result(x) - class(plot_label), intent(in) :: this - logical :: x - end function - - module subroutine lbl_set_is_visible(this, x) - class(plot_label), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function lbl_get_position(this) result(x) - class(plot_label), intent(in) :: this - real(real32), dimension(3) :: x - end function - - module subroutine lbl_set_position(this, x) - class(plot_label), intent(inout) :: this - real(real32), intent(in), dimension(3) :: x - end subroutine - - pure module function lbl_get_angle(this) result(x) - class(plot_label), intent(in) :: this - real(real32) :: x - end function - - module subroutine lbl_set_angle(this, x) - class(plot_label), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - module function lbl_get_txt(this) result(x) - class(plot_label), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine lbl_set_txt(this, x) - class(plot_label), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - pure module subroutine lbl_assign(x, y) - type(plot_label), intent(out) :: x - class(plot_label), intent(in) :: y - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_ARROW.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines an arrow with no head. - integer(int32), parameter :: ARROW_NO_HEAD = 0 - !> @brief Defines an arrow with a traditional head. - integer(int32), parameter :: ARROW_HEAD = 1 - !> @brief Defines an arrow with it's head at it's back end (tail). - integer(int32), parameter :: ARROW_BACKHEAD = 2 - !> @brief Defines an arrow with a head on both ends. - integer(int32), parameter :: ARROW_HEADS = 3 - !> @brief Defines a filled arrow head. - integer(int32), parameter :: ARROW_FILLED = 100 - !> @brief Defines an empty arrow head. - integer(int32), parameter :: ARROW_EMPTY = 101 - !> @brief Defines an arrow head without fill. - integer(int32), parameter :: ARROW_NO_FILL = 102 - !> @brief Defines an arrow head with no border. - integer(int32), parameter :: ARROW_NO_BORDER = 103 - -! ------------------------------------------------------------------------------ - !> @brief Defines an arrow to be used on by a @ref plot object. - type, extends(plot_object) :: plot_arrow - ! Determines if the arrow is visible. - logical, private :: m_visible = .true. - ! The x, y, z coordinates of the tail - real(real32), dimension(3) :: m_tail = [0.0, 0.0, 0.0] - ! The x, y, z coordinates of the head - real(real32), dimension(3) :: m_head = [0.0, 0.0, 0.0] - ! The arrow color. - type(color) :: m_color = CLR_BLACK - ! The line style - integer(int32) :: m_linestyle = LINE_SOLID - ! The line width - real(real32) :: m_linewidth = 1.0 - ! The head configuration - integer(int32) :: m_head_type = ARROW_HEAD - ! Arrow filling - integer(int32) :: m_filling = ARROW_FILLED - ! Move to front? - logical :: m_front = .true. - ! Arrow head size - real(real32) :: m_size = 0.375 - ! Arrow head angle - real(real32) :: m_angle = 10.0 - ! Arrow head back angle - real(real32) :: m_backangle = 90.0 - ! Use default head size - logical :: m_use_default_size = .true. - contains - !> @brief Gets a value determining if the arrow is visible. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_is_visible(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return True if the arrow is visible; else, false. - procedure, public :: get_is_visible => par_get_is_visible - !> @brief Sets a value determining if the arrow is visible. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_is_visible(class(plot_arrow) this, logical x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x True if the arrow is visible; else, false. - procedure, public :: set_is_visible => par_set_is_visible - !> @brief Gets the coordinates of the arrow's tail. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32)(3) function get_tail_location(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return A 3-element array containing the x, y, and z coordinates of - !! the arrow's tail. - procedure, public :: get_tail_location => par_get_tail - !> @brief Sets the location of the arrow's tail. - !! - !! @par Syntax 1 - !! @code{.f90} - !! subroutine set_tail_location(class(plot_arrow) this, real(real32) x(3)) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x A 3-element array containing the x, y, and z coordiantes - !! of the arrow's tail. - !! - !! @par Syntax 2 - !! @code{.f90} - !! subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The x-coordinate of the arrow's tail. - !! @param[in] y The y-coordinate of the arrow's tail. - !! - !! @par Syntax 3 - !! @code{.f90} - !! subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The x-coordinate of the arrow's tail. - !! @param[in] y The y-coordinate of the arrow's tail. - !! @param[in] z The z-coordinate of the arrow's tail. - generic, public :: set_tail_location => par_set_tail_1, & - par_set_tail_2, par_set_tail_3 - procedure, private :: par_set_tail_1 - procedure, private :: par_set_tail_2 - procedure, private :: par_set_tail_3 - !> @brief Gets the coordinates of the arrow's head. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32)(3) function get_head_location(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return A 3-element array containing the x, y, and z coordinates of - !! the arrow's head. - procedure, public :: get_head_location => par_get_head - !> @brief Sets the location of the arrow's head. - !! - !! @par Syntax 1 - !! @code{.f90} - !! subroutine set_head_location(class(plot_arrow) this, real(real32) x(3)) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x A 3-element array containing the x, y, and z coordiantes - !! of the arrow's head. - !! - !! @par Syntax 2 - !! @code{.f90} - !! subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The x-coordinate of the arrow's head. - !! @param[in] y The y-coordinate of the arrow's head. - !! - !! @par Syntax 3 - !! @code{.f90} - !! subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The x-coordinate of the arrow's head. - !! @param[in] y The y-coordinate of the arrow's head. - !! @param[in] z The z-coordinate of the arrow's head. - generic, public :: set_head_location => par_set_head_1, & - par_set_head_2, par_set_head_3 - procedure, private :: par_set_head_1 - procedure, private :: par_set_head_2 - procedure, private :: par_set_head_3 - !> @brief Gets the color of the arrow. - !! - !! @par Syntax - !! @code{.f90} - !! pure type(color) function get_color(class(arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The color. - procedure, public :: get_color => par_get_color - !> @brief Sets the color of the arrow. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_color(class(arrow) this, type(color) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The color. - procedure, public :: set_color => par_set_color - !> @brief Gets the line style used to draw the arrow. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_line_style(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The line style. - procedure, public :: get_line_style => par_get_line_style - !> @brief Sets the line style used to draw the arrow. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_line_style(class(plot_arrow) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param The line style. The value must be one of the following. - !! - LINE_SOLID - !! - LINE_DASHED - !! - LINE_DASH_DOTTED - !! - LINE_DASH_DOT_DOT - !! - LINE_DOTTED - !! If the value is not one of the above, the command is ignored. - procedure, public :: set_line_style => par_set_line_style - !> @brief Gets the width of the lines used to draw the arrow. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_line_width(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The width of the line. - procedure, public :: get_line_width => par_get_line_width - !> @brief Sets the width of the lines used to draw the arrow. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_line_width(class(plot_arrow) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The width of the line. - procedure, public :: set_line_width => par_set_line_width - !> @brief Gets the type of arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_head_type(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The arrow head type. It is one of the following constants. - !! - ARROW_HEAD - !! - ARROW_BACKHEAD - !! - ARROW_HEADS - !! - ARROW_NO_HEAD - procedure, public :: get_head_type => par_get_head_type - !> @brief Sets the type of arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_head_type(class(plot_arrow) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The arrow head type. It must be one of the following - !! constants. - !! - ARROW_HEAD - !! - ARROW_BACKHEAD - !! - ARROW_HEADS - !! - ARROW_NO_HEAD - procedure, public :: set_head_type => par_set_head_type - !> @brief Gets a flag denoting the head fill type. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_head_fill(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The flag denoting head fill. It will be one of the - !! following constants. - !! - ARROW_FILLED - !! - ARROW_EMPTY - !! - ARROW_NO_BORDER - !! - ARROW_NO_FILL - procedure, public :: get_head_fill => par_get_fill - !> @brief Sets a flag denoting the head fill type. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_head_fill(class(plot_arrow) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The flag denoting head fill. It must be one of the - !! following constants. - !! - ARROW_FILLED - !! - ARROW_EMPTY - !! - ARROW_NO_BORDER - !! - ARROW_NO_FILL - procedure, public :: set_head_fill => par_set_fill - !> @brief Gets a value determining if the arrow should be moved to the - !! front. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_move_to_front(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return True if the arrow should be moved to the front; else, false. - procedure, public :: get_move_to_front => par_get_move_to_front - !> @brief Sets a value determining if the arrow should be moved to the - !! front. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_move_to_front(class(plot_arrow) this, logical x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x True if the arrow should be moved to the front; else, - !! false. - procedure, public :: set_move_to_front => par_set_move_to_front - !> @brief Gets the size of the arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_head_size(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The head size. - procedure, public :: get_head_size => par_get_head_size - !> @brief Sets the size of the arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_head_size(class(plot_arrow) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The head size. - procedure, public :: set_head_size => par_set_head_size - !> @brief Gets the angle of the arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_head_angle(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The angle, in degrees. - procedure, public :: get_head_angle => par_get_head_angle - !> @brief Sets the angle of the arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_head_angle(class(plot_arrow) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The angle, in degrees. - procedure, public :: set_head_angle => par_set_head_angle - !> @brief Gets the angle of the back of the arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_head_back_angle(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return The angle, in degrees. - procedure, public :: get_head_back_angle => par_get_head_back_angle - !> @brief Sets the angle of the back of the arrow head. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_head_back_angle(class(plot_arrow) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x The angle, in degrees. - procedure, public :: set_head_back_angle => par_set_head_back_angle - !> @brief Gets a value determining if arrow head sizing defaults - !! should be used. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_default_size(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot_arrow object. - !! @return True if the defaults should be used; else, false. - procedure, public :: get_use_default_size => par_get_use_default_size - !> @brief Sets a value determining if arrow head sizing defaults - !! should be used. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_default_size(class(plot_arrow) this, logical x) - !! @endcode - !! - !! @param[in,out] this The @ref plot_arrow object. - !! @param[in] x True if the defaults should be used; else, false. - procedure, public :: set_use_default_size => par_set_use_default_size - !> @brief Returns the appropriate GNUPLOT command string to establish - !! appropriate parameters. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The plot_arrow object. - !! @return The GNUPLOT command string. - procedure, public :: get_command_string => par_get_cmd - end type - -! ------------------------------------------------------------------------------ - ! fplot_arrow.f90 - interface - pure module function par_get_is_visible(this) result(rst) - class(plot_arrow), intent(in) :: this - logical :: rst - end function - - module subroutine par_set_is_visible(this, x) - class(plot_arrow), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function par_get_tail(this) result(rst) - class(plot_arrow), intent(in) :: this - real(real32), dimension(3) :: rst - end function - - module subroutine par_set_tail_1(this, x) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x(3) - end subroutine - - module subroutine par_set_tail_2(this, x, y) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y - end subroutine - - module subroutine par_set_tail_3(this, x, y, z) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y, z - end subroutine - - pure module function par_get_head(this) result(rst) - class(plot_arrow), intent(in) :: this - real(real32), dimension(3) :: rst - end function - - module subroutine par_set_head_1(this, x) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x(3) - end subroutine - - module subroutine par_set_head_2(this, x, y) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y - end subroutine - - module subroutine par_set_head_3(this, x, y, z) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x, y, z - end subroutine - - pure module function par_get_color(this) result(rst) - class(plot_arrow), intent(in) :: this - type(color) :: rst - end function - - module subroutine par_set_color(this, x) - class(plot_arrow), intent(inout) :: this - type(color), intent(in) :: x - end subroutine - - pure module function par_get_line_style(this) result(rst) - class(plot_arrow), intent(in) :: this - integer(int32) :: rst - end function - - module subroutine par_set_line_style(this, x) - class(plot_arrow), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - pure module function par_get_line_width(this) result(rst) - class(plot_arrow), intent(in) :: this - real(real32) :: rst - end function - - module subroutine par_set_line_width(this, x) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function par_get_head_type(this) result(rst) - class(plot_arrow), intent(in) :: this - integer(int32) :: rst - end function - - module subroutine par_set_head_type(this, x) - class(plot_arrow), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - module function par_get_cmd(this) result(rst) - class(plot_arrow), intent(in) :: this - character(len = :), allocatable :: rst - end function - - pure module function par_get_fill(this) result(rst) - class(plot_arrow), intent(in) :: this - integer(int32) :: rst - end function - - module subroutine par_set_fill(this, x) - class(plot_arrow), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - pure module function par_get_move_to_front(this) result(rst) - class(plot_arrow), intent(in) :: this - logical :: rst - end function - - module subroutine par_set_move_to_front(this, x) - class(plot_arrow), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function par_get_head_size(this) result(rst) - class(plot_arrow), intent(in) :: this - real(real32) :: rst - end function - - module subroutine par_set_head_size(this, x) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function par_get_head_angle(this) result(rst) - class(plot_arrow), intent(in) :: this - real(real32) :: rst - end function - - module subroutine par_set_head_angle(this, x) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function par_get_head_back_angle(this) result(rst) - class(plot_arrow), intent(in) :: this - real(real32) :: rst - end function - - pure module function par_get_use_default_size(this) result(rst) - class(plot_arrow), intent(in) :: this - logical :: rst - end function - - module subroutine par_set_use_default_size(this, x) - class(plot_arrow), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module subroutine par_set_head_back_angle(this, x) - class(plot_arrow), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module subroutine par_assign(x, y) - type(plot_arrow), intent(out) :: x - class(plot_arrow), intent(in) :: y - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_TERMINAL.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a GNUPLOT terminal object. - type, abstract, extends(plot_object) :: terminal - private - !> The window height, in pixels - integer(int32) :: m_windowHeight = GNUPLOT_DEFAULT_WINDOW_HEIGHT - !> The window width, in pixels - integer(int32) :: m_windowWidth = GNUPLOT_DEFAULT_WINDOW_WIDTH - !> The plot window number. - integer(int32) :: m_termID = 0 - !> The plot window title. - character(len = GNUPLOT_MAX_LABEL_LENGTH) :: m_title = "" - !> Determines if a plot title is defined - logical :: m_hasTitle = .false. - !> The font used by the graph. - character(len = GNUPLOT_MAX_LABEL_LENGTH) :: m_fontName = & - GNUPLOT_DEFAULT_FONTNAME - !> The size of the font used by the graph. - integer(int32) :: m_fontSize = GNUPLOT_DEFAULT_FONT_SIZE - contains - !> @brief Gets the width of the plot window. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_window_width(class(terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The width of the plot window. - procedure, public :: get_window_width => term_get_window_width - !> @brief Sets the width of the plot window. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_window_width(class(terminal) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The terminal object. - !! @param[in] x The width of the plot window. If a value of zero is - !! provided, the window width is reset to its default value; or, if a - !! negative value is provided, the absolute value of the supplied value - !! is utilized. - procedure, public :: set_window_width => term_set_window_width - !> @brief Gets the height of the plot window. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_window_height(class(terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The height of the plot window. - procedure, public :: get_window_height => term_get_window_height - !> @brief Sets the height of the plot window. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_window_height(class(terminal) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The terminal object. - !! @param[in] x The height of the plot window. If a value of zero is - !! provided, the window height is reset to its default value; or, if a - !! negative value is provided, the absolute value of the supplied value is - !! utilized. - procedure, public :: set_window_height => term_set_window_height - !> @brief Returns the appropriate GNUPLOT command string to establish - !! appropriate parameters. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The GNUPLOT command string. - procedure, public :: get_command_string => term_get_command_string - !> @brief Gets the targeted plot window number. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_plot_window_number(class(terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The plot window number. - procedure, public :: get_plot_window_number => & - term_get_plot_window_number - !> @brief Sets the targeted plot window number. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_plot_window_number(class(terminal) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The terminal object. - !! @param[in] x The plot window number. - procedure, public :: set_plot_window_number => & - term_set_plot_window_number - !> @brief Gets the plot window's title. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_title(class(terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The title. - procedure, public :: get_title => term_get_title - !> @brief Sets the plot window's title. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_title(class(terminal) this, character(len = *) txt) - !! @endcode - !! - !! @param[in,out] this The terminal object. - !! @param[in] txt The title. - procedure, public :: set_title => term_set_title - !> @brief Gets the name of the font used for text displayed by the - !! graph. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_font_name(class(terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The font name. - procedure, public :: get_font_name => term_get_font_name - !> @brief Sets the name of the font used for text displayed by the - !! graph. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_font_name(class(terminal) this, character(len = *) name) - !! @endcode - !! - !! @param[in,out] this The terminal object. - !! @param[in] name The name of the font. If no name is supplied, the - !! name is reset back to its default setting. - procedure, public :: set_font_name => term_set_font_name - !> @brief Gets the size of the font used by the graph. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_font_size(class(terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The font size, in points. - procedure, public :: get_font_size => term_get_font_size - !> @brief Sets the size of the font used by the graph. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_font_size(class(terminal) this, integer(int32) sz) - !! @endcode - !! - !! @param[in,out] this The terminal object. - !! @param[in] sz The font size, in points. If a value of zero is provided, - !! the font size is reset to its default value; or, if a negative value - !! is provided, the absolute value of the supplied value is utilized. - procedure, public :: set_font_size => term_set_font_size - !> @brief Gets the GNUPLOT terminal identification string. - procedure(term_get_string_result), deferred, public :: get_id_string - end type - -! ------------------------------------------------------------------------------ - interface - pure module function term_get_window_width(this) result(x) - class(terminal), intent(in) :: this - integer :: x - end function - - module subroutine term_set_window_width(this, x) - class(terminal), intent(inout) :: this - integer, intent(in) :: x - end subroutine - - pure module function term_get_window_height(this) result(x) - class(terminal), intent(in) :: this - integer :: x - end function - - module subroutine term_set_window_height(this, x) - class(terminal), intent(inout) :: this - integer, intent(in) :: x - end subroutine - - pure module function term_get_plot_window_number(this) result(x) - class(terminal), intent(in) :: this - integer(int32) :: x - end function - - module subroutine term_set_plot_window_number(this, x) - class(terminal), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - module function term_get_title(this) result(str) - class(terminal), intent(in) :: this - character(len = :), allocatable :: str - end function - - module subroutine term_set_title(this, txt) - class(terminal), intent(inout) :: this - character(len = *), intent(in) :: txt - end subroutine - - module function term_get_font_name(this) result(name) - class(terminal), intent(in) :: this - character(len = :), allocatable :: name - end function - - module subroutine term_set_font_name(this, name) - class(terminal), intent(inout) :: this - character(len = *), intent(in) :: name - end subroutine - - pure module function term_get_font_size(this) result(sz) - class(terminal), intent(in) :: this - integer(int32) :: sz - end function - - module subroutine term_set_font_size(this, sz) - class(terminal), intent(inout) :: this - integer(int32), intent(in) :: sz - end subroutine - - module function term_get_command_string(this) result(x) - class(terminal), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface - -! ****************************************************************************** -! FPLOT_WINDOWS_TERMINAL.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a GNUPLOT Win32 terminal object. - type, extends(terminal) :: windows_terminal - private - !> The terminal ID string - character(len = 3) :: m_id = "win" - contains - !> @brief Retrieves a GNUPLOT terminal identifier string. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(windows_terminal) this) - !! @endcode - !! - !! @param[in] this The windows_terminal object. - !! @return The string. - procedure, public :: get_id_string => wt_get_term_string - end type - -! ------------------------------------------------------------------------------ - interface - module function wt_get_term_string(this) result(x) - class(windows_terminal), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface - -! ****************************************************************************** -! FPLOT_QT_TERMINAL.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a GNUPLOT QT terminal object. - type, extends(terminal) :: qt_terminal - private - !> The terminal ID string - character(len = 2) :: m_id = "qt" - contains - !> @brief Retrieves a GNUPLOT terminal identifier string. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(qt_terminal) this) - !! @endcode - !! - !! @param[in] this The qt_terminal object. - !! @return The string. - procedure, public :: get_id_string => qt_get_term_string - end type -! ------------------------------------------------------------------------------ - interface - module function qt_get_term_string(this) result(x) - class(qt_terminal), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface + ! FPLOT_FILLED_PLOT_DATA.F90 + public :: filled_plot_data -! ****************************************************************************** -! FPLOT_WXT_TERMINAL.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a GNUPLOT WXT terminal object. - type, extends(terminal) :: wxt_terminal - private - !> The terminal ID string - character(len = 3) :: m_id = "wxt" - contains - !> @brief Retrieves a GNUPLOT terminal identifier string. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(wxt_terminal) this) - !! @endcode - !! - !! @param[in] this The wxt_terminal object. - !! @return The string. - procedure, public :: get_id_string => wxt_get_term_string - end type + ! FPLOT_TRIANGULATIONS_DELAUNAY_2D.F90 + public :: delaunay_tri_2d -! ------------------------------------------------------------------------------ - interface - module function wxt_get_term_string(this) result(x) - class(wxt_terminal), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface + ! FPLOT_PLOT_DATA_TRI_2D.F90 + public :: plot_data_tri_2d -! ****************************************************************************** -! FPLOT_PNG_TERMINAL.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a GNUPLOT PNG terminal object. - type, extends(terminal) :: png_terminal - private - !> The terminal ID string - character(len = 3) :: m_id = "png" - !> The filename of the PNG file to write. - character(len = GNUPLOT_MAX_PATH_LENGTH) :: m_fname = "default.png" - contains - !> @brief Gets the filename for the output PNG file. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_filename(class(png_terminal) this) - !! @endcode - !! - !! @param[in] this The png_terminal object. - !! @return The filename, including the file extension (.png). - procedure, public :: get_filename => png_get_filename - !> @brief Sets the filename for the output PNG file. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_filename(class(png_terminal) this, character(len = *) txt) - !! @endcode - !! - !! @param[in,out] this The png_terminal object. - !! @param[in] txt The filename, including the file extension (.png). - procedure, public :: set_filename => png_set_filename - !> @brief Retrieves a GNUPLOT terminal identifier string. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(png_terminal) this) - !! @endcode - !! - !! @param[in] this The png_terminal object. - !! @return The string. - procedure, public :: get_id_string => png_get_term_string - !> @brief Returns the appropriate GNUPLOT command string to establish - !! appropriate parameters. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(png_terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The GNUPLOT command string. - procedure, public :: get_command_string => png_get_command_string - end type + ! FPLOT_DELAUNAY_TRI_SURFACE.F90 + public :: delaunay_tri_surface + + ! FPLOT_TRI_SURFACE_PLOT_DATA.F90 + public :: tri_surface_plot_data -! ------------------------------------------------------------------------------ - interface - module function png_get_term_string(this) result(x) - class(png_terminal), intent(in) :: this - character(len = :), allocatable :: x - end function + ! FPLOT_VECTOR_FIELD_PLOT_DATA.F90 + public :: vector_field_plot_data - module function png_get_filename(this) result(txt) - class(png_terminal), intent(in) :: this - character(len = :), allocatable :: txt - end function + ! FPLOT_PLOT.F90 + public :: plot - module subroutine png_set_filename(this, txt) - class(png_terminal), intent(inout) :: this - character(len = *), intent(in) :: txt - end subroutine + ! FPLOT_PLOT_2D.F90 + public :: plot_2d - module function png_get_command_string(this) result(x) - class(png_terminal), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface + ! FPLOT_PLOT_3D.F90 + public :: plot_3d -! ****************************************************************************** -! FPLOT_LATEX.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a GNUPLOT LATEX terminal object. - type, extends(terminal) :: latex_terminal - private - !> The terminal ID string - character(len = 14) :: m_id = "epslatex color" - !> The filename of the PNG file to write. - character(len = GNUPLOT_MAX_PATH_LENGTH) :: m_fname = "default.tex" - contains - !> @brief Gets the filename for the output LATEX file. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_filename(class(latex_terminal) this) - !! @endcode - !! - !! @param[in] this The latex_terminal object. - !! @return The filename, including the file extension (.tex). - procedure, public :: get_filename => tex_get_filename - !> @brief Sets the filename for the output LATEX file. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_filename(class(latex_terminal) this, character(len = *) txt) - !! @endcode - !! - !! @param[in,out] this The latex_terminal object. - !! @param[in] txt The filename, including the file extension (.tex). - procedure, public :: set_filename => tex_set_filename - !> @brief Retrieves a GNUPLOT terminal identifier string. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(latex_terminal) this) - !! @endcode - !! - !! @param[in] this The latex_terminal object. - !! @return The string. - procedure, public :: get_id_string => tex_get_term_string - !> @brief Returns the appropriate GNUPLOT command string to establish - !! appropriate parameters. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(latex_terminal) this) - !! @endcode - !! - !! @param[in] this The terminal object. - !! @return The GNUPLOT command string. - procedure, public :: get_command_string => tex_get_command_string - end type + ! FPLOT_SURFACE_PLOT.F90 + public :: surface_plot -! ------------------------------------------------------------------------------ - interface - module function tex_get_term_string(this) result(x) - class(latex_terminal), intent(in) :: this - character(len = :), allocatable :: x - end function + ! FPLOT_MULTIPLOT.F90 + public :: multiplot + + ! FPLOT_PLOT_BAR.F90 + public :: plot_bar + + ! FPLOT_PLOT_POLAR.F90 + public :: plot_polar - module function tex_get_filename(this) result(txt) - class(latex_terminal), intent(in) :: this - character(len = :), allocatable :: txt - end function - module subroutine tex_set_filename(this, txt) - class(latex_terminal), intent(inout) :: this - character(len = *), intent(in) :: txt - end subroutine + ! public :: assignment(=) + - module function tex_get_command_string(this) result(x) - class(latex_terminal), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface -! ****************************************************************************** -! FPLOT_PLOT_DATA.F90 -! ------------------------------------------------------------------------------ - !> @brief Provides a container for plot data. - type, abstract, extends(plot_object) :: plot_data - private - !> The name of the data set. - character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_name = "" - contains - !> @brief Gets the name to associate with this data set. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_name(class(plot_data) this) - !! @endcode - !! - !! @param[in] this The plot_data object. - !! @return The name. - procedure, public :: get_name => pd_get_name - !> @brief Sets the name to associate with this data set. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_name(class(plot_data) this, character(len = *) txt) - !! @endcode - !! - !! @param[in,out] this The plot_data object. - !! @param[in] txt The name. - procedure, public :: set_name => pd_set_name - !> @brief Gets the GNUPLOT command string containing the actual data - !! to plot. - procedure(pd_get_string_result), deferred, public :: get_data_string - end type -! ------------------------------------------------------------------------------ - interface - pure module function pd_get_name(this) result(txt) - class(plot_data), intent(in) :: this - character(len = :), allocatable :: txt - end function - module subroutine pd_set_name(this, txt) - class(plot_data), intent(inout) :: this - character(len = *), intent(in) :: txt - end subroutine - end interface ! ****************************************************************************** -! FPLOT_PLOT_DATA_COLORED.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a plot_data based object best represented by a color. - type, abstract, extends(plot_data) :: plot_data_colored - private - !> The line color. - type(color) :: m_color = CLR_BLUE - !> Let the object choose colors automatically - logical :: m_useAutoColor = .true. - !> The color index to use, assuming we're using auto color - integer(int32) :: m_colorIndex = 1 - contains - !> @brief Gets the line color. - !! - !! @par Syntax - !! @code{.f90} - !! pure type(color) function get_line_color(class(plot_data_colored) this) - !! @endcode - !! - !! @param[in] this The plot_data_colored instance. - !! @return The color. - procedure, public :: get_line_color => pdc_get_line_color - !> @brief Sets the line color. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_line_color(class(plot_data_colored) this, type(color) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_colored instance. - !! @param[in] x The color. - procedure, public :: set_line_color => pdc_set_line_color - procedure, private :: get_color_index => pdc_get_color_index - procedure, private :: set_color_index => pdc_set_color_index - end type - +! OPERATORS ! ------------------------------------------------------------------------------ - interface - pure module function pdc_get_line_color(this) result(x) - class(plot_data_colored), intent(in) :: this - type(color) :: x - end function - - module subroutine pdc_set_line_color(this, x) - class(plot_data_colored), intent(inout) :: this - type(color), intent(in) :: x - end subroutine + ! interface assignment(=) + ! ! module procedure :: clr_assign + ! ! module procedure :: lbl_assign + ! ! module procedure :: par_assign + ! end interface - pure module function pdc_get_color_index(this) result(x) - class(plot_data_colored), intent(in) :: this - integer(int32) :: x - end function - - module subroutine pdc_set_color_index(this, x) - class(plot_data_colored), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_AXIS.F90 -! ------------------------------------------------------------------------------ - !> @brief Describes a single plot axis. - type, abstract, extends(plot_object) :: plot_axis - private - !> @brief Has a title. - logical :: m_hasTitle = .false. - !> @brief The axis title. - character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_title = "" - !> @brief Autoscale? - logical :: m_autoscale = .true. - !> @brief Display limits. - real(real64), dimension(2) :: m_limits = [0.0d0, 1.0d0] - !> @brief Log scaled? - logical :: m_logScale = .false. - !> @brief Zero axis? - logical :: m_zeroAxis = .false. - !> @brief The width, in pixels, of the zero axis line. - real(real32) :: m_axisWidth = 1.0 - ! ADDED March 29, 2023 - JAC - !> @brief Use default tic label format? - logical :: m_defaultTicLabels = .true. - !> @brief The tic label format. - character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_ticLabelFmt = "%g" - contains - !> @brief Gets the axis' title. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_title(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return The title. - procedure, public :: get_title => pa_get_title - !> @brief Sets the axis' title. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_title(class(plot_axis) this, character(len = *) txt) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] txt The axis title. The number of characters must be less - !! than or equal to PLOTDATA_MAX_NAME_LENGTH; else, the text string is - !! truncated. - procedure, public :: set_title => pa_set_title - !> @brief Gets a value determining if a title has been defined for the - !! plot_axis object. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function is_title_defined(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return Returns true if a title has been defined for this axis; else, - !! returns false. - procedure, public :: is_title_defined => pa_has_title - !> @brief Gets a logical value determining if the axis should be - !! automatically scaled to fit the data. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_autoscale(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return Returns true if the axis should be automatically scaled; else, - !! false. - procedure, public :: get_autoscale => pa_get_autoscale - !> @brief Sets a logical value determining if the axis should be - !! automatically scaled to fit the data. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_autoscale(class(plot_axis) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] x Set to true if the axis should be automatically scaled; else, - !! false. - procedure, public :: set_autoscale => pa_set_autoscale - !> @brief Gets the axis display limits, assuming autoscaling is not - !! active for this axis. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function, dimension(2) get_limits(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return A two-element array containing the limits as follows: - !! [lower, upper]. - procedure, public :: get_limits => pa_get_axis_limits - !> @brief Sets the axis display limits, assuming autoscaling is not - !! active for this axis. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_limits(class(plot_axis) this, real(real64) lower, real(real64) upper) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] lower The lower display limit. - !! @param[in] upper The upper display limit. - procedure, public :: set_limits => pa_set_axis_limits - !> @brief Gets a logical value defining if the axis should be log - !! scaled. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_is_log_scaled(class(plot_axis) this) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @return Returns true if log scaling is applied to the axis; else, false. - procedure, public :: get_is_log_scaled => pa_get_log_scale - !> @brief Sets a logical value defining if the axis should be log - !! scaled. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_is_log_scaled(class(plot_axis) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] x Set to true if log scaling is applied to the axis; else, - !! false. - procedure, public :: set_is_log_scaled => pa_set_log_scale - !> @brief Returns the appropriate GNUPLOT command string to define the - !! plot_axis properties. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return The GNUPLOT command string. - procedure, public :: get_command_string => pa_get_cmd_string - !> @brief Gets a value determining if the axis should be drawn through - !! zero of opposing axes. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_zero_axis(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return Returns true to draw as a zero axis; else, set to false. - procedure, public :: get_zero_axis => pa_get_zero_axis - !> @brief Sets a value determining if the axis should be drawn through - !! zero of opposing axes. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_zero_axis(class(plot_axis) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] x Set to true to draw as a zero axis; else, set to false. - procedure, public :: set_zero_axis => pa_set_zero_axis - !> @brief Gets the width of the line used to represent the zero axis - !! line, if active. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_zero_axis_line_width(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return The width of the line, in pixels. - procedure, public :: get_zero_axis_line_width => pa_get_zero_axis_width - !> @brief Sets the width of the line used to represent the zero axis - !! line, if active. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_zero_axis_line_width(class(plot_axis) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] x The width of the line, in pixels. - procedure, public :: set_zero_axis_line_width => pa_set_zero_axis_width - !> @brief Gets a string identifying the axis as: x, y, z, y2, etc. - procedure(pa_get_string_result), deferred, public :: get_id_string - - !> @brief Gets a value determining if the default tic label format will - !! be used. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_default_tic_label_format(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return Returns true if the default tic label format will be used; - !! else, false. - procedure, public :: get_use_default_tic_label_format => & - pa_get_use_dft_tic_lbl_fmt - !> @brief Sets a value determining if the default tic label format will - !! be used. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_default_tic_label_format(class(plot_axis) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] x Set to true if the default tic label format will be - !! used; else, false. - procedure, public :: set_use_default_tic_label_format => & - pa_set_use_dft_tic_lbl_fmt - !> @brief Gets the tic label format. The format string can be any - !! format string accepted by the C command 'printf.' - !! - !! @par Syntax - !! @code{.f90} - !! allocatable character(len = :) function get_tic_label_format(class(plot_axis) this) - !! @endcode - !! - !! @param[in] this The plot_axis object. - !! @return The tic label format string. - procedure, public :: get_tic_label_format => pa_get_tic_label_fmt - !> @brief Sets the tic label format. The format string can be any - !! format string accepted by the C command 'printf.' - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_tic_label_format(class(plot_axis) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The plot_axis object. - !! @param[in] x The tic label format string. - procedure, public :: set_tic_label_format => pa_set_tic_label_fmt - end type - -! ------------------------------------------------------------------------------ - interface - module function pa_get_title(this) result(txt) - class(plot_axis), intent(in) :: this - character(len = :), allocatable :: txt - end function - - module subroutine pa_set_title(this, txt) - class(plot_axis), intent(inout) :: this - character(len = *), intent(in) :: txt - end subroutine - - pure module function pa_has_title(this) result(x) - class(plot_axis), intent(in) :: this - logical :: x - end function - - pure module function pa_get_autoscale(this) result(x) - class(plot_axis), intent(in) :: this - logical :: x - end function - - module subroutine pa_set_autoscale(this, x) - class(plot_axis), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function pa_get_axis_limits(this) result(x) - class(plot_axis), intent(in) :: this - real(real64), dimension(2) :: x - end function - - module subroutine pa_set_axis_limits(this, lower, upper) - class(plot_axis), intent(inout) :: this - real(real64), intent(in) :: lower, upper - end subroutine - - pure module function pa_get_log_scale(this) result(x) - class(plot_axis), intent(in) :: this - logical :: x - end function - - module subroutine pa_set_log_scale(this, x) - class(plot_axis), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function pa_get_cmd_string(this) result(txt) - class(plot_axis), intent(in) :: this - character(len = :), allocatable :: txt - end function - - pure module function pa_get_zero_axis(this) result(x) - class(plot_axis), intent(in) :: this - logical :: x - end function - - module subroutine pa_set_zero_axis(this, x) - class(plot_axis), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function pa_get_zero_axis_width(this) result(x) - class(plot_axis), intent(in) :: this - real(real32) :: x - end function - - module subroutine pa_set_zero_axis_width(this, x) - class(plot_axis), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function pa_get_use_dft_tic_lbl_fmt(this) result(rst) - class(plot_axis), intent(in) :: this - logical :: rst - end function - - module subroutine pa_set_use_dft_tic_lbl_fmt(this, x) - class(plot_axis), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function pa_get_tic_label_fmt(this) result(rst) - class(plot_axis), intent(in) :: this - character(len = :), allocatable :: rst - end function - - module subroutine pa_set_tic_label_fmt(this, x) - class(plot_axis), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_LEGEND.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a legend object. - type, extends(plot_object) :: legend - private - !> Legend on inside or outside of axes - logical :: m_inside = .true. - !> Draw a box around the legend - logical :: m_box = .true. - !> Defines the horizontal position - character(len = 20) :: m_horzPosition = LEGEND_RIGHT - !> Defines the vertical position - character(len = 20) :: m_vertPosition = LEGEND_TOP - !> Determines if the legend is visible. - logical :: m_show = .false. - !> Determines the legend layout. - character(len = 20) :: m_layout = LEGEND_ARRANGE_VERTICALLY - !> Opaque background? - logical :: m_opaque = .true. - contains - !> @brief Gets a value determining if the legend should be drawn inside - !! the axes border (true), or outside the axes border (false). - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_draw_inside_axes(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return The logical value. - procedure, public :: get_draw_inside_axes => leg_get_inside - !> @brief Sets a value determining if the legend should be drawn inside - !! the axes border (true), or outside the axes border (false). - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_inside_axes(class(legend) this, logical x) - !! @endcode - !! - !! @param[in,out] this The legend object. - !! @param[in] x The logical value. - procedure, public :: set_draw_inside_axes => leg_set_inside - !> @brief Gets a value determining if the legend should have a border. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_draw_border(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return The logical value. - procedure, public :: get_draw_border => leg_get_box - !> @brief Sets a value determining if the legend should have a border. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_border(class(legend) this, logical x) - !! @endcode - !! - !! @param[in,out] this The legend object. - !! @param[in] x The logical value. - procedure, public :: set_draw_border => leg_set_box - !> @brief Gets the horizontal position of the legend. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_horizontal_position(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return The horizontal position of the legend (LEGEND_LEFT, - !! LEGEND_CENTER, or LEGEND_RIGHT). - procedure, public :: get_horizontal_position => leg_get_horz_pos - !> @brief Sets the horizontal position of the legend. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_horizontal_position(class(legend) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The legend object. - !! @param x The horizontal position of the legend. The parameter must be - !! set to one of the following: LEGEND_LEFT, LEGEND_CENTER, or - !! LEGEND_RIGHT. If not, the default LEGEND_RIGHT will be used. - procedure, public :: set_horizontal_position => leg_set_horz_pos - !> @brief Gets the vertical position of the legend. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_vertical_position(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return The vertical position of the legend (LEGEND_TOP, - !! LEGEND_CENTER, or LEGEND_BOTTOM). - procedure, public :: get_vertical_position => leg_get_vert_pos - !> @brief Gets the vertical position of the legend. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_vertical_position(class(legend) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The legend object. - !! @param x The vertical position of the legend. The parameter must be - !! set to one of the following: LEGEND_TOP, LEGEND_CENTER, or - !! LEGEND_BOTTOM. If not, the default LEGEND_TOP will be used. - procedure, public :: set_vertical_position => leg_set_vert_pos - !> @brief Gets a value determining if the legend is visible. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_is_visible(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return The logical value. - procedure, public :: get_is_visible => leg_get_visible - !> @brief Sets a value determining if the legend is visible. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_is_visible(class(legend) this, logical x) - !! @endcode - !! - !! @param[in,out] this The legend object. - !! @param[in] x The logical value. - procedure, public :: set_is_visible => leg_set_visible - !> @brief Gets the command string defining the legend properties. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return The GNUPLOT command string. - procedure, public :: get_command_string => leg_get_command_txt - !> @brief Gets the layout of the legend. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) pure function get_layout(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return The layout type, either @ref LEGEND_ARRANGE_VERTICALLY - !! or @ref LEGEND_ARRANGE_HORIZONTALLY. - procedure, public :: get_layout => leg_get_layout - !> @brief Sets the layout of the legend. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_layout(class(legend) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The legend object. - !! @param[in] x The layout type, either @ref LEGEND_ARRANGE_VERTICALLY - !! or @ref LEGEND_ARRANGE_HORIZONTALLY. - procedure, public :: set_layout => leg_set_layout - !> @brief Gets a value determining if the legend is to be opaque. - !! - !! @par Syntax - !! @code{.f90} - !! logical pure function get_is_opaque(class(legend) this) - !! @endcode - !! - !! @param[in] this The legend object. - !! @return True if the legend is to be opaque; else, false. - procedure, public :: get_is_opaque => leg_get_opaque - !> @brief Sets a value determining if the legend is to be opaque. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_is_opaque(class(legend) this) - !! @endcode - !! - !! @param[in,out] this The legend object. - !! @param[in] x True if the legend is to be opaque; else, false. - procedure, public :: set_is_opaque => leg_set_opaque - end type - -! ------------------------------------------------------------------------------ - interface - pure module function leg_get_inside(this) result(x) - class(legend), intent(in) :: this - logical :: x - end function - - module subroutine leg_set_inside(this, x) - class(legend), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function leg_get_box(this) result(x) - class(legend), intent(in) :: this - logical :: x - end function - - module subroutine leg_set_box(this, x) - class(legend), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function leg_get_horz_pos(this) result(x) - class(legend), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine leg_set_horz_pos(this, x) - class(legend), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - module function leg_get_vert_pos(this) result(x) - class(legend), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine leg_set_vert_pos(this, x) - class(legend), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - pure module function leg_get_visible(this) result(x) - class(legend), intent(in) :: this - logical :: x - end function - - module subroutine leg_set_visible(this, x) - class(legend), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function leg_get_command_txt(this) result(txt) - class(legend), intent(in) :: this - character(len = :), allocatable :: txt - end function - - pure module function leg_get_layout(this) result(rst) - class(legend), intent(in) :: this - character(len = :), allocatable :: rst - end function - - module subroutine leg_set_layout(this, x) - class(legend), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - pure module function leg_get_opaque(this) result(rst) - class(legend), intent(in) :: this - logical :: rst - end function - - module subroutine leg_set_opaque(this, x) - class(legend), intent(inout) :: this - logical :: x - end subroutine - end interface - - -! ****************************************************************************** -! FPLOT_COLORMAP.F90 -! ------------------------------------------------------------------------------ - !> @brief A colormap object for a surface plot. - type, abstract, extends(plot_object) :: colormap - private - !> The label to associate with the colormap - character(len = :), allocatable :: m_label - !> The colormap should be drawn horizontally - logical :: m_horizontal = .false. - !> Draw the colormap border - logical :: m_drawBorder = .true. - !> Show the tic marks - logical :: m_showTics = .true. - contains - !> @brief Gets the GNUPLOT command string to represent this colormap - !! object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable :: get_command_string(class(colormap) this) - !! @endcode - !! - !! @param[in] this The colormap object. - !! @return The command string. - procedure, public :: get_command_string => cm_get_cmd - !> @brief Gets the GNUPLOT string defining the color distribution. For - !! instance, this routine could return the string: '0 "dark-blue", - !! 1 "blue", 2 "cyan", 3 "green", 4 "yellow", 5 "orange", 6 "red", - !! 7 "dark-red"'. This string would result in a rainbow type map. - procedure(cm_get_string_result), deferred, public :: get_color_string - !> @brief Gets the label to associate with the colorbar. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) get_label(class(colormap) this) - !! @endcode - !! - !! @param[in] this The colormap object. - !! @return The label. - procedure, public :: get_label => cm_get_label - !> @brief Sets the label to associate with the colorbar. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_label(class(colormap) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The colormap object. - !! @param[in] x The label. - procedure, public :: set_label => cm_set_label - !> @brief Gets a logical value determining if the colormap should be - !! drawn horizontally and below the plot. - !! - !! @par Syntax - !! @code{.f90} - !! logical get_horizontal(class(colormap) this) - !! @endcode - !! - !! @param[in] this The colormap object. - !! @return Returns true if the colormap should be drawn horizontally; - !! else, false. - procedure, public :: get_horizontal => cm_get_horizontal - !> @brief Sets a logical value determining if the colormap should be - !! drawn horizontally and below the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_horizontal(class(colormap) this, logical x) - !! @endcode - !! - !! @param[in,out] this The colormap object. - !! @param[in] x Set to true if the colormap should be drawn - !! horizontally; else, false. - procedure, public :: set_horizontal => cm_set_horizontal - !> @brief Gets a logical value determining if the border should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! logical get_draw_border(class(colormap) this) - !! @endcode - !! - !! @param[in] this The colormap object. - !! @return Returns true if the border should be drawn; else, false. - procedure, public :: get_draw_border => cm_get_draw_border - !> @brief Sets a logical value determining if the border should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_border(class(colormap) this, logical x) - !! @endcode - !! - !! @param[in,out] this The colormap object. - !! @param[in] x Set to true if the border should be drawn; else, false. - procedure, public :: set_draw_border => cm_set_draw_border - !> @brief Gets a logical value determining if the tic marks should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! logical get_show_tics(class(colormap) this) - !! @endcode - !! - !! @param[in] this The colormap object. - !! @return Returns true if the tic marks should be drawn; else, false. - procedure, public :: get_show_tics => cm_get_show_tics - !> @brief Sets a logical value determining if the tic marks should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_show_tics(class(colormap) this, logical x) - !! @endcode - !! - !! @param[in,out] this The colormap object. - !! @param[in] x Set to true if the tic marks should be drawn; else, - !! false. - !> @brief Sets a logical value determining if the border should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_border(class(colormap) this, logical x) - !! @endcode - !! - !! @param[in,out] this The colormap object. - !! @param[in] x Set to true if the border should be drawn; else, false. - procedure, public :: set_show_tics => cm_set_show_tics - end type - -! ------------------------------------------------------------------------------ - !> @brief Defines a rainbow colormap. - type, extends(colormap) :: rainbow_colormap - contains - !> @brief Gets the GNUPLOT string defining the color distribution. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_color_string(class(rainbow_colormap) this) - !! @endcode - !! - !! @param[in] this The rainbow_colormap object. - !! @return The command string. - procedure, public :: get_color_string => rcm_get_clr - end type - -! ------------------------------------------------------------------------------ - !> @brief Defines a colormap consisting of "hot" colors. - type, extends(colormap) :: hot_colormap - contains - !> @brief Gets the GNUPLOT string defining the color distribution. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_color_string(class(hot_colormap) this) - !! @endcode - !! - !! @param[in] this The hot_colormap object. - !! @return The command string. - procedure, public :: get_color_string => hcm_get_clr - end type - -! ------------------------------------------------------------------------------ - !> @brief Defines a colormap consisting of "cool" colors. - type, extends(colormap) :: cool_colormap - contains - !> @brief Gets the GNUPLOT string defining the color distribution. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_color_string(class(cool_colormap) this) - !! @endcode - !! - !! @param[in] this The cool_colormap object. - !! @return The command string. - procedure, public :: get_color_string => ccm_get_clr - end type - -! ------------------------------------------------------------------------------ - !> @brief Defines a colormap equivalent to the MATLAB parula colormap. - type, extends(colormap) :: parula_colormap - contains - !> @brief Gets the GNUPLOT string defining the color distribution. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_color_string(class(parula_colormap) this) - !! @endcode - !! - !! @param[in] this The parula_colormap object. - !! @return The command string. - procedure, public :: get_color_string => pcm_get_clr - end type - -! ------------------------------------------------------------------------------ - !> @brief Defines a grey-scaled colormap. - type, extends(colormap) :: grey_colormap - contains - !> @brief Gets the GNUPLOT string defining the color distribution. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_color_string(class(grey_colormap) this) - !! @endcode - !! - !! @param[in] this The grey_colormap object. - !! @return The command string. - procedure, public :: get_color_string => gcm_get_clr - end type - -! ------------------------------------------------------------------------------ - !> @brief Defines an earthy-colored colormap. - type, extends(colormap) :: earth_colormap - contains - !> @brief Gets the GNUPLOT string defining the color distribution. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_color_string(class(earth_colormap) this) - !! @endcode - !! - !! @param[in] this The earth_colormap object. - !! @return The command string. - procedure, public :: get_color_string => ecm_get_clr - end type - -! ------------------------------------------------------------------------------ - !> @brief Defines a custom colormap that utilizes the FORCOLORMAP library - !! to provide the map. - type, extends(colormap) :: custom_colormap - class(cmap), private, pointer :: m_map => null() - contains - final :: custom_final - !> @brief Gets the GNUPLOT string defining the color distribution. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_color_string(class(custom_colormap) this) - !! @endcode - !! - !! @param[in] this The @ref custom_colormap object. - !! @return The command string. - procedure, public :: get_color_string => custom_get_clr - !> @brief Sets the FORCOLORMAP colormap object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_colormap(class(custom_colormap) this, class(cmap) x, optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The @ref custom_colormap object. - !! @param[in] x The FORCOLORMAP colormap object. The @ref - !! custom_colormap object stores a copy of this object; - !! therefore, any changes made to @p x after calls to - !! this routine will not impact the behavior of the - !! @ref custom_colormap object. - !! @param[in,out] err An optional errors-based object that if provided - !! can be used to retrieve information relating to any errors - !! encountered during execution. If not provided, a default - !! implementation of the errors class is used internally to provide - !! error handling. Possible errors and warning messages that may be - !! encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if a memory allocation error - !! occurs. - procedure, public :: set_colormap => custom_set - !> @brief Gets a pointer to the FORCOLORMAP colormap object. - !! - !! @par Syntax - !! @code{.f90} - !! class(cmap), pointer function get_colormap(class(custom_colormap) this) - !! @endcode - !! - !! @param[in] this The @ref custom_colormap object. - !! @return A pointer to the FORCOLORMAP colormap object. - procedure, public :: get_colormap => custom_get - end type - -! ------------------------------------------------------------------------------ - interface - module function cm_get_cmd(this) result(x) - class(colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function cm_get_label(this) result(rst) - class(colormap), intent(in) :: this - character(len = :), allocatable :: rst - end function - - module subroutine cm_set_label(this, x) - class(colormap), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - pure module function cm_get_horizontal(this) result(rst) - class(colormap), intent(in) :: this - logical :: rst - end function - - module subroutine cm_set_horizontal(this, x) - class(colormap), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function cm_get_draw_border(this) result(rst) - class(colormap), intent(in) :: this - logical :: rst - end function - - module subroutine cm_set_draw_border(this, x) - class(colormap), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function cm_get_show_tics(this) result(rst) - class(colormap), intent(in) :: this - logical :: rst - end function - - module subroutine cm_set_show_tics(this, x) - class(colormap), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - ! -------------------- - - module function rcm_get_clr(this) result(x) - class(rainbow_colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! -------------------- - - module function hcm_get_clr(this) result(x) - class(hot_colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! -------------------- - - module function ccm_get_clr(this) result(x) - class(cool_colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! -------------------- - - module function pcm_get_clr(this) result(x) - class(parula_colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! -------------------- - - module function gcm_get_clr(this) result(x) - class(grey_colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! -------------------- - - module function ecm_get_clr(this) result(x) - class(earth_colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! -------------------- - module function custom_get_clr(this) result(x) - class(custom_colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! -------------------- - module subroutine custom_set(this, map, err) - class(custom_colormap), intent(inout) :: this - class(cmap), intent(in) :: map - class(errors), intent(inout), optional, target :: err - end subroutine - - ! -------------------- - module function custom_get(this) result(rst) - class(custom_colormap), intent(in) :: this - class(cmap), pointer :: rst - end function - - ! -------------------- - module subroutine custom_final(this) - type(custom_colormap), intent(inout) :: this - end subroutine - - ! -------------------- - end interface - -! ****************************************************************************** -! FPLOT_PLOT.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines the basic GNUPLOT plot. - type, extends(plot_object) :: plot - private - !> The plot title - character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_title = "" - !> Has a title? - logical :: m_hasTitle = .false. - !> The GNUPLOT terminal object to target. - class(terminal), pointer :: m_terminal => null() - !> A collection of plot_data items to plot. - type(list) :: m_data - !> The legend. - type(legend), pointer :: m_legend => null() - !> Show grid lines? - logical :: m_showGrid = .true. - !> Point tic marks in? - logical :: m_ticsIn = .true. - !> Draw the border? - logical :: m_drawBorder = .true. - !> A collection of plot_label items to draw. - type(list) :: m_labels ! Added 6/22/2018, JAC - !> The color index to use for automatic line coloring for scatter plots. - integer(int32) :: m_colorIndex = 1 - !> Determines if the axes should be scaled proportionally. - logical :: m_axisEqual = .false. - !> The colormap. - class(colormap), pointer :: m_colormap - !> Show the colorbar? - logical :: m_showColorbar = .true. - !> A collection of plot_arrow items to draw. - type(list) :: m_arrows ! Added 1/3/2024, JAC - contains - !> @brief Cleans up resources held by the plot object. Inheriting - !! classes are expected to call this routine to free internally held - !! resources. - !! - !! @par Syntax - !! @code{.f90} - !! module free_resources(class(plot) this) - !! @endcode - !! - !! @param[in,out] this The plot object. - procedure, public :: free_resources => plt_clean_up - !> @brief Initializes the plot object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine initialize(class(plot) this, optional class(terminal) term, optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] term An optional input that is used to define the terminal. - !! The default terminal is a WXT terminal. The acceptable inputs are: - !! - GNUPLOT_TERMINAL_PNG - !! - GNUPLOT_TERMINAL_QT - !! - GNUPLOT_TERMINAL_WIN32 - !! - GNUPLOT_TERMINAL_WXT - !! - GNUPLOT_TERMINAL_LATEX - !! @param[in] fname A filename to pass to the terminal in the event the - !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: initialize => plt_init - !> @brief Gets the plot's title. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_title(class(plot)) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return The plot's title. - procedure, public :: get_title => plt_get_title - !> @brief Sets the plot's title. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_title(class(plot) this, character(len = *) txt) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] txt The plot's title. The number of characters must be less - !! than or equal to PLOTDATA_MAX_NAME_LENGTH; else, the text string is - !! truncated. - procedure, public :: set_title => plt_set_title - !> @brief Gets a value determining if a title has been defined for the - !! plot object. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function is_title_defined(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return Returns true if a title has been defined for this plot; else, - !! returns false. - procedure, public :: is_title_defined => plt_has_title - !> @brief Gets the plot's legend object. - !! - !! @par Syntax - !! @code{.f90} - !! class(legend) function, pointer get_legend(class(this) plot) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return A pointer to the legend object. - procedure, public :: get_legend => plt_get_legend - !> @brief Gets the number of stored plot_data objects. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_count(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return The number of plot_data objects. - procedure, public :: get_count => plt_get_count - !> @brief Pushes a plot_data object onto the stack. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine push(class(plot) this, class(plot_data) x, optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x The plot_data object. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: push => plt_push_data - !> @brief Pops the last plot_data object from the stack. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine pop(class(plot) this) - !! @endcode - !! - !! @param[in,out] this The plot object. - procedure, public :: pop => plt_pop_data - !> @brief Removes all plot_data objects from the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine clear(class(plot) this) - !! @endcode - !! - !! @param[in,out] this The plot object. - procedure, public :: clear_all => plt_clear_all - !> @brief Gets a pointer to the requested plot_data object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_data) function, pointer get(class(plot), integer(int32) i) - !! @endcode - !! - !! @param[in] this The plot object. - !! @param[in] i The index of the plot_data object. - !! @return A pointer to the requested plot_data object. - procedure, public :: get => plt_get - !> @brief Sets the requested plot_data object into the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set(class(plot) this, integer(int32) i, class(plot_data) x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] i The index of the plot_data object. - !! @param[in] x The plot_data object. - procedure, public :: set => plt_set - !> @brief Gets the GNUPLOT terminal object. - !! - !! @par Syntax - !! @code{.f90} - !! class(terminal) function, pointer get_terminal(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return A pointer to the GNUPLOT terminal object. - procedure, public :: get_terminal => plt_get_term - !> @brief Gets a flag determining if the grid lines should be shown. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_show_gridlines(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return Returns true if the grid lines should be shown; else, false. - procedure, public :: get_show_gridlines => plt_get_show_grid - !> @brief Sets a flag determining if the grid lines should be shown. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_show_gridlines(class(plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x Set to true if the grid lines should be shown; else, false. - procedure, public :: set_show_gridlines => plt_set_show_grid - !> @brief Launches GNUPLOT and draws the plot per the current state of - !! the command list. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine draw(class(plot) this, optional logical persist, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The plot object. - !! @param[in] persist An optional parameter that can be used to keep GNUPLOT - !! open. Set to true to force GNUPLOT to remain open; else, set to false - !! to allow GNUPLOT to close after drawing. The default is true. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written. - procedure, public :: draw => plt_draw - !> @brief Saves a GNUPLOT command file. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine save_file(class(plot) this, character(len = *) fname, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The plot object. - !! @param[in] fname The filename. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written. - procedure, public :: save_file => plt_save - !> @brief Gets the name of the font used for plot text. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_font_name(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return The font name. - procedure, public :: get_font_name => plt_get_font - !> @brief Sets the name of the font used for plot text. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_font_name(class(plot) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x The font name. - procedure, public :: set_font_name => plt_set_font - !> @brief Gets the size of the font used by the plot. - !! - !! @par Syntax - !! @code{.f90} - !! integer(int32) function get_font_size(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return The size of the font, in points. - procedure, public :: get_font_size => plt_get_font_size - !> @brief Sets the size of the font used by the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_font_size(class(plot) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x The font size, in points. If a value of zero is provided, - !! the font size is reset to its default value; or, if a negative value - !! is provided, the absolute value of the supplied value is utilized. - procedure, public :: set_font_size => plt_set_font_size - !> @brief Gets a value determining if the axis tic marks should point - !! inwards. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_tics_inward(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return Returns true if the tic marks should point inwards; else, false - !! if the tic marks should point outwards. - procedure, public :: get_tics_inward => plt_get_tics_in - !> @brief Sets a value determining if the axis tic marks should point - !! inwards. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_tics_inward(class(plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x Set to true if the tic marks should point inwards; else, - !! false if the tic marks should point outwards. - procedure, public :: set_tics_inward => plt_set_tics_in - !> @brief Gets a value determining if the border should be drawn. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_draw_border(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return Returns true if the border should be drawn; else, false. - procedure, public :: get_draw_border => plt_get_draw_border - !> @brief Sets a value determining if the border should be drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_border(class(plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x Set to true if the border should be drawn; else, false. - procedure, public :: set_draw_border => plt_set_draw_border - !> @brief Adds a label to the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine push_label(class(plot) this, class(plot_labels) lbl, optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] lbl The plot label. - !! @param[in,out] err An optional errors-based object for managing - !! errors. The default implementation of the errors type is used if - !! nothing is supplied. - procedure, public :: push_label => plt_push_label - !> @brief Removes the last label from the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine pop_label(class(plot) this) - !! @endcode - !! - !! @param[in,out] this The plot object. - procedure, public :: pop_label => plt_pop_label - !> @brief Gets the requested plot_label from the plot. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_label) pointer function get_label(class(plot) this, integer(int32) i) - !! @endcode - !! - !! @param[in] this The plot object. - !! @param[in] i The index of the plot_label object to retrieve. - !! @return A pointer to the requested plot_label object. - procedure, public :: get_label => plt_get_label - !> @brief Sets the specified plot_label object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_label(class(plot) this, integer(int32) i, class(plot_label) x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] i The index of the plot_label to replace. - !! @param[in] x The new plot_label object. - procedure, public :: set_label => plt_set_label - !> @brief Gets the number of plot_label objects belonging to the plot. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_label_count(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return The number of plot_label objects. - procedure, public :: get_label_count => plt_get_label_count - !> @brief Clears all plot_label objects from the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine clear_all_labels(class(plot) this) - !! @endcode - !! - !! @param[in,out] this The plot object. - procedure, public :: clear_all_labels => plt_clear_labels - !> @brief Gets a flag determining if the axes should be equally scaled. - !! - !! @par Syntax - !! @code{.f90} - !! logical function get_axis_equal(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return Returns true if the axes should be scaled equally; else, - !! false. - procedure, public :: get_axis_equal => plt_get_axis_equal - !> @brief Sets a flag determining if the axes should be equally scaled. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_axis_equal(class(plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x Set to true if the axes should be scaled equally; else, - !! false. - procedure, public :: set_axis_equal => plt_set_axis_equal - !> @brief Gets a pointer to the colormap object. - !! - !! @par Syntax - !! @code{.f90} - !! class(colormap) function, pointer get_colormap(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return A pointer to the colormap object. If no colormap is defined, a - !! null pointer is returned. - procedure, public :: get_colormap => plt_get_colormap - !> @brief Sets the colormap object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_colormap(class(plot) this, class(colormap) x, optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x The colormap object. Notice, a copy of this object is - !! stored, and the plot object then manages the lifetime of the - !! copy. - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: set_colormap => plt_set_colormap - !> @brief Gets a value determining if the colorbar should be shown. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_show_colorbar(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return Returns true if the colorbar should be drawn; else, false. - procedure, public :: get_show_colorbar => plt_get_show_colorbar - !> @brief Sets a value determining if the colorbar should be shown. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_show_colorbar(class(plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot object. - !! @param[in] x Set to true if the colorbar should be drawn; else, false. - procedure, public :: set_show_colorbar => plt_set_show_colorbar - !> @brief Gets the GNUPLOT command string to represent this plot - !! object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(plot) this) - !! @endcode - !! - !! @param[in] this The plot object. - !! @return The command string. - procedure, public :: get_command_string => plt_get_cmd - !> @brief Pushes a new @ref plot_arrow object onto the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine push_arrow(class(plot) this, class(plot_arrow) x, optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The @ref plot object. - !! @param[in] x The @ref plot_arrow object. This instance is copied, - !! and the copy is stored and managed by the @ref plot object. - !! @param[in,out] err An optional errors-based object for managing - !! errors. The default implementation of the errors type is used if - !! nothing is supplied. - procedure, public :: push_arrow => plt_push_arrow - !> @brief Pops a @ref plot_arrow object from the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine pop_arrow(class(plot) this) - !! @endcode - !! - !! @param[in,out] this The @ref plot object. - procedure, public :: pop_arrow => plt_pop_arrow - !> @brief Gets a pointer to the requested @ref plot_arrow object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_arrow), pointer function get_arrow(class(plot) this, integer(int32) i) - !! @endcode - !! - !! @param[in] this The @ref plot object. - !! @param[in] i The index of the @ref plot_arrow to retrieve. - procedure, public :: get_arrow => plt_get_arrow - !> @brief Sets a @ref plot_arrow into the @ref plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_arrow(class(plot) this, integer(int32) i, class(plot_arrow) x) - !! @endcode - !! - !! @param[in,out] this The @ref plot object. - !! @param[in] i The index of the @ref plot_arrow to retrieve. - !! @param[in] x The @ref plot_arrow to set. This instance is copied, - !! and the copy is stored and managed by the @ref plot object. - procedure, public :: set_arrow => plt_set_arrow - !> @brief Gets the number of @ref plot_arrow objects held by the - !! @ref plot object. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_arrow_count(class(plot_arrow) this) - !! @endcode - !! - !! @param[in] this The @ref plot object. - !! @return The number of @ref plot_arrow objects held by the @ref plot - !! object. - procedure, public :: get_arrow_count => plt_get_arrow_count - !> @brief Clears all @ref plot_arrow objects from the @ref plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine clear_arrows(class(plot) this) - !! @endcode - !! - !! @param[in,out] this The @ref plot object. - procedure, public :: clear_arrows => plt_clear_arrows - end type - -! ------------------------------------------------------------------------------ - interface - module subroutine plt_clean_up(this) - class(plot), intent(inout) :: this - end subroutine - - module subroutine plt_init(this, term, fname, err) - class(plot), intent(inout) :: this - integer(int32), intent(in), optional :: term - character(len = *), intent(in), optional :: fname - class(errors), intent(inout), optional, target :: err - end subroutine - - module function plt_get_title(this) result(txt) - class(plot), intent(in) :: this - character(len = :), allocatable :: txt - end function - - module subroutine plt_set_title(this, txt) - class(plot), intent(inout) :: this - character(len = *), intent(in) :: txt - end subroutine - - pure module function plt_has_title(this) result(x) - class(plot), intent(in) :: this - logical :: x - end function - - module function plt_get_legend(this) result(x) - class(plot), intent(in) :: this - type(legend), pointer :: x - end function - - pure module function plt_get_count(this) result(x) - class(plot), intent(in) :: this - integer(int32) :: x - end function - - module subroutine plt_push_data(this, x, err) - class(plot), intent(inout) :: this - class(plot_data), intent(inout) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine plt_pop_data(this) - class(plot), intent(inout) :: this - end subroutine - - module subroutine plt_clear_all(this) - class(plot), intent(inout) :: this - end subroutine - - module function plt_get(this, i) result(x) - class(plot), intent(in) :: this - integer(int32), intent(in) :: i - class(plot_data), pointer :: x - end function - - module subroutine plt_set(this, i, x) - class(plot), intent(inout) :: this - integer(int32), intent(in) :: i - class(plot_data), intent(in) :: x - end subroutine - - module function plt_get_term(this) result(x) - class(plot), intent(in) :: this - class(terminal), pointer :: x - end function - - pure module function plt_get_show_grid(this) result(x) - class(plot), intent(in) :: this - logical :: x - end function - - module subroutine plt_set_show_grid(this, x) - class(plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module subroutine plt_draw(this, persist, err) - class(plot), intent(in) :: this - logical, intent(in), optional :: persist - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine plt_save(this, fname, err) - class(plot), intent(in) :: this - character(len = *), intent(in) :: fname - class(errors), intent(inout), optional, target :: err - end subroutine - - module function plt_get_font(this) result(x) - class(plot), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine plt_set_font(this, x) - class(plot), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - module function plt_get_font_size(this) result(x) - class(plot), intent(in) :: this - integer(int32) :: x - end function - - module subroutine plt_set_font_size(this, x) - class(plot), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - pure module function plt_get_tics_in(this) result(x) - class(plot), intent(in) :: this - logical :: x - end function - - module subroutine plt_set_tics_in(this, x) - class(plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function plt_get_draw_border(this) result(x) - class(plot), intent(in) :: this - logical :: x - end function - - module subroutine plt_set_draw_border(this, x) - class(plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module subroutine plt_push_label(this, lbl, err) - class(plot), intent(inout) :: this - class(plot_label), intent(in) :: lbl - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine plt_pop_label(this) - class(plot), intent(inout) :: this - end subroutine - - module function plt_get_label(this, i) result(x) - class(plot), intent(in) :: this - integer(int32), intent(in) :: i - class(plot_label), pointer :: x - end function - - module subroutine plt_set_label(this, i, x) - class(plot), intent(inout) :: this - integer(int32), intent(in) :: i - class(plot_label), intent(in) :: x - end subroutine - - pure module function plt_get_label_count(this) result(x) - class(plot), intent(in) :: this - integer(int32) :: x - end function - - module subroutine plt_clear_labels(this) - class(plot), intent(inout) :: this - end subroutine - - pure module function plt_get_axis_equal(this) result(rst) - class(plot), intent(in) :: this - logical :: rst - end function - - module subroutine plt_set_axis_equal(this, x) - class(plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function plt_get_colormap(this) result(x) - class(plot), intent(in) :: this - class(colormap), pointer :: x - end function - - module subroutine plt_set_colormap(this, x, err) - class(plot), intent(inout) :: this - class(colormap), intent(in) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function plt_get_show_colorbar(this) result(x) - class(plot), intent(in) :: this - logical :: x - end function - - module subroutine plt_set_show_colorbar(this, x) - class(plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function plt_get_cmd(this) result(x) - class(plot), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine plt_push_arrow(this, x, err) - class(plot), intent(inout) :: this - class(plot_arrow), intent(in) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine plt_pop_arrow(this) - class(plot), intent(inout) :: this - end subroutine - - module function plt_get_arrow(this, i) result(rst) - class(plot), intent(in) :: this - integer(int32), intent(in) :: i - class(plot_arrow), pointer :: rst - end function - - module subroutine plt_set_arrow(this, i, x) - class(plot), intent(inout) :: this - integer(int32), intent(in) :: i - class(plot_arrow), intent(in) :: x - end subroutine - - pure module function plt_get_arrow_count(this) result(rst) - class(plot), intent(in) :: this - integer(int32) :: rst - end function - - module subroutine plt_clear_arrows(this) - class(plot), intent(inout) :: this - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_SCATTER_PLOT_DATA.F90 -! ------------------------------------------------------------------------------ - !> @brief A plot_data object for describing scatter plot data sets. - type, abstract, extends(plot_data_colored) :: scatter_plot_data - private - !> Draw the line? - logical :: m_drawLine = .true. - !> Draw the markers? - logical :: m_drawMarkers = .false. - !> Marker frequency. - integer(int32) :: m_markerFrequency = 1 - !> Line width. - real(real32) :: m_lineWidth = 1.0 - !> Line style. - integer(int32) :: m_lineStyle = LINE_SOLID - !> Marker type. - integer(int32) :: m_markerType = MARKER_X - !> Marker size multiplier. - real(real32) :: m_markerSize = 1.0 - !> True if large data sets should be simplified before sending to - !! GNUPLOT. - logical :: m_simplifyData = .true. - !> A scaling factor used to establish the simplification tolerance. - !! The simplification tolerance is established by multiplying this - !! factor by the range in the dependent variable data. - real(real64) :: m_simplifyFactor = 1.0d-3 - !> Determines if the data should utilize data-dependent colors. - logical :: m_dataDependentColors = .false. - !> Fill the curve? - logical :: m_filledCurve = .false. - !> Use variable size data points? - logical :: m_useVariableSizePoints = .false. - contains - !> @brief Gets the GNUPLOT command string to represent this - !! scatter_plot_data object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return The command string. - procedure, public :: get_command_string => spd_get_cmd - !> @brief Gets the width of the line, in pixels. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_line_width(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return The line width. - procedure, public :: get_line_width => spd_get_line_width - !> @brief Sets the width of the line, in pixels. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_line_width(class(scatter_plot_data) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x The line width. - procedure, public :: set_line_width => spd_set_line_width - !> @brief Gets the line style. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_line_style(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return The line style. The line style must be one of the following: - !! - LINE_DASHED - !! - LINE_DASH_DOTTED - !! - LINE_DASH_DOT_DOT - !! - LINE_DOTTED - !! - LINE_SOLID - procedure, public :: get_line_style => spd_get_line_style - !> @brief Sets the line style. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_line_style(class(scatter_plot_data) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x The line style. The line style must be one of the - !! following: - !! - LINE_DASHED - !! - LINE_DASH_DOTTED - !! - LINE_DASH_DOT_DOT - !! - LINE_DOTTED - !! - LINE_SOLID - procedure, public :: set_line_style => spd_set_line_style - !> @brief Gets a value determining if a line should be drawn. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_draw_line(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return Returns true if the line should be drawn; else, false. - procedure, public :: get_draw_line => spd_get_draw_line - !> @brief Sets a value determining if a line should be drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_line(class(scatter_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x Set to true if the line should be drawn; else, false. - procedure, public :: set_draw_line => spd_set_draw_line - !> @brief Gets a value determining if data point markers should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_draw_markers(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return Returns true if the markers should be drawn; else, false. - procedure, public :: get_draw_markers => spd_get_draw_markers - !> @brief Sets a value determining if data point markers should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_markers(class(scatter_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x Set to true if the markers should be drawn; else, false. - procedure, public :: set_draw_markers => spd_set_draw_markers - !> @brief Gets the marker style. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_marker_style(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return The marker type. The marker type must be one of the following: - !! - MARKER_ASTERISK - !! - MARKER_EMPTY_CIRCLE - !! - MARKER_EMPTY_NABLA - !! - MARKER_EMPTY_RHOMBUS - !! - MARKER_EMPTY_SQUARE - !! - MARKER_EMPTY_TRIANGLE - !! - MARKER_FILLED_CIRCLE - !! - MARKER_FILLED_NABLA - !! - MARKER_FILLED_RHOMBUS - !! - MARKER_FILLED_SQUARE - !! - MARKER_FILLED_TRIANGLE - !! - MARKER_PLUS - !! - MARKER_X - procedure, public :: get_marker_style => spd_get_marker_style - !> @brief Sets the marker style. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_marker_style(class(scatter_plot_data) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x The marker type. The marker type must be one of the - !! following: - !! - MARKER_ASTERISK - !! - MARKER_EMPTY_CIRCLE - !! - MARKER_EMPTY_NABLA - !! - MARKER_EMPTY_RHOMBUS - !! - MARKER_EMPTY_SQUARE - !! - MARKER_EMPTY_TRIANGLE - !! - MARKER_FILLED_CIRCLE - !! - MARKER_FILLED_NABLA - !! - MARKER_FILLED_RHOMBUS - !! - MARKER_FILLED_SQUARE - !! - MARKER_FILLED_TRIANGLE - !! - MARKER_PLUS - !! - MARKER_X - procedure, public :: set_marker_style => spd_set_marker_style - !> @brief Gets the marker scaling. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_marker_scaling(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return The scaling factor. - procedure, public :: get_marker_scaling => spd_get_marker_scaling - !> @brief Sets the marker scaling. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_marker_scaling(class(scatter_plot_data) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x The scaling factor. - procedure, public :: set_marker_scaling => spd_set_marker_scaling - !> @brief Gets the marker frequency. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_marker_frequency(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return The marker frequency. - procedure, public :: get_marker_frequency => spd_get_marker_frequency - !> @brief Sets the marker frequency. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_marker_frequency(class(scatter_plot_data) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x The marker frequency. - procedure, public :: set_marker_frequency => spd_set_marker_frequency - !> @brief Gets the number of data points. - procedure(spd_get_int_value), deferred, public :: get_count - !> @brief Gets the requested X data point. - procedure(spd_get_value), deferred, public :: get_x - !> @brief Sets the requested X data point. - procedure(spd_set_value), deferred, public :: set_x - !> @brief Gets the requested Y data point. - procedure(spd_get_value), deferred, public :: get_y - !> @brief Sets the requested X data point. - procedure(spd_set_value), deferred, public :: set_y - !> @brief Gets the GNUPLOT command string defining which axes the data - !! is to be plotted against. - procedure(spd_get_string_result), deferred, public :: get_axes_string - !> @brief Gets a value determining if the stored data should be - !! simplified (reduced) before passing to GNUPLOT. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_simplify_data(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return Returns true if the data should be simplified prior to sending - !! to GNUPLOT; else, false to leave the data alone. - procedure, public :: get_simplify_data => spd_get_simplify_data - !> @brief Sets a value determining if the stored data should be - !! simplified (reduced) before passing to GNUPLOT. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_simplify_data(class(scatter_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x True if the data should be simplified prior to sending - !! to GNUPLOT; else, false to leave the data alone. - procedure, public :: set_simplify_data => spd_set_simplify_data - !> @brief Gets a factor used to establish the simplification tolerance. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function get_simplification_factor(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return Returns the scaling factor. - procedure, public :: get_simplification_factor => spd_get_simplify_factor - !> @brief Sets a factor used to establish the simplification tolerance. The - !! tolerance is established by multplying this factor by the range of the - !! dependent variable data. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_simplification_factor(class(scatter_plot_data) this, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x The scaling factor. - procedure, public :: set_simplification_factor => spd_set_simplify_factor - !> @brief Gets a value determing if data-dependent colors should be - !! used. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_data_dependent_colors(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return Returns true if data-dependent colors should be used; else, - !! false. - procedure, public :: get_use_data_dependent_colors => & - spd_get_data_dependent_colors - !> @brief Sets a value determing if data dependent colors should be - !! used. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_data_dependent_colors(class(scatter_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] x True if data-dependent colors should be used; else, - !! false. - procedure, public :: set_use_data_dependent_colors => & - spd_set_data_dependent_colors - !> @brief Gets a logical value determining if a filled curve should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! logical function get_fill_curve(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return Returns true if the curve should be filled; else, false. - procedure, public :: get_fill_curve => spd_get_filled - !> @brief Sets a logical value determining if a filled curve should be - !! drawn. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_fill_curve(class(scatter_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] Set to true if the curve should be filled; else, false. - procedure, public :: set_fill_curve => spd_set_filled - !> @brief Gets a logical value determining if variable sized data points - !! should be used. The default is false, such that points will be of - !! a constant size. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_variable_size_points(class(scatter_plot_data) this) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @return True if variable size points should be used; else, false. - procedure, public :: get_use_variable_size_points => spd_get_use_var_point_size - !> @brief Sets a logical value determining if variable sized data points - !! should be used. The default is false, such that points will be of - !! a constant size. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_variable_size_points(class(scatter_plot_data) this, logical x) - !! @endcode - !! - !! @param[in] this The scatter_plot_data object. - !! @param[in] x True if variable size points should be used; - !! else, false. - procedure, public :: set_use_variable_size_points => spd_set_use_var_point_size - end type - -! ------------------------------------------------------------------------------ - interface - module function spd_get_cmd(this) result(x) - class(scatter_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function spd_get_line_width(this) result(x) - class(scatter_plot_data), intent(in) :: this - real(real32) :: x - end function - - module subroutine spd_set_line_width(this, x) - class(scatter_plot_data), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function spd_get_line_style(this) result(x) - class(scatter_plot_data), intent(in) :: this - integer(int32) :: x - end function - - module subroutine spd_set_line_style(this, x) - class(scatter_plot_data), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - pure module function spd_get_draw_line(this) result(x) - class(scatter_plot_data), intent(in) :: this - logical :: x - end function - - module subroutine spd_set_draw_line(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function spd_get_draw_markers(this) result(x) - class(scatter_plot_data), intent(in) :: this - logical :: x - end function - - module subroutine spd_set_draw_markers(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function spd_get_marker_style(this) result(x) - class(scatter_plot_data), intent(in) :: this - integer(int32) :: x - end function - - module subroutine spd_set_marker_style(this, x) - class(scatter_plot_data), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - pure module function spd_get_marker_scaling(this) result(x) - class(scatter_plot_data), intent(in) :: this - real(real32) :: x - end function - - module subroutine spd_set_marker_scaling(this, x) - class(scatter_plot_data), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function spd_get_marker_frequency(this) result(x) - class(scatter_plot_data), intent(in) :: this - integer(int32) :: x - end function - - module subroutine spd_set_marker_frequency(this, x) - class(scatter_plot_data), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - pure module function spd_get_simplify_data(this) result(x) - class(scatter_plot_data), intent(in) :: this - logical :: x - end function - - module subroutine spd_set_simplify_data(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function spd_get_simplify_factor(this) result(x) - class(scatter_plot_data), intent(in) :: this - real(real64) :: x - end function - - module subroutine spd_set_simplify_factor(this, x) - class(scatter_plot_data), intent(inout) :: this - real(real64), intent(in) :: x - end subroutine - - pure module function spd_get_data_dependent_colors(this) result(rst) - class(scatter_plot_data), intent(in) :: this - logical :: rst - end function - - module subroutine spd_set_data_dependent_colors(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function spd_get_filled(this) result(rst) - class(scatter_plot_data), intent(in) :: this - logical :: rst - end function - - module subroutine spd_set_filled(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function spd_get_use_var_point_size(this) result(rst) - class(scatter_plot_data), intent(in) :: this - logical :: rst - end function - - module subroutine spd_set_use_var_point_size(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_DATA_2D.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a two-dimensional plot data set. - type, extends(scatter_plot_data) :: plot_data_2d - private - !> An N-by-2 matrix containing the x and y data points. - real(real64), allocatable, dimension(:,:) :: m_data - !> Draw against the secondary y axis? - logical :: m_useY2 = .false. - contains - !> @brief Gets the GNUPLOT command string defining which axes the data - !! is to be plotted against. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_axis_string(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return The command string. - procedure, public :: get_axes_string => pd2d_get_axes_cmd - !> @brief Gets the GNUPLOT command string containing the actual data - !! to plot. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_data_string(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return The command string. - procedure, public :: get_data_string => pd2d_get_data_cmd - !> @brief Gets the number of data points. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) get_count(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return The number of data points. - procedure, public :: get_count => pd2d_get_data_count - !> @brief Gets the requested X data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) get_x(class(plot_data_2d) this, integer(int32) index) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @param[in] index The index of the data point to retrieve. - !! @return The requested data point. - procedure, public :: get_x => pd2d_get_x_data - !> @brief Sets the requested X data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_x(class(plot_data_2d) this, integer(int32) index, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_2d object. - !! @param[in] index The index of the data point to replace. - !! @param[in] x The data point. - procedure, public :: set_x => pd2d_set_x_data - !> @brief Gets the requested Y data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) get_y(class(plot_data_2d) this, integer(int32) index) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @param[in] index The index of the data point to retrieve. - !! @return The requested data point. - procedure, public :: get_y => pd2d_get_y_data - !> @brief Sets the requested Y data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_y(class(plot_data_2d) this, integer(int32) index, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_2d object. - !! @param[in] index The index of the data point to replace. - !! @param[in] x The data point. - procedure, public :: set_y => pd2d_set_y_data - !> @brief Gets a value determining if the data should be plotted against - !! the secondary y-axis. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_draw_against_y2(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return Returns true if the data should be plotted against the secondary - !! y-axis; else, false to plot against the primary y-axis. - procedure, public :: get_draw_against_y2 => pd2d_get_draw_against_y2 - !> @brief Sets a value determining if the data should be plotted against - !! the secondary y-axis. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_against_y2(class(plot_data_2d) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_data_2d object. - !! @param[in] x Set to true if the data should be plotted against the - !! secondary y-axis; else, false to plot against the primary y-axis. - procedure, public :: set_draw_against_y2 => pd2d_set_draw_against_y2 - !> @brief Defines the data set. - !! - !! @par Overload 1 - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(plot_data_2d) this, real(real64) x(:), real(real64) y(:), optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot_data_2d object. - !! @param[in] x An N-element array containing the x coordinate data. - !! @param[in] y An N-element array containing the y coordinate data. - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if @p x and @p y are not the - !! same size. - !! - !! @par Overload 2 - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(plot_data_2d) this, real(real64) y(:), optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot_data_2d object. - !! @param[in] y An N-element array containing the y-coordinate data. This - !! data will be plotted against its own index. - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - !! @par Overload 3 - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(plot_data_2d) this, real(real64) x(:), real(real64) y(:), optional real(real64) c(:), optional real(real64) ps(:), optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot_data_2d object. - !! @param[in] x An N-element array containing the x coordinate data. - !! @param[in] y An N-element array containing the y coordinate data. - !! @param[in] c An N-element array defining how color should vary with - !! the current colormap for each value. - !! @param[in] ps An N-element array defining the size of each data point. - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if @p x and @p y are not the - !! same size. - generic, public :: define_data => pd2d_set_data_1, pd2d_set_data_2 - procedure :: pd2d_set_data_1 - procedure :: pd2d_set_data_2 - - !> @brief Gets the stored X data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_x_data(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return A copy of the stored data array. - procedure, public :: get_x_data => pd2d_get_x_array - !> @brief Gets the stored Y data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_y_data(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return A copy of the stored data array. - procedure, public :: get_y_data => pd2d_get_y_array - !> @brief Gets the stored color scaling data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_color_data(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return A copy of the stored data array. - procedure, public :: get_color_data => pd2d_get_c_array - !> @brief Gets the stored point size data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_point_size_data(class(plot_data_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_2d object. - !! @return A copy of the stored data array. - procedure, public :: get_point_size_data => pd2d_get_ps_array - end type - -! ------------------------------------------------------------------------------ - interface - module function pd2d_get_axes_cmd(this) result(x) - class(plot_data_2d), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function pd2d_get_data_cmd(this) result(x) - class(plot_data_2d), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function pd2d_get_data_count(this) result(x) - class(plot_data_2d), intent(in) :: this - integer(int32) :: x - end function - - pure module function pd2d_get_x_data(this, index) result(x) - class(plot_data_2d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - end function - - module subroutine pd2d_set_x_data(this, index, x) - class(plot_data_2d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - end subroutine - - pure module function pd2d_get_y_data(this, index) result(x) - class(plot_data_2d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - end function - - module subroutine pd2d_set_y_data(this, index, x) - class(plot_data_2d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - end subroutine - - module subroutine pd2d_set_data_1(this, x, y, c, ps, err) - class(plot_data_2d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y - real(real64), intent(in), dimension(:), optional :: c, ps - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function pd2d_get_draw_against_y2(this) result(x) - class(plot_data_2d), intent(in) :: this - logical :: x - end function - - module subroutine pd2d_set_draw_against_y2(this, x) - class(plot_data_2d), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module subroutine pd2d_set_data_2(this, y, err) - class(plot_data_2d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: y - class(errors), intent(inout), optional, target :: err - end subroutine - - module function pd2d_get_x_array(this) result(x) - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - - module function pd2d_get_y_array(this) result(x) - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - - module function pd2d_get_c_array(this) result(x) - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - - module function pd2d_get_ps_array(this) result(x) - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - end interface - -! ****************************************************************************** -! FPLOT_PLOT_DATA_3D.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a three-dimensional plot data set. - type, extends(scatter_plot_data) :: plot_data_3d - private - !> An N-by-3 matrix containing the x, y, and z data points. - real(real64), allocatable, dimension(:,:) :: m_data - contains - !> @brief Gets the number of data points. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_count(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return The number of data points. - procedure, public :: get_count => pd3d_get_data_count - !> @brief Gets the requested X data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function get_x(class(plot_data_3d), this, integer(int32) index) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @param[in] index The index of the data point to retrieve. - !! @return The requested data point. - procedure, public :: get_x => pd3d_get_x_data - !> @brief Sets the requested X data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_x(class(plot_data_3d) this, integer(int32) index, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_3d object. - !! @param[in] index The index of the data point to replace. - !! @param[in] x The data point. - procedure, public :: set_x => pd3d_set_x_data - !> @brief Gets the requested Y data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function get_y(class(plot_data_3d) this, this, integer(int32) index) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @param[in] index The index of the data point to retrieve. - !! @return The requested data point. - procedure, public :: get_y => pd3d_get_y_data - !> @brief Sets the requested Y data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_y(class(plot_data_3d) this, integer(int32) index, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_3d object. - !! @param[in] index The index of the data point to replace. - !! @param[in] x The data point. - procedure, public :: set_y => pd3d_set_y_data - !> @brief Gets the requested Z data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function get_z(class(plot_data_3d) this, this, integer(int32) index) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @param[in] index The index of the data point to retrieve. - !! @return The requested data point. - procedure, public :: get_z => pd3d_get_z_data - !> @brief Sets the requested Z data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_z(class(plot_data_3d) this, integer(int32) index, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_3d object. - !! @param[in] index The index of the data point to replace. - !! @param[in] x The data point. - procedure, public :: set_z => pd3d_set_z_data - !> @brief Gets the GNUPLOT command string defining which axes the data - !! is to be plotted against. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable :: get_axes_string(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return The command string. - procedure, public :: get_axes_string => pd3d_get_axes_cmd - !> @brief Gets the GNUPLOT command string containing the actual data - !! to plot. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable :: get_data_string(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return The command string. - procedure, public :: get_data_string => pd3d_get_data_cmd - !> @brief Defines the data set. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(plot_data_3d) this, real(real64) x(:), real(real64) y(:), real(real64) z(:), optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot_data_2d object. - !! @param[in] x An N-element array containing the x coordinate data. - !! @param[in] y An N-element array containing the y coordinate data. - !! @param[in] z An N-element array containing the z coordinate data. - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if @p x, @p y, and @p z are - !! not the same size. - procedure, public :: define_data => pd3d_set_data_1 - !> @brief Gets the stored X data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_x_data(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return A copy of the stored data array. - procedure, public :: get_x_data => pd3d_get_x_array - !> @brief Gets the stored Y data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_y_data(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return A copy of the stored data array. - procedure, public :: get_y_data => pd3d_get_y_array - !> @brief Gets the stored Z data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_z_data(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return A copy of the stored data array. - procedure, public :: get_z_data => pd3d_get_z_array - !> @brief Gets the stored color scaling data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_color_data(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return A copy of the stored data array. - procedure, public :: get_color_data => pd3d_get_c_array - !> @brief Gets the stored point scaling data array. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_point_size_data(class(plot_data_3d) this) - !! @endcode - !! - !! @param[in] this The plot_data_3d object. - !! @return A copy of the stored data array. - procedure, public :: get_point_size_data => pd3d_get_c_array - end type - -! ------------------------------------------------------------------------------ - interface - pure module function pd3d_get_data_count(this) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32) :: x - end function - - pure module function pd3d_get_x_data(this, index) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - end function - - module subroutine pd3d_set_x_data(this, index, x) - class(plot_data_3d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - end subroutine - - pure module function pd3d_get_y_data(this, index) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - end function - - module subroutine pd3d_set_y_data(this, index, x) - class(plot_data_3d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - end subroutine - - pure module function pd3d_get_z_data(this, index) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - end function - - module subroutine pd3d_set_z_data(this, index, x) - class(plot_data_3d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - end subroutine - - module function pd3d_get_axes_cmd(this) result(x) - class(plot_data_3d), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function pd3d_get_data_cmd(this) result(x) - class(plot_data_3d), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine pd3d_set_data_1(this, x, y, z, c, ps, err) - class(plot_data_3d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, z - real(real64), intent(in), dimension(:), optional :: c, ps - class(errors), intent(inout), optional, target :: err - end subroutine - - module function pd3d_get_x_array(this) result(x) - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - - module function pd3d_get_y_array(this) result(x) - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - - module function pd3d_get_z_array(this) result(x) - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - - module function pd3d_get_c_array(this) result(x) - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - - module function pd3d_get_ps_array(this) result(x) - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - end function - end interface - -! ****************************************************************************** -! FPLOT_SURFACE_PLOT_DATA.F90 -! ------------------------------------------------------------------------------ - !> @brief Provides a three-dimensional surface plot data set. - type, extends(plot_data) :: surface_plot_data - private - !> Stores the x-coordinate data - real(real64), allocatable, dimension(:,:) :: m_x - !> Stores the y-coordinate data - real(real64), allocatable, dimension(:,:) :: m_y - !> Stores the z-coordinate data - real(real64), allocatable, dimension(:,:) :: m_z - !> Set to true to display a wireframe of the surface; else, just a - !! smooth surface will be drawn - logical :: m_wireframe = .false. - contains - !> @brief Gets the size of the stored data set. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_size(class(surface_plot_data) this, integer(int32) dim) - !! @endcode - !! - !! @param[in] this The suface_plot_data object. - !! @param[in] dim The dimension of interest. Notice, data is stored as a - !! 2D matrix (i.e. only 1 and 2 are valid inputs). - !! @return The size of the requested dimension. - procedure, public :: get_size => surfd_get_size - !> @brief Gets the requested X data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function get_x(class(surface_plot_data) this, integer(int32) i, integer(int32) j) - !! @endcode - !! - !! @param[in] this The surface_plot_data object. - !! @param[in] i The row index. - !! @param[in] j The column index. - !! @return The value. - procedure, public :: get_x => surfd_get_x - !> @brief Sets the requested X data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_x(class(surface_plot_data) this, integer(int32) i, integer(int32) j, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The surface_plot_data object. - !! @param[in] i The row index. - !! @param[in] j The column index. - !! @param[in] x The value. - procedure, public :: set_x => surfd_set_x - !> @brief Gets the requested Y data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function get_y(class(surface_plot_data) this, integer(int32) i, integer(int32) j) - !! @endcode - !! - !! @param[in] this The surface_plot_data object. - !! @param[in] i The row index. - !! @param[in] j The column index. - !! @return The value. - procedure, public :: get_y => surfd_get_y - !> @brief Sets the requested Y data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_y(class(surface_plot_data) this, integer(int32) i, integer(int32) j, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The surface_plot_data object. - !! @param[in] i The row index. - !! @param[in] j The column index. - !! @param[in] x The value. - procedure, public :: set_y => surfd_set_y - !> @brief Gets the requested Z data point. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real64) function get_z(class(surface_plot_data) this, integer(int32) i, integer(int32) j) - !! @endcode - !! - !! @param[in] this The surface_plot_data object. - !! @param[in] i The row index. - !! @param[in] j The column index. - !! @return The value. - procedure, public :: get_z => surfd_get_z - !> @brief Sets the requested Z data point. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_z(class(surface_plot_data) this, integer(int32) i, integer(int32) j, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The surface_plot_data object. - !! @param[in] i The row index. - !! @param[in] j The column index. - !! @param[in] x The value. - procedure, public :: set_z => surfd_set_z - !> @brief Gets a value determining if a wireframe mesh should be - !! displayed. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_wireframe(class(surface_plot_data) this) - !! @endcode - !! - !! @param[in] this The surface_plot_data object. - !! @return Returns true if a wireframe mesh should be displayed; else, false - !! to display a solid surface. - procedure, public :: get_use_wireframe => surfd_get_wireframe - !> @brief Sets a value determining if a wireframe mesh should be - !! displayed. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_wireframe(class(surface_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The surface_plot_data object. - !! @param[in] x Set to true if a wireframe mesh should be displayed; else, - !! false to display a solid surface. - procedure, public :: set_use_wireframe => surfd_set_wireframe - !> @brief Gets the GNUPLOT command string to represent this - !! surface_plot_data object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(surface_plot_data) this) - !! @endcode - !! - !! @param[in] this The surface_plot_data object. - !! @return The command string. - procedure, public :: get_command_string => surfd_get_cmd - !> @brief Gets the GNUPLOT command string containing the actual data - !! to plot. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_data_string(class(surface_plot_data) this) - !! @endcode - !! - !! @param[in] this The surface_plot_data object. - !! @return The GNUPLOT command string. - procedure, public :: get_data_string => surfd_get_data_cmd - !> @brief Defines the data set. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(surface_plot_data) this, real(real64) x(:,:), real(real64) y(:,:), real(real64) z(:,:)) - !! @endcode - !! - !! @param[in,out] this The surface_plot_data object. - !! @param[in] x An M-by-N matrix containing the x-coordinate data. - !! @param[in] y An M-by-N matrix containing the y-coordinate data. - !! @param[in] z An M-by-N matrix containing the z-coordinate data. - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if @p x, @p y, and @p z are - !! not the same size. - procedure, public :: define_data => surfd_set_data_1 - end type - -! ------------------------------------------------------------------------------ - interface - pure module function surfd_get_size(this, dim) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: dim - integer(int32) :: x - end function - - pure module function surfd_get_x(this, i, j) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: i, j - real(real64) :: x - end function - - module subroutine surfd_set_x(this, i, j, x) - class(surface_plot_data), intent(inout) :: this - integer(int32), intent(in) :: i, j - real(real64), intent(in) :: x - end subroutine - - pure module function surfd_get_y(this, i, j) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: i, j - real(real64) :: x - end function - - module subroutine surfd_set_y(this, i, j, x) - class(surface_plot_data), intent(inout) :: this - integer(int32), intent(in) :: i, j - real(real64), intent(in) :: x - end subroutine - - pure module function surfd_get_z(this, i, j) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: i, j - real(real64) :: x - end function - - module subroutine surfd_set_z(this, i, j, x) - class(surface_plot_data), intent(inout) :: this - integer(int32), intent(in) :: i, j - real(real64), intent(in) :: x - end subroutine - - pure module function surfd_get_wireframe(this) result(x) - class(surface_plot_data), intent(in) :: this - logical :: x - end function - - module subroutine surfd_set_wireframe(this, x) - class(surface_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function surfd_get_cmd(this) result(x) - class(surface_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function surfd_get_data_cmd(this) result(x) - class(surface_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine surfd_set_data_1(this, x, y, z, err) - class(surface_plot_data), intent(inout) :: this - real(real64), intent(in), dimension(:,:) :: x, y, z - class(errors), intent(inout), optional, target :: err - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_2D.F90 -! ------------------------------------------------------------------------------ - !> @brief A plot object defining a 2D plot. - type, extends(plot) :: plot_2d - private - !> The x-axis. - type(x_axis), pointer :: m_xAxis => null() - !> The y-axis. - type(y_axis), pointer :: m_yAxis => null() - !> The secondary y-axis. - type(y2_axis), pointer :: m_y2Axis => null() - !> Display the secondary y axis? - logical :: m_useY2 = .false. - !> Set to square scaling - logical :: m_set2square = .false. - contains - !> @brief Cleans up resources held by the plot_2d object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine p2d_clean_up(type(plot_2d) this) - !! @endcode - !! - !! @param[in,out] this The plot_2d object. - final :: p2d_clean_up - !> @brief Initializes the plot_2d object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine initialize(class(plot_2d) this, optional integer(int32) term, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The plot_2d object. - !! @param[in] term An optional input that is used to define the terminal. - !! The default terminal is a WXT terminal. The acceptable inputs are: - !! - GNUPLOT_TERMINAL_PNG - !! - GNUPLOT_TERMINAL_QT - !! - GNUPLOT_TERMINAL_WIN32 - !! - GNUPLOT_TERMINAL_WXT - !! - GNUPLOT_TERMINAL_LATEX - !! @param[in] fname A filename to pass to the terminal in the event the - !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: initialize => p2d_init - !> @brief Gets the GNUPLOT command string to represent this plot_2d - !! object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(plot_2d) this) - !! @endcode - !! - !! @param[in] this The plot_2d object. - !! @return The command string. - procedure, public :: get_command_string => p2d_get_cmd - !> @brief Gets the x-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_axis) function, pointer get_x_axis(class(plot_2d) this) - !! @endcode - !! - !! @param[in] this The plot_2d object. - !! @return A pointer to the x-axis object. - !! - procedure, public :: get_x_axis => p2d_get_x_axis - !> @brief Gets the y-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_axis) function, pointer get_y_axis(class(plot_2d) this) - !! @endcode - !! - !! @param[in] this The plot_2d object. - !! @return A pointer to the y-axis object. - procedure, public :: get_y_axis => p2d_get_y_axis - !> @brief Gets the secondary y-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_axis) function, pointer get_y2_axis(class(plot_2d) this) - !! @endcode - !! - !! @param[in] this The plot_2d object. - !! @return A pointer to the secondary y-axis object. - procedure, public :: get_y2_axis => p2d_get_y2_axis - !> @brief Gets a flag determining if the secondary y-axis should be - !! displayed. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_y2_axis(class(plot_2d) this) - !! @endcode - !! - !! @param[in] this The plot_2d object. - !! @return Returns true if the axis should be displayed; else, false. - procedure, public :: get_use_y2_axis => p2d_get_use_y2 - !> @brief Sets a flag determining if the secondary y-axis should be - !! displayed. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_y2_axis(class(plot_2d) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_2d object. - !! @param[in] x Set to true if the axis should be displayed; else, false. - procedure, public :: set_use_y2_axis => p2d_set_use_y2 - !> @brief Gets a logical flag determining if the axes size should be - !! squared off. - !! - !! @par Syntax - !! @code{.f90} - !! logical get_square_axes(class(plot_2d) this) - !! @endcode - !! - !! @param[in] this The plot_2d object. - !! @return Returns true if the axes are to be sized to a square; else, - !! false. - procedure, public :: get_square_axes => p2d_get_square_axes - !> @brief Sets a logical flag determining if the axes size should be - !! squared off. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_square_axes(class(plot_2d) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_2d object. - !! @param[in] Set to true if the axes are to be sized to a square; else, - !! false. - procedure, public :: set_square_axes => p2d_set_square_axes - end type - -! ------------------------------------------------------------------------------ - interface - module subroutine p2d_clean_up(this) - type(plot_2d), intent(inout) :: this - end subroutine - - module subroutine p2d_init(this, term, fname, err) - class(plot_2d), intent(inout) :: this - integer(int32), intent(in), optional :: term - character(len = *), intent(in), optional :: fname - class(errors), intent(inout), optional, target :: err - end subroutine - - module function p2d_get_cmd(this) result(x) - class(plot_2d), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function p2d_get_x_axis(this) result(ptr) - class(plot_2d), intent(in) :: this - class(plot_axis), pointer :: ptr - end function - - module function p2d_get_y_axis(this) result(ptr) - class(plot_2d), intent(in) :: this - class(plot_axis), pointer :: ptr - end function - - module function p2d_get_y2_axis(this) result(ptr) - class(plot_2d), intent(in) :: this - class(plot_axis), pointer :: ptr - end function - - pure module function p2d_get_use_y2(this) result(x) - class(plot_2d), intent(in) :: this - logical :: x - end function - - module subroutine p2d_set_use_y2(this, x) - class(plot_2d), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function p2d_get_square_axes(this) result(rst) - class(plot_2d), intent(in) :: this - logical :: rst - end function - - module subroutine p2d_set_square_axes(this, x) - class(plot_2d), intent(inout) :: this - logical, intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_3D.F90 -! ------------------------------------------------------------------------------ - !> @brief A plot object defining a 3D plot. - type, extends(plot) :: plot_3d - private - !> The x-axis. - type(x_axis), pointer :: m_xAxis => null() - !> The y-axis. - type(y_axis), pointer :: m_yAxis => null() - !> The z-axis. - type(z_axis), pointer :: m_zAxis => null() - !> The elevation angle. - real(real64) :: m_elevation = 60.0d0 - !> The azimuth. - real(real64) :: m_azimuth = 30.0d0 - !> Z-axis intersect X-Y plane? - logical :: m_zIntersect = .true. - !> Set map projection - logical :: m_setMap = .false. - !> Plot coordinate system. - integer(int32) :: m_csys = COORDINATES_CARTESIAN - contains - !> @brief Cleans up resources held by the plot_3d object. - !! - !! @param[in,out] this The plot_3d object. - final :: p3d_clean_up - !> @brief Initializes the plot_3d object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine initialize(class(plot_3d) this, optional integer(int32) term, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @param[in] term An optional input that is used to define the terminal. - !! The default terminal is a WXT terminal. The acceptable inputs are: - !! - GNUPLOT_TERMINAL_PNG - !! - GNUPLOT_TERMINAL_QT - !! - GNUPLOT_TERMINAL_WIN32 - !! - GNUPLOT_TERMINAL_WXT - !! - GNUPLOT_TERMINAL_LATEX - !! @param[in] fname A filename to pass to the terminal in the event the - !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: initialize => p3d_init - !> @brief Gets the GNUPLOT command string to represent this plot_3d - !! object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return The command string. - procedure, public :: get_command_string => p3d_get_cmd - !> @brief Gets the x-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_axis) function, pointer get_x_axis(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return A pointer to the x-axis object. - procedure, public :: get_x_axis => p3d_get_x_axis - !> @brief Gets the y-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_axis) function, pointer get_y_axis(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return A pointer to the y-axis object. - procedure, public :: get_y_axis => p3d_get_y_axis - !> @brief Gets the z-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot_axis) function, pointer get_z_axis(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return A pointer to the z-axis object. - procedure, public :: get_z_axis => p3d_get_z_axis - !> @brief Gets the plot elevation angle. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64) function get_elevation(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return The elevation angle, in degrees. - procedure, public :: get_elevation => p3d_get_elevation - !> @brief Sets the plot elevation angle. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_elevation(class(plot_3d) this, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The plot_3d object. - !! @param[in] x The elevation angle, in degrees. - procedure, public :: set_elevation => p3d_set_elevation - !> @brief Gets the plot azimuth angle. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64) function get_azimuth(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return The azimuth angle, in degrees. - procedure, public :: get_azimuth => p3d_get_azimuth - !> @brief Sets the plot azimuth angle. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_azimuth(class(plot_3d) this, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The plot_3d object. - !! @param[in] x The azimuth angle, in degrees. - procedure, public :: set_azimuth => p3d_set_azimuth - !> @brief Gets a value determining if the z-axis should intersect the - !! x-y plane. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_z_intersect_xy(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return Returns true if the z-axis should intersect the x-y plane; else, - !! false to allow the z-axis to float. - procedure, public :: get_z_intersect_xy => p3d_get_z_axis_intersect - !> @brief Sets a value determining if the z-axis should intersect the - !! x-y plane. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_z_intersect_xy(class(plot_3d) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_3d object. - !! @param[in] x Set to true if the z-axis should intersect the x-y plane; - !! else, false to allow the z-axis to float. - procedure, public :: set_z_intersect_xy => p3d_set_z_axis_intersect - !> @brief Gets a value determining if the view should be set to a 2D - !! map view. If true, the azimuth and elevation terms are ignored. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_map_view(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return Returns true if the map view will be used; else, false. - procedure, public :: get_use_map_view => p3d_get_use_map_view - !> @brief Sets a value determining if the view should be set to a 2D - !! map view. If true, the azimuth and elevation terms are ignored. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_map_view(class(plot_3d) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_3d object. - !! @param[in] x Returns true if the map view will be used; else, false. - procedure, public :: set_use_map_view => p3d_set_use_map_view - !> @brief Gets a value determining the coordinate system. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_coordinate_system(class(plot_3d) this) - !! @endcode - !! - !! @param[in] this The plot_3d object. - !! @return The coordinate system ID, which must be one of the following. - !! - COORDINATES_CARTESIAN - !! - COORDINATES_CYLINDRICAL - !! - COORDINATES_SPHERICAL - procedure, public :: get_coordinate_system => p3d_get_csys - !> @brief Sets a value determining the coordinate system. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_coordinate_system(class(plot_3d) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The plot_3d object. - !! @param[in] x The coordinate system ID, which must be one of the - !! following. - !! - COORDINATES_CARTESIAN - !! - COORDINATES_CYLINDRICAL - !! - COORDINATES_SPHERICAL - procedure, public :: set_coordinate_system => p3d_set_csys - end type - -! ------------------------------------------------------------------------------ - interface - module subroutine p3d_clean_up(this) - type(plot_3d), intent(inout) :: this - end subroutine - - module subroutine p3d_init(this, term, fname, err) - class(plot_3d), intent(inout) :: this - integer(int32), intent(in), optional :: term - character(len = *), intent(in), optional :: fname - class(errors), intent(inout), optional, target :: err - end subroutine - - module function p3d_get_cmd(this) result(x) - class(plot_3d), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function p3d_get_x_axis(this) result(ptr) - class(plot_3d), intent(in) :: this - class(plot_axis), pointer :: ptr - end function - - module function p3d_get_y_axis(this) result(ptr) - class(plot_3d), intent(in) :: this - class(plot_axis), pointer :: ptr - end function - - module function p3d_get_z_axis(this) result(ptr) - class(plot_3d), intent(in) :: this - class(plot_axis), pointer :: ptr - end function - - pure module function p3d_get_elevation(this) result(x) - class(plot_3d), intent(in) :: this - real(real64) :: x - end function - - module subroutine p3d_set_elevation(this, x) - class(plot_3d), intent(inout) :: this - real(real64), intent(in) :: x - end subroutine - - pure module function p3d_get_azimuth(this) result(x) - class(plot_3d), intent(in) :: this - real(real64) :: x - end function - - module subroutine p3d_set_azimuth(this, x) - class(plot_3d), intent(inout) :: this - real(real64), intent(in) :: x - end subroutine - - pure module function p3d_get_z_axis_intersect(this) result(x) - class(plot_3d), intent(in) :: this - logical :: x - end function - - module subroutine p3d_set_z_axis_intersect(this, x) - class(plot_3d), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function p3d_get_use_map_view(this) result(rst) - class(plot_3d), intent(in) :: this - logical :: rst - end function - - module subroutine p3d_set_use_map_view(this, x) - class(plot_3d), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function p3d_get_csys(this) result(rst) - class(plot_3d), intent(in) :: this - integer(int32) :: rst - end function - - module subroutine p3d_set_csys(this, x) - class(plot_3d), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_SURFACE_PLOT.F90 -! ------------------------------------------------------------------------------ - !> @brief A plot object defining a 3D surface plot. - type, extends(plot_3d) :: surface_plot - private - !> Show hidden lines - logical :: m_showHidden = .false. - !> The colormap - ! class(colormap), pointer :: m_colormap - !> Smooth the surface? - logical :: m_smooth = .true. - !> Show a contour plot as well as the surface plot? - logical :: m_contour = .false. - ! !> Show the colorbar? - ! logical :: m_showColorbar = .true. - !> Use lighting? - logical :: m_useLighting = .false. - !> Lighting intensity (0 - 1) - default is 0.5 - real(real32) :: m_lightIntensity = 0.5 - !> Specular highlight intensity (0 - 1) - real(real32) :: m_specular = 0.5 - !> Defines the translucency value. Must exist on (0, 1]. - real(real32) :: m_transparency = 1.0 - contains - !> @brief Cleans up resources held by the surface_plot object. - !! - !! @param[in,out] this The surface_plot object. - ! final :: surf_clean_up - !> @brief Initializes the surface_plot object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine initialize(class(surface_plot) this, optional integer(int32) term, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @param[in] term An optional input that is used to define the terminal. - !! The default terminal is a WXT terminal. The acceptable inputs are: - !! - GNUPLOT_TERMINAL_PNG - !! - GNUPLOT_TERMINAL_QT - !! - GNUPLOT_TERMINAL_WIN32 - !! - GNUPLOT_TERMINAL_WXT - !! - GNUPLOT_TERMINAL_LATEX - !! @param[in] fname A filename to pass to the terminal in the event the - !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: initialize => surf_init - !> @brief Gets a value indicating if hidden lines should be shown. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_show_hidden(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return Returns true if hidden lines should be shown; else, false. - procedure, public :: get_show_hidden => surf_get_show_hidden - !> @brief Sets a value indicating if hidden lines should be shown. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_show_hidden(class(surface_plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The surface_plot object. - !! @param[in] x Set to true if hidden lines should be shown; else, false. - procedure, public :: set_show_hidden => surf_set_show_hidden - !> @brief Gets the GNUPLOT command string to represent this plot_3d - !! object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return The command string. - procedure, public :: get_command_string => surf_get_cmd - !> @brief Gets a value determining if the plotted surfaces should be - !! smoothed. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_allow_smoothing(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return Returns true if the surface should be smoothed; else, false. - procedure, public :: get_allow_smoothing => surf_get_smooth - !> @brief Sets a value determining if the plotted surfaces should be - !! smoothed. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_allow_smoothing(class(surface_plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The surface_plot object. - !! @param[in] x Set to true if the surface should be smoothed; else, false. - procedure, public :: set_allow_smoothing => surf_set_smooth - !> @brief Gets a value determining if a contour plot should be drawn in - !! conjunction with the surface plot. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_show_contours(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return Returns true if the contour plot should be drawn; else, false to - !! only draw the surface. - procedure, public :: get_show_contours => surf_get_show_contours - !> @brief Sets a value determining if a contour plot should be drawn in - !! conjunction with the surface plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_show_contours(class(surface_plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The surface_plot object. - !! @param[in] x Set to true if the contour plot should be drawn; else, false - !! to only draw the surface. - procedure, public :: set_show_contours => surf_set_show_contours - !> @brief Gets a value indicating if lighting, beyond the ambient - !! light source, is to be used. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_lighting(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return True if lighting should be used; else, false. - procedure, public :: get_use_lighting => surf_get_use_lighting - !> @brief Sets a value indicating if lighting, beyond the ambient - !! light source, is to be used. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_lighting(class(surface_plot) this, logical x) - !! @endcode - !! - !! @param[in,out] this The surface_plot object. - !! @param[in] x True if lighting should be used; else, false. - procedure, public :: set_use_lighting => surf_set_use_lighting - !> @brief Gets the ratio of the strength of the light source relative - !! to the ambient light. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_light_intensity(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return The light intensity ratio. - procedure, public :: get_light_intensity => surf_get_light_intensity - !> @brief Sets the ratio of the strength of the light source relative - !! to the ambient light. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_light_intensity(class(surface_plot) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The surface_plot object. - !! @param[in] x The light intensity ratio. The value must exist in the - !! set [0, 1]; else, it will be clipped to lie within the range. - procedure, public :: set_light_intensity => surf_set_light_intensity - !> @brief Gets the ratio of the strength of the specular light source - !! relative to the ambient light. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_specular_intensity(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return The specular light intensity ratio. - procedure, public :: get_specular_intensity => surf_get_specular_intensity - !> @brief Sets the ratio of the strength of the specular light source - !! relative to the ambient light. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_specular_intensity(class(surface_plot) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The surface_plot object. - !! @param[in] x The specular light intensity ratio. The value must - !! exist in the set [0, 1]; else, it will be clipped to lie within the - !! range. - procedure, public :: set_specular_intensity => surf_set_specular_intensity - !> @brief Gets a factor defining the transparency of plotted surfaces. - !! - !! @par Syntax - !! @code{.f90} - !! pure real(real32) function get_transparency(class(surface_plot) this) - !! @endcode - !! - !! @param[in] this The surface_plot object. - !! @return A value existing on the set (0 1] defining the level of - !! transparency. A value of 1 indicates a fully opaque surface. - procedure, public :: get_transparency => surf_get_transparency - !> @brief Sets a factor defining the transparency of plotted surfaces. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_transparency(class(surface_plot) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The surface_plot object. - !! @param[in] x A value existing on the set (0 1] defining the level of - !! transparency. A value of 1 indicates a fully opaque surface. - !! Any values supplied outside of the set are clipped to fit within - !! (0 1]. - procedure, public :: set_transparency => surf_set_transparency - end type - -! ------------------------------------------------------------------------------ - interface - ! module subroutine surf_clean_up(this) - ! type(surface_plot), intent(inout) :: this - ! end subroutine - - module subroutine surf_init(this, term, fname, err) - class(surface_plot), intent(inout) :: this - integer(int32), intent(in), optional :: term - character(len = *), intent(in), optional :: fname - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function surf_get_show_hidden(this) result(x) - class(surface_plot), intent(in) :: this - logical :: x - end function - - module subroutine surf_set_show_hidden(this, x) - class(surface_plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function surf_get_cmd(this) result(x) - class(surface_plot), intent(in) :: this - character(len = :), allocatable :: x - end function - - ! module function surf_get_colormap(this) result(x) - ! class(surface_plot), intent(in) :: this - ! class(colormap), pointer :: x - ! end function - - ! module subroutine surf_set_colormap(this, x, err) - ! class(surface_plot), intent(inout) :: this - ! class(colormap), intent(in) :: x - ! class(errors), intent(inout), optional, target :: err - ! end subroutine - - pure module function surf_get_smooth(this) result(x) - class(surface_plot), intent(in) :: this - logical :: x - end function - - module subroutine surf_set_smooth(this, x) - class(surface_plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function surf_get_show_contours(this) result(x) - class(surface_plot), intent(in) :: this - logical :: x - end function - - module subroutine surf_set_show_contours(this, x) - class(surface_plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - ! pure module function surf_get_show_colorbar(this) result(x) - ! class(surface_plot), intent(in) :: this - ! logical :: x - ! end function - - ! module subroutine surf_set_show_colorbar(this, x) - ! class(surface_plot), intent(inout) :: this - ! logical, intent(in) :: x - ! end subroutine - - pure module function surf_get_use_lighting(this) result(x) - class(surface_plot), intent(in) :: this - logical :: x - end function - - module subroutine surf_set_use_lighting(this, x) - class(surface_plot), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function surf_get_light_intensity(this) result(x) - class(surface_plot), intent(in) :: this - real(real32) :: x - end function - - module subroutine surf_set_light_intensity(this, x) - class(surface_plot), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function surf_get_specular_intensity(this) result(x) - class(surface_plot), intent(in) :: this - real(real32) :: x - end function - - module subroutine surf_set_specular_intensity(this, x) - class(surface_plot), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function surf_get_transparency(this) result(x) - class(surface_plot), intent(in) :: this - real(real32) :: x - end function - - module subroutine surf_set_transparency(this, x) - class(surface_plot), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_AXIS.F90 -! ------------------------------------------------------------------------------ - !> @brief An x-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(x_axis) this) - !! @endcode - !! - !! @param[in] this The x_axis object. - !! @return The string. - type, extends(plot_axis) :: x_axis - !> The ID character - character :: m_id = "x" - contains - !> @brief Gets the axis identification string. - procedure, public :: get_id_string => xa_get_id - end type - -! ------------------------------------------------------------------------------ - !> @brief A y-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(y_axis) this) - !! @endcode - !! - !! @param[in] this The y_axis object. - !! @return The string. - type, extends(plot_axis) :: y_axis - !> The ID character - character :: m_id = "y" - contains - !> @brief Gets the axis identification string. - procedure, public :: get_id_string => ya_get_id - end type - -! ------------------------------------------------------------------------------ - !> @brief A secondary y-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(y2_axis) this) - !! @endcode - !! - !! @param[in] this The y2_axis object. - !! @return The string. - type, extends(plot_axis) :: y2_axis - !> The ID character - character(len = 2) :: m_id = "y2" - contains - !> @brief Gets the axis identification string. - procedure, public :: get_id_string => y2a_get_id - end type - -! ------------------------------------------------------------------------------ - !> @brief A z-axis object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_id_string(class(z_axis) this) - !! @endcode - !! - !! @param[in] this The z_axis object. - !! @return The string. - type, extends(plot_axis) :: z_axis - !> The ID character - character :: m_id = "z" - contains - !> @brief Gets the axis identification string. - procedure, public :: get_id_string => za_get_id - end type - -! ------------------------------------------------------------------------------ - interface - module function xa_get_id(this) result(x) - class(x_axis), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function ya_get_id(this) result(x) - class(y_axis), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function y2a_get_id(this) result(x) - class(y2_axis), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function za_get_id(this) result(x) - class(z_axis), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface - -! ****************************************************************************** -! ABSTRACT METHOD INTERFACES -! ------------------------------------------------------------------------------ - interface - !> @brief Retrieves a string from a plot_object. - !! - !! @param[in] this The plot_object object. - !! @return The string. - function get_string_result(this) result(x) - import plot_object - class(plot_object), intent(in) :: this - character(len = :), allocatable :: x - end function - - !> @brief Retrieves a string from a terminal. - !! - !! @param[in] this The terminal object. - !! @return The string. - function term_get_string_result(this) result(x) - import terminal - class(terminal), intent(in) :: this - character(len = :), allocatable :: x - end function - - !> @brief Retrieves a string from a plot_data object. - !! - !! @param[in] this The plot_data object. - !! @return The string. - function pd_get_string_result(this) result(x) - import plot_data - class(plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - !> @brief Retrieves a string from a plot_axis. - !! - !! @param[in] this The plot_axis object. - !! @return The string. - function pa_get_string_result(this) result(x) - import plot_axis - class(plot_axis), intent(in) :: this - character(len = :), allocatable :: x - end function - - !> @brief Retrieves a numeric value from a scatter_plot_data object. - !! - !! @param[in] this The scatter_plot_data object. - !! @param[in] index The index of the value to retrieve. - !! @return The requested value. - pure function spd_get_value(this, index) result(x) - use, intrinsic :: iso_fortran_env, only : int32, real64 - import scatter_plot_data - class(scatter_plot_data), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - end function - - !> @brief Sets a numeric value into a scatter_plot_data object. - !! - !! @param[in,out] this The scatter_plot_data object. - !! @param[in] index The index of the value to retrieve. - !! @param[in] x The value. - subroutine spd_set_value(this, index, x) - use, intrinsic :: iso_fortran_env, only : int32, real64 - import scatter_plot_data - class(scatter_plot_data), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - end subroutine - - !> @brief Retrieves an integer value from a scatter_plot_data object. - !! - !! @param[in] this The scatter_plot_data object. - !! @return The requested value. - pure function spd_get_int_value(this) result(x) - use, intrinsic :: iso_fortran_env, only : int32 - import scatter_plot_data - class(scatter_plot_data), intent(in) :: this - integer(int32) :: x - end function - - !> @brief Retrieves a string from a scatter_plot_data object. - !! - !! @param[in] this The scatter_plot_data object. - !! @return The string. - function spd_get_string_result(this) result(x) - import scatter_plot_data - class(scatter_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - !> @brief Retrieves a string from a colormap. - !! - !! @param[in] this The colormap object. - !! @return The string. - function cm_get_string_result(this) result(x) - import colormap - class(colormap), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface - -! ****************************************************************************** -! FPLOT_MULTIPLOT.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a multi-plot layout. - type, extends(plot_object) :: multiplot - !> The collection of plot objects. - type(list) :: m_plots - !> The number of rows of plots. - integer(int32) :: m_rows = 0 - !> The number of columns of plots. - integer(int32) :: m_cols = 0 - !> The page title. - character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_title - !> Has a title? - logical :: m_hasTitle = .false. - !> The BNUPLOT terminal object to target. - class(terminal), pointer :: m_terminal => null() - contains - final :: mp_clean - procedure, public :: get_command_string => mp_get_command - !> @brief Initializes the multiplot object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine initialize(class(multiplot) this, optional class(terminal) term, optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The multiplot object. - !! @param[in] term An optional input that is used to define the terminal. - !! The default terminal is a WXT terminal. The acceptable inputs are: - !! - GNUPLOT_TERMINAL_PNG - !! - GNUPLOT_TERMINAL_QT - !! - GNUPLOT_TERMINAL_WIN32 - !! - GNUPLOT_TERMINAL_WXT - !! - GNUPLOT_TERMINAL_LATEX - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: initialize => mp_init - !> @brief Gets the number of rows of plots. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_row_count(class(multiplot) this) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return The number of rows. - procedure, public :: get_row_count => mp_get_rows - !> @brief Gets the number of columns of plots. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_column_count(class(multiplot) this) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return The number of columns. - procedure, public :: get_column_count => mp_get_cols - !> @brief Gets the number of plots. - !! - !! @par Syntax - !! @code{.f90} - !! pure integer(int32) function get_plot_count(class(multiplot) this) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return The number of plots. - procedure, public :: get_plot_count => mp_get_count - !> @brief Gets the multiplot's title. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_title(class(multiplot)) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return The multiplot's title. - procedure, public :: get_title => mp_get_title - !> @brief Sets the multiplot's title. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_title(class(multiplot) this, character(len = *) txt) - !! @endcode - !! - !! @param[in,out] this The multiplot object. - !! @param[in] txt The multiplot's title. The number of characters must be less - !! than or equal to PLOTDATA_MAX_NAME_LENGTH; else, the text string is - !! truncated. - procedure, public :: set_title => mp_set_title - !> @brief Launches GNUPLOT and draws the multiplot per the current state of - !! the command list. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine draw(class(multiplot) this, optional logical persist, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @param[in] persist An optional parameter that can be used to keep GNUPLOT - !! open. Set to true to force GNUPLOT to remain open; else, set to false - !! to allow GNUPLOT to close after drawing. The default is true. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written. - procedure, public :: draw => mp_draw - !> @brief Gets the requested plot object. - !! - !! @par Syntax - !! @code{.f90} - !! class(plot) pointer function get(class(multiplot) this, integer(int32) i, integer(int32) j) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @param[in] i The row index of the plot to retrieve. - !! @param[in] j The column index of the plot to retrieve. - !! @return A pointer to the requested plot object. - procedure, public :: get => mp_get - !> @brief Sets the requested plot object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set(class(multiplot) this, integer(int32) i, integer(int32) j, class(plot) pointer x) - !! @endcode - !! - !! @param[in,out] this The multiplot object. - !! @param[in] i The row index of the plot to retrieve. - !! @param[in] j The column index of the plot to retrieve. - !! @param[in] x A pointer to the requested plot object. - procedure, public :: set => mp_set - !> @brief Gets a value determining if a title has been defined for the - !! multiplot object. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function is_title_defined(class(multiplot) this) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return Returns true if a title has been defined for this multiplot; else, - !! returns false. - procedure, public :: is_title_defined => mp_has_title - !> @brief Gets the GNUPLOT terminal object. - !! - !! @par Syntax - !! @code{.f90} - !! class(terminal) function, pointer get_terminal(class(multiplot) this) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return A pointer to the GNUPLOT terminal object. - procedure, public :: get_terminal => mp_get_term - !> @brief Saves a GNUPLOT command file. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine save_file(class(multiplot) this, character(len = *) fname, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @param[in] fname The filename. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written. - procedure, public :: save_file => mp_save - !> @brief Gets the name of the font used for plot text. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_font_name(class(multiplot) this) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return The font name. - procedure, public :: get_font_name => mp_get_font - !> @brief Sets the name of the font used for plot text. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_font_name(class(multiplot) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The multiplot object. - !! @param[in] x The font name. - procedure, public :: set_font_name => mp_set_font - !> @brief Gets the size of the font used by the plot. - !! - !! @par Syntax - !! @code{.f90} - !! integer(int32) function get_font_size(class(multiplot) this) - !! @endcode - !! - !! @param[in] this The multiplot object. - !! @return The size of the font, in points. - procedure, public :: get_font_size => mp_get_font_size - !> @brief Sets the size of the font used by the plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_font_size(class(multiplot) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The multiplot object. - !! @param[in] x The font size, in points. If a value of zero is provided, - !! the font size is reset to its default value; or, if a negative value - !! is provided, the absolute value of the supplied value is utilized. - procedure, public :: set_font_size => mp_set_font_size - end type - -! ------------------------------------------------------------------------------ - interface - module function mp_get_command(this) result(x) - class(multiplot), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine mp_init(this, m, n, term, err) - class(multiplot), intent(inout) :: this - integer(int32), intent(in) :: m, n - integer(int32), intent(in), optional :: term - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine mp_clean(this) - type(multiplot), intent(inout) :: this - end subroutine - - pure module function mp_get_rows(this) result(x) - class(multiplot), intent(in) :: this - integer(int32) :: x - end function - - pure module function mp_get_cols(this) result(x) - class(multiplot), intent(in) :: this - integer(int32) :: x - end function - - pure module function mp_get_count(this) result(x) - class(multiplot), intent(in) :: this - integer(int32) :: x - end function - - module function mp_get_title(this) result(x) - class(multiplot), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine mp_set_title(this, x) - class(multiplot), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - module subroutine mp_draw(this, persist, err) - class(multiplot), intent(in) :: this - logical, intent(in), optional :: persist - class(errors), intent(inout), optional, target :: err - end subroutine - - module function mp_get(this, i, j) result(x) - class(multiplot), intent(in) :: this - integer(int32), intent(in) :: i, j - class(plot), pointer :: x - end function - - module subroutine mp_set(this, i, j, x) - class(multiplot), intent(inout) :: this - integer(int32), intent(in) :: i, j - class(plot), intent(in) :: x - end subroutine - - pure module function mp_has_title(this) result(x) - class(multiplot), intent(in) :: this - logical :: x - end function - - module function mp_get_term(this) result(x) - class(multiplot), intent(in) :: this - class(terminal), pointer :: x - end function - - module subroutine mp_save(this, fname, err) - class(multiplot), intent(in) :: this - character(len = *), intent(in) :: fname - class(errors), intent(inout), optional, target :: err - end subroutine - - module function mp_get_font(this) result(x) - class(multiplot), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine mp_set_font(this, x) - class(multiplot), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - module function mp_get_font_size(this) result(x) - class(multiplot), intent(in) :: this - integer(int32) :: x - end function - - module subroutine mp_set_font_size(this, x) - class(multiplot), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_DATA_ERRORS.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a 2D error bar based data set. - type, extends(plot_data_colored) :: plot_data_error_bars - !> Display x error bars? - logical :: m_xBars = .false. - !> Display y error bars? - logical :: m_yBars = .false. - !> A matrix containing the raw and error data. Column 1 is for the - !! x coordinate, column 2 for the y coordinate, and the remaining - !! columns are for the error data (x, then y if applicable) - real(real64), allocatable, dimension(:,:) :: m_data - !> Display an error box for the case where x and y errors are defined. - logical :: m_box = .false. - !> Plot error bars using a defined range vs. a +/- value. - logical :: m_range = .false. - contains - procedure, public :: get_command_string => pde_get_cmd - procedure, public :: get_data_string => pde_get_data_cmd - !> @brief Defines the x error data. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_x_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xerr(:), optional class(errors) err) - !! @endcode - !! @par Alternative Syntax - !! @code{.f90} - !! subroutine define_x_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xmin(:), real(real64) xmax(:), optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot_data_error_bars object. - !! @param[in] x An N-element array containing the x coordinates of the - !! data. - !! @param[in] y An N-element array containing the y coordinates of the - !! data. - !! @param[in] xerr An N-element array containing the x errors at each - !! data point. - !! @param[in] xmin = An N-element array containing the minimum x values - !! at each data point. - !! @param[in] xmax = An N-element array containing the maximum x values - !! at each data point. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not - !! the same size. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory - !! available. - generic, public :: define_x_error_data => pde_define_x_err, & - pde_define_x_err_lim - !> @brief Defines the y error data. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_y_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) yerr(:), optional class(errors) err) - !! @endcode - !! @par Alternative Syntax - !! @code{.f90} - !! subroutine define_y_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) ymin(:), real(real64) ymax(:), optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot_data_error_bars object. - !! @param[in] x An N-element array containing the x coordinates of the - !! data. - !! @param[in] y An N-element array containing the y coordinates of the - !! data. - !! @param[in] yerr An N-element array containing the y errors at each - !! data point. - !! @param[in] ymin = An N-element array containing the minimum y values - !! at each data point. - !! @param[in] ymax = An N-element array containing the maximum y values - !! at each data point. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not - !! the same size. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory - !! available. - generic, public :: define_y_error_data => pde_define_y_err, & - pde_define_y_err_lim - !> @brief Defines the x and y error data. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_xy_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xerr(:), real(real64) yerr(:), optional class(errors) err) - !! @endcode - !! @par Alternative Syntax - !! @code{.f90} - !! subroutine define_xy_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xmin(:), real(real64) xmax(:), real(real64) ymin(:), real(real64) ymax(:), optional class(errors) err) - !! @endcode - !! - !! @param[in,out] this The plot_data_error_bars object. - !! @param[in] x An N-element array containing the x coordinates of the - !! data. - !! @param[in] y An N-element array containing the y coordinates of the - !! data. - !! @param[in] xerr An N-element array containing the x errors at each - !! data point. - !! @param[in] yerr An N-element array containing the y errors at each - !! data point. - !! @param[in] xmin = An N-element array containing the minimum x values - !! at each data point. - !! @param[in] xmax = An N-element array containing the maximum x values - !! at each data point. - !! @param[in] ymin = An N-element array containing the minimum y values - !! at each data point. - !! @param[in] ymax = An N-element array containing the maximum y values - !! at each data point. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not - !! the same size. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory - !! available. - generic, public :: define_xy_error_data => pde_define_xy_err, & - pde_define_xy_err_lim - !> @brief Tests to see if the x error bar data has been defined, and as - !! a result, if the x error data is to be plotted. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_plot_x_error_bars(class(plot_data_error_bars) this) - !! @endcode - !! - !! @param[in] this The plot_data_error_bars object. - !! @return Returns true if the x error bars are to be plotted; else, - !! false. - procedure, public :: get_plot_x_error_bars => pde_get_plot_x_err - !> @brief Tests to see if the y error bar data has been defined, and as - !! a result, if the y error data is to be plotted. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_plot_y_error_bars(class(plot_data_error_bars) this) - !! @endcode - !! - !! @param[in] this The plot_data_error_bars object. - !! @return Returns true if the y error bars are to be plotted; else, - !! false. - procedure, public :: get_plot_y_error_bars => pde_get_plot_y_err - !> @brief Gets the number of stored data points. - !! - !! @param[in] this The plot_data_error_bars object. - !! @return The number of data points. - procedure, public :: get_count => pde_get_count - !> @brief Tests to see if the x and y error boxes should be utilized. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_error_box(class(plot_data_error_bars) this) - !! @endcode - !! - !! @param[in] this The plot_data_error_bars object. - !! @return Returns true if the error boxes are to be plotted; else, - !! false. - !! - !! @par Remarks - !! Notice, the error boxes are only utilized if there is both x and y - !! error data defined, regardless of the value of this property. - procedure, public :: get_use_error_box => pde_get_box - !> @brief Deterimines if the x and y error boxes should be utilized. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_error_box(class(plot_data_error_bars) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_data_error_bars object. - !! @param[in] x Set to true if the error boxes are to be plotted; else, - !! false. - !! - !! @par Remarks - !! Notice, the error boxes are only utilized if there is both x and y - !! error data defined, regardless of the value of this property. - procedure, public :: set_use_error_box => pde_set_box - !> @brief Gets a value determining if a defined range is being used - !! to define the error bar extremes. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_use_range(class(plot_data_error_bars) this) - !! @endcode - !! - !! @param[in] this The plot_data_error_bars object. - !! @return True if a defined range is being used; else, false. - procedure, public :: get_use_range => pde_get_use_range - - procedure :: pde_define_x_err - procedure :: pde_define_y_err - procedure :: pde_define_xy_err - procedure :: pde_define_x_err_lim - procedure :: pde_define_y_err_lim - procedure :: pde_define_xy_err_lim - end type - -! ------------------------------------------------------------------------------ - interface - module function pde_get_cmd(this) result(cmd) - class(plot_data_error_bars), intent(in) :: this - character(len = :), allocatable :: cmd - end function - - module function pde_get_data_cmd(this) result(cmd) - class(plot_data_error_bars), intent(in) :: this - character(len = :), allocatable :: cmd - end function - - module subroutine pde_define_x_err(this, x, y, xerr, err) - class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xerr - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pde_define_y_err(this, x, y, yerr, err) - class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, yerr - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pde_define_xy_err(this, x, y, xerr, yerr, err) - class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xerr, yerr - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function pde_get_plot_x_err(this) result(x) - class(plot_data_error_bars), intent(in) :: this - logical :: x - end function - - pure module function pde_get_plot_y_err(this) result(x) - class(plot_data_error_bars), intent(in) :: this - logical :: x - end function - - pure module function pde_get_count(this) result(x) - class(plot_data_error_bars), intent(in) :: this - integer(int32) :: x - end function - - pure module function pde_get_box(this) result(x) - class(plot_data_error_bars), intent(in) :: this - logical :: x - end function - - module subroutine pde_set_box(this, x) - class(plot_data_error_bars), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function pde_get_use_range(this) result(x) - class(plot_data_error_bars), intent(in) :: this - logical :: x - end function - - module subroutine pde_define_x_err_lim(this, x, y, xmin, xmax, err) - class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xmin, xmax - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pde_define_y_err_lim(this, x, y, ymin, ymax, err) - class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, ymin, ymax - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pde_define_xy_err_lim(this, x, y, xmin, xmax, ymin, & - ymax, err) - class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xmin, xmax, & - ymin, ymax - class(errors), intent(inout), optional, target :: err - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_DATA_BAR.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a data set tailored to bar charts. - type, extends(plot_data_colored) :: plot_data_bar - private - !> @brief An array containing axis labels to associate with each bar. - type(string), allocatable, dimension(:) :: m_axisLabels - !> @brief An array of data defining each bar - the matrix contains - !! multiple columns to allow multiple bars per label. - real(real64), allocatable, dimension(:,:) :: m_barData - !> @brief Determines if the axis labels should be used - only applicable - !! if there is existing data stored in m_axisLabels & m_axisLabels - !! is the same size as m_barData. - logical :: m_useAxisLabels = .true. - !> Draw against the secondary y axis? - logical :: m_useY2 = .false. - !> @brief Determines if each bar is filled. - logical :: m_filled = .true. - !> @brief The alpha value (transparency) for each bar - real(real32) :: m_alpha = 1.0 - contains - procedure, public :: get_count => pdb_get_count - procedure, public :: get => pdb_get_data - procedure, public :: set => pdb_set_data - procedure, public :: get_data => pdb_get_data_set - procedure, public :: get_label => pdb_get_label - procedure, public :: set_label => pdb_set_label - procedure, public :: get_use_labels => pdb_get_use_labels - procedure, public :: set_use_labels => pdb_set_use_labels - procedure, public :: get_command_string => pdb_get_cmd - procedure, public :: get_data_string => pdb_get_data_cmd - procedure, public :: get_axes_string => pdb_get_axes_cmd - procedure, public :: get_bar_per_label_count => pdb_get_col_count - procedure, public :: get_draw_against_y2 => pdb_get_use_y2 - procedure, public :: set_draw_against_y2 => pdb_set_use_y2 - procedure, public :: get_is_filled => pdb_get_is_filled - procedure, public :: set_is_filled => pdb_set_is_filled - procedure, public :: get_transparency => pdb_get_alpha - procedure, public :: set_transparency => pdb_set_alpha - generic, public :: define_data => pdb_set_data_1, pdb_set_data_2, & - pdb_set_data_3 - procedure :: pdb_set_data_1 - procedure :: pdb_set_data_2 - procedure :: pdb_set_data_3 - procedure :: set_data_1 => pdb_set_data_1_core - procedure :: set_data_2 => pdb_set_data_2_core - procedure :: set_data_3 => pdb_set_data_3_core - end type - -! ------------------------------------------------------------------------------ - interface - pure module function pdb_get_count(this) result(x) - class(plot_data_bar), intent(in) :: this - integer(int32) :: x - end function - - pure module function pdb_get_data(this, index, col) result(x) - class(plot_data_bar), intent(in) :: this - integer(int32), intent(in) :: index, col - real(real64) :: x - end function - - module subroutine pdb_set_data(this, index, col, x) - class(plot_data_bar), intent(inout) :: this - integer(int32), intent(in) :: index, col - real(real64), intent(in) :: x - end subroutine - - pure module function pdb_get_data_set(this, col) result(x) - class(plot_data_bar), intent(in) :: this - integer(int32), intent(in) :: col - real(real64), allocatable, dimension(:) :: x - end function - - pure module function pdb_get_label(this, index) result(x) - class(plot_data_bar), intent(in) :: this - integer(int32), intent(in) :: index - character(len = :), allocatable :: x - end function - - module subroutine pdb_set_label(this, index, txt) - class(plot_data_bar), intent(inout) :: this - integer(int32) :: index - character(len = *), intent(in) :: txt - end subroutine - - pure module function pdb_get_use_labels(this) result(x) - class(plot_data_bar), intent(in) :: this - logical :: x - end function - - module subroutine pdb_set_use_labels(this, x) - class(plot_data_bar), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function pdb_get_cmd(this) result(x) - class(plot_data_bar), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function pdb_get_data_cmd(this) result(x) - class(plot_data_bar), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function pdb_get_axes_cmd(this) result(x) - class(plot_data_bar), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function pdb_get_col_count(this) result(x) - class(plot_data_bar), intent(in) :: this - integer(int32) :: x - end function - - pure module function pdb_get_use_y2(this) result(x) - class(plot_data_bar), intent(in) :: this - logical :: x - end function - - module subroutine pdb_set_use_y2(this, x) - class(plot_data_bar), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function pdb_get_is_filled(this) result(x) - class(plot_data_bar), intent(in) :: this - logical :: x - end function - - module subroutine pdb_set_is_filled(this, x) - class(plot_data_bar), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module subroutine pdb_set_data_1(this, x, err) - class(plot_data_bar), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pdb_set_data_2(this, labels, x, err) - class(plot_data_bar), intent(inout) :: this - class(string), intent(in), dimension(:) :: labels - real(real64), intent(in), dimension(:) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pdb_set_data_3(this, labels, x, fmt, err) - class(plot_data_bar), intent(inout) :: this - real(real64), intent(in), dimension(:) :: labels - real(real64), intent(in), dimension(:) :: x - character(len = *), intent(in), optional :: fmt - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function pdb_get_alpha(this) result(x) - class(plot_data_bar), intent(in) :: this - real(real32) :: x - end function - - module subroutine pdb_set_alpha(this, x) - class(plot_data_bar), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - module subroutine pdb_set_data_1_core(this, x, err) - class(plot_data_bar), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pdb_set_data_2_core(this, labels, x, err) - class(plot_data_bar), intent(inout) :: this - class(string), intent(in), dimension(:) :: labels - real(real64), intent(in), dimension(:) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pdb_set_data_3_core(this, labels, x, fmt, err) - class(plot_data_bar), intent(inout) :: this - real(real64), intent(in), dimension(:) :: labels - real(real64), intent(in), dimension(:) :: x - character(len = *), intent(in), optional :: fmt - class(errors), intent(inout), optional, target :: err - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_DATA_HISTOGRAM.F90 -! ------------------------------------------------------------------------------ - !> @brief A container for plotting data in the form of a histogram. - type, extends(plot_data_bar) :: plot_data_histogram - private - !> @brief The number of bins. - integer(int32) :: m_binCount = 10 - !> @brief The numerical label format string. - character(len = :), allocatable :: m_numberFmt - contains - procedure, public :: get_bin_count => pdh_get_bin_count - procedure, public :: set_bin_count => pdh_set_bin_count - procedure, public :: bin_data => pdh_bin_data - procedure, public :: get_extreme_values => pdh_get_extremes - procedure, public :: get_number_format => pdh_get_num_fmt - procedure, public :: set_number_format => pdh_set_num_fmt - procedure :: set_data_1 => pdh_set_data_1 - procedure :: set_data_2 => pdh_set_data_2 - procedure :: set_data_3 => pdh_set_data_3 - end type - -! ------------------------------------------------------------------------------ - interface - pure module function pdh_get_bin_count(this) result(x) - class(plot_data_histogram), intent(in) :: this - integer(int32) :: x - end function - - module subroutine pdh_set_bin_count(this, x) - class(plot_data_histogram), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - - module function pdh_bin_data(this, x, err) result(bx) - class(plot_data_histogram), intent(in) :: this - real(real64), intent(in), dimension(:) :: x - class(errors), intent(inout), optional, target :: err - real(real64), allocatable, dimension(:,:) :: bx - end function - - pure module function pdh_get_extremes(this) result(x) - class(plot_data_histogram), intent(in) :: this - real(real64), dimension(2) :: x - end function - - module subroutine pdh_set_data_1(this, x, err) - class(plot_data_histogram), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pdh_set_data_2(this, labels, x, err) - class(plot_data_histogram), intent(inout) :: this - class(string), intent(in), dimension(:) :: labels - real(real64), intent(in), dimension(:) :: x - class(errors), intent(inout), optional, target :: err - end subroutine - - module subroutine pdh_set_data_3(this, labels, x, fmt, err) - class(plot_data_histogram), intent(inout) :: this - real(real64), intent(in), dimension(:) :: labels - real(real64), intent(in), dimension(:) :: x - character(len = *), intent(in), optional :: fmt - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function pdh_get_num_fmt(this) result(x) - class(plot_data_histogram), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine pdh_set_num_fmt(this, x) - class(plot_data_histogram), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_PLOT_BAR.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a 2D plot tailored towards bar plotting. - type, extends(plot_2d) :: plot_bar - private - !> @brief A relative scaling of the width of a single bar. The value - !! must be between 0 and 1 with 1 being full width. - real(real32) :: m_barWidth = 0.75d0 - contains - procedure, public :: get_bar_width => pb_get_bar_width - procedure, public :: set_bar_width => pb_set_bar_width - procedure, public :: get_command_string => pb_get_cmd - end type - -! ------------------------------------------------------------------------------ - interface - pure module function pb_get_bar_width(this) result(x) - class(plot_bar), intent(in) :: this - real(real32) :: x - end function - - module subroutine pb_set_bar_width(this, x) - class(plot_bar), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - module function pb_get_cmd(this) result(x) - class(plot_bar), intent(in) :: this - character(len = :), allocatable :: x - end function - end interface - - -! ****************************************************************************** -! FPLOT_TRIANGULATIONS_DELAUNAY_2D.F90 -! ------------------------------------------------------------------------------ - !> @brief Provides a container for a 2D Delaunay triangulation. - !! - !! @par Remarks - !! This type utilizes the GEOMPACK triangulation code available at - !! https://people.sc.fsu.edu/~jburkardt/f77_src/geompack/geompack.html. - type delaunay_tri_2d - private - !> @brief An array of the x-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_x - !> @brief An array of the y-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_y - !> @brief A 3-column matrix containing the indices of each triangle's - !! vertex. - integer(int32), allocatable, dimension(:,:) :: m_indices - contains - !> @brief Creates an unconstrained 2D Delaunay triangulation given a - !! set of x-y points. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine create(class(delaunay_tri_2d) this, real(real64) x(:), real(real64) y(:), class(errors) err) - !! @endcode - !! - !! @param[in,out] this The delaunay_tri_2d object. - !! @param[in] x An N-element array containing the x-coordinates of each - !! data point. - !! @param[in] y An N-element array containing the y-coordinates of each - !! data point. - !! @param[in,out] err An optional errors-based object that if provided - !! can be used to retrieve information relating to any errors - !! encountered during execution. If not provided, a default - !! implementation of the errors class is used internally to provide - !! error handling. Possible errors and warning messages that may be - !! encountered are as follows. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not - !! the same size. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory - !! available. - procedure, public :: create => d2d_init - !> @brief Gets the number of points in the triangulation. - !! - !! @par Syntax - !! @code{.f90} - !! integer(int32) function get_point_count(class(delaunay_tri_2d) this) - !! @endcode - !! - !! @param[in] this The delaunay_tri_2d object. - !! @return The number of points in the triangulation. - procedure, public :: get_point_count => d2d_get_pt_count - !> @brief Gets the number of triangles in the triangulation. - !! - !! @par Syntax - !! @code{.f90} - !! integer(int32) function get_triangle_count(class(delaunay_tri_2d) this) - !! @endcode - !! - !! @param[in] this The delaunay_tri_2d object. - !! @return The number of triangles in the triangulation. - procedure, public :: get_triangle_count => d2d_get_tri_count - !> @brief Gets the x-coordinates of each point. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_points_x(class(delaunay_tri_2d) this) - !! @endcode - !! - !! @param[in] this The delaunay_tri_2d object. - !! @return An array of the x-coordinates of each point. - procedure, public :: get_points_x => d2d_get_x_pts - !> @brief Gets the y-coordinates of each point. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_points_y(class(delaunay_tri_2d) this) - !! @endcode - !! - !! @param[in] this The delaunay_tri_2d object. - !! @return An array of the y-coordinates of each point. - procedure, public :: get_points_y => d2d_get_y_pts - !> @brief Gets a list of the indices of each triangle vertex. - !! - !! @par Syntax - !! @code{.f90} - !! integer(int32)(:,:) function get_indices(class(delaunay_tri_2d) this) - !! @endcode - !! - !! @param[in] this The delaunay_tri_2d object. - !! @return An N-by-3 matrix with each column containing the index of the - !! vertex of each triangle where N is the number of triangles. - procedure, public :: get_indices => d2d_get_tris - !> @brief Finds the triangle that contains the specified point. - !! - !! @par Syntax - !! @code{.f90} - !! integer(int32) function find_triangle(class(delaunay_tri_2d) this, real(real64) x, real(real64) y) - !! @endcode - !! - !! @param[in] this The delaunay_tri_2d object. - !! @param[in] x The x-coordinate of the point. - !! @param[in] y The y-coordinate of the point. - !! - !! @return Returns the index of the triangle containing the specified - !! point. If no triangle contains the specified point, a value of - !! -1 is returned. - procedure, public :: find_triangle => d2d_get_tri_with_pt - end type - -! ---------- - interface - module subroutine d2d_init(this, x, y, err) - class(delaunay_tri_2d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y - class(errors), intent(inout), target, optional :: err - end subroutine - - pure module function d2d_get_pt_count(this) result(rst) - class(delaunay_tri_2d), intent(in) :: this - integer(int32) :: rst - end function - - pure module function d2d_get_tri_count(this) result(rst) - class(delaunay_tri_2d), intent(in) :: this - integer(int32) :: rst - end function - - pure module function d2d_get_x_pts(this) result(rst) - class(delaunay_tri_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: rst - end function - - pure module function d2d_get_y_pts(this) result(rst) - class(delaunay_tri_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: rst - end function - - pure module function d2d_get_tris(this) result(rst) - class(delaunay_tri_2d), intent(in) :: this - integer(int32), allocatable, dimension(:,:) :: rst - end function - - pure module function d2d_get_tri_with_pt(this, x, y) result(rst) - class(delaunay_tri_2d), intent(in) :: this - real(real64), intent(in) :: x, y - integer(int32) :: rst - end function - end interface - -! ****************************************************************************** -! FPLOT_PLOT_DATA_TRI_2D.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a 2D triangulated data set. - type, extends(plot_data_colored) :: plot_data_tri_2d - private - !> @brief An array of the x-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_x - !> @brief An array of the y-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_y - !> @brief A 3-column matrix containing the indices of each triangle's - !! vertex. - integer(int32), allocatable, dimension(:,:) :: m_indices - !> @brief The line width. - real(real32) :: m_lineWidth = 1.0 - !> @brief The line style - integer(int32) :: m_lineStyle = LINE_SOLID - contains - procedure, public :: get_data_string => pdt2d_get_data_cmd - procedure, public :: get_command_string => pdt2d_get_cmd - !> @brief Defines the data to plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine(class(plot_data_tri_2d) this, class(delaunay_tri_2d) tri) - !! @endcode - !! - !! @param[in,out] this The plot_data_tri_2d object. - !! @param[in] tri The triangulation data to plot. - procedure, public :: define_data => pdt2d_define_data - !> @brief Gets the width of the lines used to draw the triangulation. - !! - !! @par Syntax - !! @code{.f90} - !! real(real32) function get_line_width(class(plot_data_tri_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_tri_2d object. - !! @return The line width. - procedure, public :: get_line_width => pdt2d_get_line_width - !> @brief Sets the width of the lines used to draw the triangulation. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_line_width(class(plot_data_tri_2d) this, real(real32) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_tri_2d object. - !! @param[in] x The line width. - procedure, public :: set_line_width => pdt2d_set_line_width - !> @brief - !! - !! @par Syntax - !! @code{.f90} - !! integer(int32) function get_line_style(class(plot_data_tri_2d) this) - !! @endcode - !! - !! @param[in] this The plot_data_tri_2d object. - !! @return The line sytle flag. - procedure, public :: get_line_style => pdt2d_get_line_style - !> @brief - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_line_style(class(plot_data_tri_2d) this, integer(int32) x) - !! @endcode - !! - !! @param[in,out] this The plot_data_tri_2d object. - !! @param[in] x The line style. The line style must be one of the - !! following: - !! - LINE_DASHED - !! - LINE_DASH_DOTTED - !! - LINE_DASH_DOT_DOT - !! - LINE_DOTTED - !! - LINE_SOLID - procedure, public :: set_line_style => pdt2d_set_line_style - end type - -! -------------------- - interface - module function pdt2d_get_data_cmd(this) result(x) - class(plot_data_tri_2d), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function pdt2d_get_cmd(this) result(x) - class(plot_data_tri_2d), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine pdt2d_define_data(this, tri) - class(plot_data_tri_2d), intent(inout) :: this - class(delaunay_tri_2d), intent(in) :: tri - end subroutine - - module function pdt2d_get_axes_cmd(this) result(x) - class(plot_data_tri_2d), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function pdt2d_get_line_width(this) result(rst) - class(plot_data_tri_2d), intent(in) :: this - real(real32) :: rst - end function - - module subroutine pdt2d_set_line_width(this, x) - class(plot_data_tri_2d), intent(inout) :: this - real(real32), intent(in) :: x - end subroutine - - pure module function pdt2d_get_line_style(this) result(rst) - class(plot_data_tri_2d), intent(in) :: this - integer(int32) :: rst - end function - - module subroutine pdt2d_set_line_style(this, x) - class(plot_data_tri_2d), intent(inout) :: this - integer(int32), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_DELAUNAY_TRI_SURFACE.F90 -! ------------------------------------------------------------------------------ - !> @brief Provides a type describing a triangulated surface. - type, extends(delaunay_tri_2d) :: delaunay_tri_surface - private - !> @brief An array of the z-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_z - contains - !> @brief Defines the function values that correspond to the x and y - !! data points. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_function_values(class(delaunay_tri_surface) this, real(real64) z(:), class(errors) err) - !! @endcode - !! - !! @param[in,out] this The delaunay_tri_surface object. - !! @param[in] z An N-element array containing the function values for - !! each x and y coordinate. Notice, the x and y coordinates must - !! already be defined prior to calling this routine. - !! @param[in,out] err An optional errors-based object that if provided - !! can be used to retrieve information relating to any errors - !! encountered during execution. If not provided, a default - !! implementation of the errors class is used internally to provide - !! error handling. Possible errors and warning messages that may be - !! encountered are as follows. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if @p z is not the same - !! size as the number of x-y data points. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory - !! available. - !! - PLOT_INVALID_OPERATION_ERROR: Occurs if the x-y point data has - !! not been defined. - procedure, public :: define_function_values => dts_define_fcn - !> @brief Gets the z-coordinates of each point. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(:) function get_points_x(class(delaunay_tri_surface) this) - !! @endcode - !! - !! @param[in] this The delaunay_tri_2d object. - !! @return An array of the z-coordinates of each point. - procedure, public :: get_points_z => dts_get_z - !> @brief Evaluates the function at the requested point by means of - !! linear interpolation. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64) function evaluate(class(delaunay_tri_surface) this, real(real64) x, real(real64) y) - !! @endcode - !! - !! @param[in] this The delaunay_tri_surface object. - !! @param[in] x The x-coordinate at which to evaluate the function. - !! @param[in] y The y-coordinate at which to evaluate the function. - !! - !! @return The function value. If the point (@p x, @p y) does not lie - !! within the range of defined values, then a value of NaN is returned. - generic, public :: evaluate => dts_interp_1, dts_interp_2 - - procedure :: dts_interp_1 - procedure :: dts_interp_2 - end type - -! -------------------- - interface - module subroutine dts_define_fcn(this, z, err) - class(delaunay_tri_surface), intent(inout) :: this - real(real64), intent(in), dimension(:) :: z - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function dts_get_z(this) result(rst) - class(delaunay_tri_surface), intent(in) :: this - real(real64), allocatable, dimension(:) :: rst - end function - - pure module function dts_interp_1(this, x, y) result(z) - class(delaunay_tri_surface), intent(in) :: this - real(real64), intent(in) :: x, y - real(real64) :: z - end function - - pure module function dts_interp_2(this, x, y) result(z) - class(delaunay_tri_surface), intent(in) :: this - real(real64), intent(in), dimension(:) :: x, y - real(real64), allocatable, dimension(:) :: z - end function - end interface - -! ****************************************************************************** -! FPLOT_TRI_SURFACE_PLOT_DATA.F90 -! ------------------------------------------------------------------------------ - !> @brief Provides a three-dimensional surface plot data set constructed of - !! triangulated points. - type, extends(plot_data) :: tri_surface_plot_data - private - !> @brief An array of the x-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_x - !> @brief An array of the y-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_y - !> @brief An array of the z-coordinates of each point. - real(real64), allocatable, dimension(:) :: m_z - !> @brief A 3-column matrix containing the indices of each triangle's - !! vertex. - integer(int32), allocatable, dimension(:,:) :: m_indices - !> @brief Determines if the surface should be drawn as a wireframe. - logical :: m_wireframe = .true. - contains - procedure, public :: get_data_string => tspd_get_data_cmd - procedure, public :: get_command_string => tspd_get_cmd - !> @brief Gets a value determining if a wireframe mesh should be - !! displayed. - !! - !! @par Syntax - !! @code{.f90} - !! logical function get_use_wireframe(class(tri_surface_plot_data) this) - !! @endcode - !! - !! @param[in] this The tri_surface_plot_data object. - !! @return Returns true if the plot is to be drawn as a wireframe; else, - !! false to draw as a surface. - procedure, public :: get_use_wireframe => tspd_get_wireframe - !> @brief Sets a value determining if a wireframe mesh should be - !! displayed. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_use_wireframe(class(tri_surface_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The tri_surface_plot_data object. - !! @param[in] x Set to true if the plot is to be drawn as a wireframe; - !! else, set to false to draw as a surface. - procedure, public :: set_use_wireframe => tspd_set_wireframe - !> @brief Defines the data to plot. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(tri_surface_plot_data) this, class(delaunay_tri_surface) tri) - !! @endcode - !! - !! @param[in,out] this The tri_surface_plot_data object. - !! @param[in] tri The triangulation to plot. - procedure, public :: define_data => tspd_define_data - end type - -! -------------------- - interface - module function tspd_get_data_cmd(this) result(x) - class(tri_surface_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function tspd_get_cmd(this) result(x) - class(tri_surface_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function tspd_get_wireframe(this) result(rst) - class(tri_surface_plot_data), intent(in) :: this - logical :: rst - end function - - module subroutine tspd_set_wireframe(this, x) - class(tri_surface_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module subroutine tspd_define_data(this, tri) - class(tri_surface_plot_data), intent(inout) :: this - class(delaunay_tri_surface), intent(in) :: tri - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_VECTOR_FIELD_PLOT_DATA.F90 -! ------------------------------------------------------------------------------ - ! REF: - ! http://www.gnuplotting.org/vector-field-from-data-file/ - ! http://gnuplot.sourceforge.net/demo_5.4/vector.html - ! http://www.gnuplot.info/docs_5.4/Gnuplot_5_4.pdf (pg 79) - - !> @brief Defines a two-dimensional vector-field plot data set. - type, extends(plot_data_colored) :: vector_field_plot_data - private - !> @brief An M-by-N-by-4 array containing the x, y, dx, and dy plot - !! data points. Optionally, a 5th page can be added to define the - !! color for each arrow. - real(real64), allocatable, dimension(:,:,:) :: m_data - !> @brief The vector size (scaling factor). - real(real64) :: m_arrowSize = 1.0d0 - !> @brief Fill the arrow heads? - logical :: m_filledHeads = .false. - contains - !> @brief Gets the GNUPLOT command string containing the actual data - !! to plot. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_data_string(class(vector_field_plot_data) this) - !! @endcode - !! - !! @param[in] this The vector_field_plot_data object. - !! @return The command string. - procedure, public :: get_data_string => vfpd_get_data_cmd - !> @brief Gets the GNUPLOT command string to represent this - !! vector_field_plot_data object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(vector_field_plot_data) this) - !! @endcode - !! - !! @param[in] this The vector_field_plot_data object. - !! @return The command string. - procedure, public :: get_command_string => vfpd_get_cmd - !> @brief Defines the data set. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(vector_field_plot_data) this, real(real64) x(:,:), real(real64) y(:,:), real(real64) dx(:,:), real(real64) dy(:,:), real(real64) c(:,:), class(errors) err) - !! @endcode - !! - !! @param[in,out] this The vector_field_plot_data object. - !! @param[in] x An M-by-N matrix containing the x-locations of each arrow's origin. - !! @param[in] y An M-by-N matrix containing the y-locations of each arrow's origin. - !! @param[in] dx An M-by-N matrix containing the x-direction of each arrow. - !! @param[in] dy An M-by-N matrix containing the y-direction of each arrow. - !! @param[in] c An optional M-by-N matrix containing information on how to color the - !! arrows. The colors are determined by the active colormap. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input matrices are - !! not the same size. - procedure, public :: define_data => vfpd_define_data - !> @brief Gets the scaling factor used to determine the arrow size. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64) get_arrow_size(class(vector_field_plot_data) this) - !! @endcode - !! - !! @param[in] this The vector_field_plot_data object. - !! @return The scaling factor. - procedure, public :: get_arrow_size => vfpd_get_arrow_size - !> @brief Sets the scaling factor used to determine the arrow size. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_arrow_size(class(vector_field_plot_data) this, real(real64) x) - !! @endcode - !! - !! @param[in,out] this The vector_field_plot_data object. - !! @param[in] x The scaling factor. - procedure, public :: set_arrow_size => vfpd_set_arrow_size - !> @brief Gets a value determining if the arrow heads should be filled. - !! - !! @par Syntax - !! @code{.f90} - !! logical get_fill_arrow(class(vector_field_plot_data) this) - !! @endcode - !! - !! @param[in] this The vector_field_plot_data object. - !! @return True if the arrow heads should be filled; else, false. - procedure, public :: get_fill_arrow => vfpd_get_fill_arrow - !> @brief Sets a value determining if the arrow heads should be filled. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_fill_arrow(class(vector_field_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The vector_field_plot_data object. - !! @param[in] x True if the arrow heads should be filled; else, false. - procedure, public :: set_fill_arrow => vfpd_set_fill_arrow - !> @brief Gets a value indicating if data-dependent coloring should be - !! used. This is defined by supplying information on how to scale the - !! coloring when calling define_data. - !! - !! @par Syntax - !! @code{.f90} - !! logical get_use_data_dependent_colors(class(vector_field_plot_data) this) - !! @endcode - !! - !! @param[in] this The vector_field_plot_data object. - !! return Returns true if data-dependent coloring is being used; else, - !! false. - procedure, public :: get_use_data_dependent_colors => & - vfpd_get_use_data_dependent_colors - end type - -! -------------------- - interface - module function vfpd_get_data_cmd(this) result(x) - class(vector_field_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function vfpd_get_cmd(this) result(x) - class(vector_field_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine vfpd_define_data(this, x, y, dx, dy, c, err) - class(vector_field_plot_data), intent(inout) :: this - real(real64), intent(in), dimension(:,:) :: x, y, dx, dy - real(real64), intent(in), dimension(:,:), optional :: c - class(errors), intent(inout), optional, target :: err - end subroutine - - pure module function vfpd_get_arrow_size(this) result(rst) - class(vector_field_plot_data), intent(in) :: this - real(real64) :: rst - end function - - module subroutine vfpd_set_arrow_size(this, x) - class(vector_field_plot_data), intent(inout) :: this - real(real64), intent(in) :: x - end subroutine - - pure module function vfpd_get_fill_arrow(this) result(rst) - class(vector_field_plot_data), intent(in) :: this - logical :: rst - end function - - module subroutine vfpd_set_fill_arrow(this, x) - class(vector_field_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function vfpd_get_use_data_dependent_colors(this) result(rst) - class(vector_field_plot_data), intent(in) :: this - logical :: rst - end function - end interface - -! ****************************************************************************** -! FPLOT_PLOT_POLAR.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a 2D polar plot. - type, extends(plot) :: plot_polar - private - !> @brief Allow the plot to autoscale? - logical :: m_autoscale = .true. - !> @brief The minimum radius value - only applicable if m_autoscale is - !! false. - real(real64) :: m_minrad = 0.0d0 - !> @brief The maximum radius value - only applicable if m_autoscale is - !! false. - real(real64) :: m_maxrad = 1.0d0 - !> @brief The location for theta = 0 - character(len = :), allocatable :: m_thetaStart - !> @brief The direction for theta - character(len = :), allocatable :: m_thetaDirection - contains - final :: plr_clean_up - !> @brief Initializes the plot_polar object. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine initialize(class(plot_polar) this, optional integer(int32) term, optional class(errors) err) - !! @endcode - !! - !! @param[in] this The plot_polar object. - !! @param[in] term An optional input that is used to define the terminal. - !! The default terminal is a WXT terminal. The acceptable inputs are: - !! - GNUPLOT_TERMINAL_PNG - !! - GNUPLOT_TERMINAL_QT - !! - GNUPLOT_TERMINAL_WIN32 - !! - GNUPLOT_TERMINAL_WXT - !! - GNUPLOT_TERMINAL_LATEX - !! @param[in] fname A filename to pass to the terminal in the event the - !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - procedure, public :: initialize => plr_init - !> @brief Gets the GNUPLOT command string to represent this plot_polar - !! object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(plot_polar) this) - !! @endcode - !! - !! @param[in] this The plot_polar object. - !! @return The command string. - procedure, public :: get_command_string => plr_get_cmd - !> @brief Gets a logical value determining if the axis should be - !! automatically scaled to fit the data. - !! - !! @par Syntax - !! @code{.f90} - !! logical get_autoscale(class(plot_polar) this) - !! @endcode - !! - !! @param[in] this The plot_polar object. - !! @return Returns true if the plot will autoscale; else, false. - procedure, public :: get_autoscale => plr_get_autoscale - !> @brief Sets a logical value determining if the axis should be - !! automatically scaled to fit the data. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_autoscale(class(plot_polar) this, logical x) - !! @endcode - !! - !! @param[in,out] this The plot_polar object. - !! @param[in] x Set to true if the plot will autoscale; else, false. - procedure, public :: set_autoscale => plr_set_autoscale - !> @brief Gets the radial axis limits if autoscaling is inactive. - !! - !! @par Syntax - !! @code{.f90} - !! real(real64)(2) get_radial_limits(class(plot_polar) this) - !! @endcode - !! - !! @param[in] this The plot_polar object. - !! @returns A 2-element array containing the minimum and maximum limit - !! values in that order. - procedure, public :: get_radial_limits => plr_get_limits - !> @brief Sets the radial axis limits if autoscaling is inactive. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_radial_limits(class(plot_polar) this, real(real64) x(2)) - !! @endcode - !! - !! @param[in,out] this The plot_polar object. - !! @param[in] A 2-element array containing the minimum and maximum limit - !! values. - procedure, public :: set_radial_limits => plr_set_limits - !> @brief Gets the position for theta = 0. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) get_theta_start_position(class(plot_polar) this) - !! @endcode - !! - !! @param[in] this The plot_polar object. - !! @return The starting position. It is one of the following flags. - !! - POLAR_THETA_BOTTOM - !! - POLAR_THETA_TOP - !! - POLAR_THETA_RIGHT - !! - POLAR_THETA_LEFT - procedure, public :: get_theta_start_position => plr_get_theta_start - !> @brief Sets the position for theta = 0. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_theta_start_position(class(plot_polar) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The plot_polar object. - !! @param[in] x The starting position. It must be one of the following - !! flags. - !! - POLAR_THETA_BOTTOM - !! - POLAR_THETA_TOP - !! - POLAR_THETA_RIGHT - !! - POLAR_THETA_LEFT - procedure, public :: set_theta_start_position => plr_set_theta_start - !> @brief Gets the theta direction. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) get_theta_direction(class(plot_polar) this) - !! @endcode - !! - !! @param[in] this The plot_polar object. - !! @return The direction. It is one of the following flags. - !! - POLAR_THETA_CCW - !! - POLAR_THETA_CW - procedure, public :: get_theta_direction => plr_get_theta_direction - !> @brief Sets the theta direction. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_theta_direction(class(plot_polar) this, character(len = *) x) - !! @endcode - !! - !! @param[in,out] this The plot_polar object. - !! @param[in] x The direction. It must be one of the following flags. - !! - POLAR_THETA_CCW - !! - POLAR_THETA_CW - procedure, public :: set_theta_direction => plr_set_theta_direction - end type - -! -------------------- - interface - module subroutine plr_clean_up(this) - type(plot_polar), intent(inout) :: this - end subroutine - - module subroutine plr_init(this, term, fname, err) - class(plot_polar), intent(inout) :: this - integer(int32), intent(in), optional :: term - character(len = *), intent(in), optional :: fname - class(errors), intent(inout), optional, target :: err - end subroutine - - module function plr_get_cmd(this) result(x) - class(plot_polar), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function plr_get_autoscale(this) result(rst) - class(plot_polar), intent(in) :: this - logical :: rst - end function - - module subroutine plr_set_autoscale(this, x) - class(plot_polar), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - pure module function plr_get_limits(this) result(rst) - class(plot_polar), intent(in) :: this - real(real64) :: rst(2) - end function - - module subroutine plr_set_limits(this, x) - class(plot_polar), intent(inout) :: this - real(real64), intent(in) :: x(2) - end subroutine - - pure module function plr_get_theta_start(this) result(rst) - class(plot_polar), intent(in) :: this - character(len = :), allocatable :: rst - end function - - module subroutine plr_set_theta_start(this, x) - class(plot_polar), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - - pure module function plr_get_theta_direction(this) result(rst) - class(plot_polar), intent(in) :: this - character(len = :), allocatable :: rst - end function - - module subroutine plr_set_theta_direction(this, x) - class(plot_polar), intent(inout) :: this - character(len = *), intent(in) :: x - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_FILLED_PLOT_DATA.F90 -! ------------------------------------------------------------------------------ - !> @brief Defines a two-dimensional filled plot data set. - type, extends(plot_data_colored) :: filled_plot_data - private - !> Plot against the secondary y-axis - logical :: m_useY2 = .false. - !> The data set (column 1 = x, column 2 = y, column 3 = constraint y) - real(real64), allocatable, dimension(:,:) :: m_data - contains - !> @brief Gets the GNUPLOT command string defining which axes the data - !! is to be plotted against. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_axis_string(class(filled_plot_data) this) - !! @endcode - !! - !! @param[in] this The filled_plot_data object. - !! @return The command string. - procedure, public :: get_axes_string => fpd_get_axes_cmd - !> @brief Gets a value determining if the data should be plotted against - !! the secondary y-axis. - !! - !! @par Syntax - !! @code{.f90} - !! pure logical function get_draw_against_y2(class(filled_plot_data) this) - !! @endcode - !! - !! @param[in] this The filled_plot_data object. - !! @return Returns true if the data should be plotted against the secondary - !! y-axis; else, false to plot against the primary y-axis. - procedure, public :: get_draw_against_y2 => fpd_get_draw_against_y2 - !> @brief Sets a value determining if the data should be plotted against - !! the secondary y-axis. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine set_draw_against_y2(class(filled_plot_data) this, logical x) - !! @endcode - !! - !! @param[in,out] this The filled_plot_data object. - !! @param[in] x Set to true if the data should be plotted against the - !! secondary y-axis; else, false to plot against the primary y-axis. - procedure, public :: set_draw_against_y2 => fpd_set_draw_against_y2 - !> @brief Gets the GNUPLOT command string to represent this - !! filled_plot_data object. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_command_string(class(filled_plot_data) this) - !! @endcode - !! - !! @param[in] this The filled_plot_data object. - !! @return The command string. - procedure, public :: get_command_string => fpd_get_cmd - !> @brief Gets the GNUPLOT command string containing the actual data - !! to plot. - !! - !! @par Syntax - !! @code{.f90} - !! character(len = :) function, allocatable get_data_string(class(filled_plot_data) this) - !! @endcode - !! - !! @param[in] this The filled_plot_data object. - !! @return The command string. - procedure, public :: get_data_string => fpd_get_data_cmd - !> @brief Defines the data set. - !! - !! @par Syntax - !! @code{.f90} - !! subroutine define_data(class(filled_plot_data) this, real(real64) x(:), real(real64) y(:), real(real64) yc(:)) - !! @endcode - !! - !! @param[in,out] this The filled_plot_data object. - !! @param[in] x An N-element array containing the x coordinate data. - !! @param[in] y An N-element array containing the y coordinate data. - !! @param[in] yc An N-element array containing the constraining curve y coordinate data. - !! @param[out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if @p x and @p y are not the - !! same size. - procedure, public :: define_data => fpd_define_data - end type - -! -------------------- - interface - module function fpd_get_axes_cmd(this) result(x) - class(filled_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - pure module function fpd_get_draw_against_y2(this) result(x) - class(filled_plot_data), intent(in) :: this - logical :: x - end function - - module subroutine fpd_set_draw_against_y2(this, x) - class(filled_plot_data), intent(inout) :: this - logical, intent(in) :: x - end subroutine - - module function fpd_get_cmd(this) result(x) - class(filled_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - module function fpd_get_data_cmd(this) result(x) - class(filled_plot_data), intent(in) :: this - character(len = :), allocatable :: x - end function - - module subroutine fpd_define_data(this, x, y, yc, err) - class(filled_plot_data), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, yc - class(errors), intent(inout), optional, target :: err - end subroutine - end interface - -! ****************************************************************************** -! FPLOT_SIMPLIFY.F90 -! ------------------------------------------------------------------------------ - !> @brief Simplifies a 2D or 3D polyline by removing points too close to - !! discern given a specified tolerance. - !! - !! @par Overload 1 - !! Simplifies a 2D polyline by removing points too close to discern given - !! a specified tolerance. - !! - !! @param[in] x An N-element array containing the x-coordinates of the vertices - !! making up the polyline. - !! @param[in] y An N-element array containing the y-coordinates of the vertices - !! making up the polyline. - !! @param[in] tol The distance tolerance to use when simplifying the polyline. - !! This value must be positive, and larger than machine epsilon. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input array sizes are not - !! compatible. - !! - PLOT_INVALID_INPUT_ERROR: Occurs if @p tol is not positive and greater - !! than machine epsilon. - !! - !! @return A matrix containing the simplified polyline vertices. The first - !! column of the matrix contains the x-coordinates, and the second column - !! contains the y-coordinates. - !! - !! @par Overload 2 - !! Simplifies a 3D polyline by removing points too close to discern - !! given a specified tolerance. - !! - !! @param[in] x An N-element array containing the x-coordinates of the vertices - !! making up the polyline. - !! @param[in] y An N-element array containing the y-coordinates of the vertices - !! making up the polyline. - !! @param[in] z An N-element array containing the z-coordinates of the vertices - !! making up the polyline. - !! @param[in] tol The distance tolerance to use when simplifying the polyline. - !! This value must be positive, and larger than machine epsilon. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input array sizes are not - !! compatible. - !! - PLOT_INVALID_INPUT_ERROR: Occurs if @p tol is not positive and greater - !! than machine epsilon. - !! - !! @return A matrix containing the simplified polyline vertices. The first - !! column of the matrix contains the x-coordinates, the second column - !! contains the y-coordinates, and the third column contains the z-coordinates. - !! - !! @par Overload 3 - !! Simplifies a 2D or 3D polyline by removing points too close to discern - !! given a specified tolerance. - !! - !! @param[in] xy An N-by-2 or N-by-3 matrix containing the polyline vertex data. - !! @param[in] tol The distance tolerance to use when simplifying the polyline. - !! This value must be positive, and larger than machine epsilon. - !! @param[in,out] err An optional errors-based object that if provided can be - !! used to retrieve information relating to any errors encountered during - !! execution. If not provided, a default implementation of the errors - !! class is used internally to provide error handling. Possible errors and - !! warning messages that may be encountered are as follows. - !! - PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available. - !! - PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input array sizes are not - !! compatible. - !! - PLOT_INVALID_INPUT_ERROR: Occurs if @p tol is not positive and greater - !! than machine epsilon. - !! - !! @return A matrix containing the simplified polyline vertices. The first - !! column of the matrix contains the x-coordinates, the second column - !! contains the y-coordinates, and if necessary, the third column contains - !! the z-coordinates. - interface simplify_polyline - module procedure :: simplify_polyline_2d1 - module procedure :: simplify_polyline_3d1 - module procedure :: simplify_polyline_mtx - end interface - - interface - module function simplify_polyline_2d1(x, y, tol, err) result(ln) - real(real64), intent(in), dimension(:) :: x, y - real(real64), intent(in) :: tol - class(errors), intent(inout), optional, target :: err - real(real64), allocatable, dimension(:,:) :: ln - end function - - module function simplify_polyline_3d1(x, y, z, tol, err) result(ln) - real(real64), intent(in), dimension(:) :: x, y, z - real(real64), intent(in) :: tol - class(errors), intent(inout), optional, target :: err - real(real64), allocatable, dimension(:,:) :: ln - end function - - module function simplify_polyline_mtx(xy, tol, err) result(ln) - real(real64), intent(in), dimension(:,:) :: xy - real(real64), intent(in) :: tol - class(errors), intent(inout), optional, target :: err - real(real64), allocatable, dimension(:,:) :: ln - end function - end interface - -! ------------------------------------------------------------------------------ end module diff --git a/src/fplot_core_routines.f90 b/src/fplot_core_routines.f90 index 74499be..e964c97 100644 --- a/src/fplot_core_routines.f90 +++ b/src/fplot_core_routines.f90 @@ -1,13 +1,25 @@ ! fplot_core_routines.f90 -submodule (fplot_core) fplot_core_routines +module fplot_core_routines + use iso_fortran_env + implicit none + private + public :: linspace + public :: logspace + public :: meshgrid + contains ! ------------------------------------------------------------------------------ - pure module function linspace(start, finish, npts) result(x) - ! Arguments - real(real64), intent(in) :: start, finish + pure function linspace(start, finish, npts) result(x) + !! Constructs a linearly spaced array. + real(real64), intent(in) :: start + !! The first value in the array. + real(real64), intent(in) :: finish + !! The last value in the array. integer(int32), intent(in) :: npts + !! The number of values in the array. real(real64), allocatable, dimension(:) :: x + !! The resulting array. ! Local Variables integer(int32) :: i @@ -23,11 +35,16 @@ pure module function linspace(start, finish, npts) result(x) end function ! ------------------------------------------------------------------------------ - pure module function logspace(start, finish, npts) result(x) - ! Arguments - real(real64), intent(in) :: start, finish + pure function logspace(start, finish, npts) result(x) + !! Construcst a logarithmically spaced array. + real(real64), intent(in) :: start + !! The exponent of the first value in the array. + real(real64), intent(in) :: finish + !! The exponent of the final value in the array. integer(int32), intent(in) :: npts + !! The number of values in the array. real(real64), allocatable, dimension(:) :: x + !! The resulting array. ! Local Variables integer(int32) :: i @@ -44,10 +61,15 @@ pure module function logspace(start, finish, npts) result(x) end function ! ------------------------------------------------------------------------------ - pure module function meshgrid(x, y) result(xy) - ! Arguments - real(real64), intent(in), dimension(:) :: x, y + pure function meshgrid(x, y) result(xy) + !! Constructs two matrices (X and Y) from x and y data arrays. + real(real64), intent(in), dimension(:) :: x + !! An M-element array of x data points. + real(real64), intent(in), dimension(:) :: y + !! An N-element array of y data points. real(real64), allocatable, dimension(:,:,:) :: xy + !! An N-by-M-by-2 array containing the x data matrix on the first + !! page of the array, and the y data matrix on the second page. ! Local Variables integer(int32) :: i, nx, ny @@ -64,4 +86,4 @@ pure module function meshgrid(x, y) result(xy) end do end function -end submodule +end module diff --git a/src/fplot_delaunay_tri_surface.f90 b/src/fplot_delaunay_tri_surface.f90 index c35fc29..68efc63 100644 --- a/src/fplot_delaunay_tri_surface.f90 +++ b/src/fplot_delaunay_tri_surface.f90 @@ -1,20 +1,46 @@ ! fplot_delaunay_tri_surface.f90 -submodule (fplot_core) fplot_delaunay_tri_surface +module fplot_delaunay_tri_surface + use iso_fortran_env use ieee_arithmetic + use fplot_triangulations_delaunay_2d + use fplot_errors + use ferror + implicit none + private + public :: delaunay_tri_surface + + type, extends(delaunay_tri_2d) :: delaunay_tri_surface + !! Provides a type describing a triangulated surface. + real(real64), private, allocatable, dimension(:) :: m_z + !! An array of the z-coordinates of each point. + contains + procedure, public :: define_function_values => dts_define_fcn + procedure, public :: get_points_z => dts_get_z + generic, public :: evaluate => dts_interp_1, dts_interp_2 + + procedure, private :: dts_interp_1 + procedure, private :: dts_interp_2 + end type + contains ! ------------------------------------------------------------------------------ - module subroutine dts_define_fcn(this, z, err) - ! Arguments + subroutine dts_define_fcn(this, z, err) + !! Defines the function values that correspond to the x and y + !! data points. class(delaunay_tri_surface), intent(inout) :: this + !! The delaunay_tri_surface object. real(real64), intent(in), dimension(:) :: z + !! An N-element array containing the function values for + !! each x and y coordinate. Notice, the x and y coordinates must + !! already be defined prior to calling this routine. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: n, flag class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg ! Initialization if (present(err)) then @@ -32,11 +58,8 @@ module subroutine dts_define_fcn(this, z, err) return end if if (size(z) /= n) then - write (errmsg, 100) "The number of function values " // & - "does not match the number of x-y points. Expected to find ", & - n, " function values, but found ", size(z), " instead." - call errmgr%report_error("dts_define_fcn", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "dts_define_fcn", & + "z", n, size(z)) return end if @@ -44,20 +67,19 @@ module subroutine dts_define_fcn(this, z, err) if (allocated(this%m_z)) deallocate(this%m_z) allocate(this%m_z(n), stat = flag) if (flag /= 0) then - call errmgr%report_error("dts_define_fcn", & - "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "dts_define_fcn", flag) return end if this%m_z = z - -100 format(A, I0, A, I0, A) end subroutine ! ------------------------------------------------------------------------------ - pure module function dts_get_z(this) result(rst) + pure function dts_get_z(this) result(rst) + !! Gets the z-coordinates of each point. class(delaunay_tri_surface), intent(in) :: this + !! The delaunay_tri_surface object. real(real64), allocatable, dimension(:) :: rst + !! An array of the z-coordinates of each point. if (allocated(this%m_z)) then rst = this%m_z else @@ -69,11 +91,18 @@ pure module function dts_get_z(this) result(rst) ! Interpolation Routine - Barycentric Coordinate Approach ! https://www.iue.tuwien.ac.at/phd/nentchev/node25.html ! https://academic.csuohio.edu/duffy_s/CVE_512_11.pdf - pure module function dts_interp_1(this, x, y) result(z) - ! Arguments + pure function dts_interp_1(this, x, y) result(z) + !! Evaluates the function at the requested point by means of + !! linear interpolation. class(delaunay_tri_surface), intent(in) :: this - real(real64), intent(in) :: x, y + !! The delaunay_tri_surface object. + real(real64), intent(in) :: x + !! The x-coordinate at which to evaluate the function. + real(real64), intent(in) :: y + !! The y-coordinate at which to evaluate the function. real(real64) :: z + !! The function value. If the point (x, y) does not lie within the + !! range of defined values, then a value of NaN is returned. ! Local Variables integer(int32) :: i, n1, n2, n3 @@ -120,11 +149,19 @@ pure module function dts_interp_1(this, x, y) result(z) end function ! -------------------- - pure module function dts_interp_2(this, x, y) result(z) - ! Arguments + pure function dts_interp_2(this, x, y) result(z) + !! Evaluates the function at the requested point by means of + !! linear interpolation. class(delaunay_tri_surface), intent(in) :: this - real(real64), intent(in), dimension(:) :: x, y + !! The delaunay_tri_surface object. + real(real64), intent(in), dimension(:) :: x + !! The x data coordinates. + real(real64), intent(in), dimension(:) :: y + !! The x data coordinates. real(real64), allocatable, dimension(:) :: z + !! The interpolated z coordinate points. If the point (x, y) does + !! not lie within the range of defined values, then a value of NaN + !! is returned. ! Local Variables integer(int32) :: i, j, n1, n2, n3, nxy @@ -195,4 +232,4 @@ pure elemental function linear_interp(x1, y1, z1, x2, y2, z2, x3, & end function ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_errors.f90 b/src/fplot_errors.f90 new file mode 100644 index 0000000..39fb79e --- /dev/null +++ b/src/fplot_errors.f90 @@ -0,0 +1,125 @@ +module fplot_errors + use iso_fortran_env + use ferror + implicit none + +! ****************************************************************************** +! ERROR CODES +! ------------------------------------------------------------------------------ + integer(int32), parameter :: PLOT_OUT_OF_MEMORY_ERROR = 1000 + !! Occurs if there is insufficient memory available for the + !! requested operation. + integer(int32), parameter :: PLOT_INVALID_INPUT_ERROR = 1001 + !! Occurs if an invalid input is provided. + integer(int32), parameter :: PLOT_INVALID_OPERATION_ERROR = 1002 + !! Occurs if an attempt is made to perform an invalid operation. + integer(int32), parameter :: PLOT_ARRAY_SIZE_MISMATCH_ERROR = 1003 + !! Occurs if there is an array size mismatch error. + integer(int32), parameter :: PLOT_GNUPLOT_FILE_ERROR = 1004 + !! Occurs if there is a GNUPLOT file error. + +contains +! ------------------------------------------------------------------------------ +subroutine report_memory_error(err, fcn, flag) + !! Reports a memory allocation error. + class(errors), intent(inout) :: err + !! The error handling object. + character(len = *), intent(in) :: fcn + !! The name of the function or subroutine in which the error occurred. + integer(int32), intent(in) :: flag + !! The error flag returned by the system. + + ! Local Variables + character(len = 256) :: msg + + ! Define the error message + write(100, msg) "Memory allocation error returning flag ", flag, "." + call err%report_error(fcn, trim(msg), PLOT_OUT_OF_MEMORY_ERROR) + + ! Formatting +100 format(A, I0, A) +end subroutine + +! ------------------------------------------------------------------------------ +subroutine report_file_create_error(err, fcn, fname, flag) + !! Reports an I/O error related to file creating. + class(errors), intent(inout) :: err + !! The error handling object. + character(len = *), intent(in) :: fcn + !! The name of the function or subroutine in which the error occurred. + character(len = *), intent(in) :: fname + !! The filename. + integer(int32), intent(in) :: flag + !! The error flag returned by the system. + + ! Local Variables + character(len = 2048) :: msg + + ! Define the error message + write(100, msg) "File ", fname, " could not be created. The error flag ", & + flag, " was returned." + call err%report_error(fcn, trim(msg), PLOT_GNUPLOT_FILE_ERROR) + + ! Formatting +100 format(A, A, A, I0, A) +end subroutine + +! ------------------------------------------------------------------------------ +subroutine report_array_size_mismatch_error(err, fcn, name, expected, actual) + !! Reports an array size mismatch error. + class(errors), intent(inout) :: err + !! The error handling object. + character(len = *), intent(in) :: fcn + !! The name of the function or subroutine in which the error occurred. + character(len = *), intent(in) :: name + !! The variable name. + integer(int32), intent(in) :: expected + !! The expected array size. + integer(int32), intent(in) :: actual + !! The actual array size. + + ! Local Variables + character(len = 256) :: msg + + ! Define the message + write(100, msg) "Array ", name, " was found to be of length ", actual, & + ", but was expected to be of length ", expected, "." + call err%report_error(fcn, trim(msg), PLOT_ARRAY_SIZE_MISMATCH_ERROR) + + ! Formatting +100 format(A, A, A, I0, A, I0, A) +end subroutine + +! ------------------------------------------------------------------------------ +subroutine report_matrix_size_mismatch_error(err, fcn, name, mexp, nexp, & + mact, nact) + !! Reports a matrix size mismatch error. + class(errors), intent(inout) :: err + !! The error handling object. + character(len = *), intent(in) :: fcn + !! The name of the function or subroutine in which the error occurred. + character(len = *), intent(in) :: name + !! The variable name. + integer(int32), intent(in) :: mexp + !! The expected number of rows. + integer(int32), intent(in) :: nexp + !! The expected number of columns. + integer(int32), intent(in) :: mact + !! The actual number of rows. + integer(int32), intent(in) :: nact + !! The actual number of columns. + + ! Local Variables + character(len = 256) :: msg + + ! Define the error + write(100, msg) "Matrix ", name, " was expected to be of size ", mexp, & + "-by-", nexp, ", but was found to be of size ", mact, "-by-", nact, "." + call err%report_error(fcn, trim(msg), PLOT_ARRAY_SIZE_MISMATCH_ERROR) + + ! Formatting +100 format(A, A, A, I0, A, I0, A, I0, A, I0, A) +end subroutine + +! ------------------------------------------------------------------------------ +end module \ No newline at end of file diff --git a/src/fplot_filled_plot_data.f90 b/src/fplot_filled_plot_data.f90 index ea8e502..165adb3 100644 --- a/src/fplot_filled_plot_data.f90 +++ b/src/fplot_filled_plot_data.f90 @@ -1,12 +1,40 @@ ! fplot_filled_plot_data.f90 -submodule (fplot_core) fplot_filled_plot_data +module fplot_filled_plot_data + use iso_fortran_env + use fplot_plot_data + use fplot_errors + use fplot_colors + use ferror + use strings + implicit none + private + public :: filled_plot_data + + type, extends(plot_data_colored) :: filled_plot_data + !! Defines a two-dimensional filled plot data set. + logical, private :: m_useY2 = .false. + !! Plot against the secondary y-axis. + real(real64), private, allocatable, dimension(:,:) :: m_data + !! The data set (column 1 = x, column 2 = y, column 3 = constraint y) + contains + procedure, public :: get_axes_string => fpd_get_axes_cmd + procedure, public :: get_draw_against_y2 => fpd_get_draw_against_y2 + procedure, public :: set_draw_against_y2 => fpd_set_draw_against_y2 + procedure, public :: get_command_string => fpd_get_cmd + procedure, public :: get_data_string => fpd_get_data_cmd + procedure, public :: define_data => fpd_define_data + end type + contains ! ------------------------------------------------------------------------------ - module function fpd_get_axes_cmd(this) result(x) - ! Arguments + function fpd_get_axes_cmd(this) result(x) + !! Gets the GNUPLOT command string defining which axes the data + !! is to be plotted against. class(filled_plot_data), intent(in) :: this + !! The filled_plot_data object. character(len = :), allocatable :: x + !! The command string. ! Define which axes the data is to be plotted against if (this%get_draw_against_y2()) then @@ -17,24 +45,37 @@ module function fpd_get_axes_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - pure module function fpd_get_draw_against_y2(this) result(x) + pure function fpd_get_draw_against_y2(this) result(x) + !! Gets a value determining if the data should be plotted against + !! the secondary y-axis. class(filled_plot_data), intent(in) :: this + !! The filled_plot_data object. logical :: x + !! Returns true if the data should be plotted against the secondary + !! y-axis; else, false to plot against the primary y-axis. x = this%m_useY2 end function ! -------------------- - module subroutine fpd_set_draw_against_y2(this, x) + subroutine fpd_set_draw_against_y2(this, x) + !! Sets a value determining if the data should be plotted against + !! the secondary y-axis. class(filled_plot_data), intent(inout) :: this + !! The filled_plot_data object. logical, intent(in) :: x + !! Set to true if the data should be plotted against the secondary + !! y-axis; else, false to plot against the primary y-axis. this%m_useY2 = x end subroutine ! ------------------------------------------------------------------------------ - module function fpd_get_cmd(this) result(x) - ! Arguments + function fpd_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this + !! filled_plot_data object. class(filled_plot_data), intent(in) :: this + !! The filled_plot_data object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -72,10 +113,12 @@ module function fpd_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module function fpd_get_data_cmd(this) result(x) - ! Arguments + function fpd_get_data_cmd(this) result(x) + !! Gets the GNUPLOT command string containing the actual data to plot. class(filled_plot_data), intent(in) :: this + !! The filled_plot_data object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -102,16 +145,23 @@ module function fpd_get_data_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module subroutine fpd_define_data(this, x, y, yc, err) - ! Arguments + subroutine fpd_define_data(this, x, y, yc, err) + !! Defines the data set. class(filled_plot_data), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, yc + !! The filled_plot_data object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinate data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinate data. + real(real64), intent(in), dimension(:) :: yc + !! An N-element array containing the constraining curve y + !! coordinate data. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables type(errors), target :: deferr class(errors), pointer :: errmgr - character(len = 256) :: errmsg integer(int32) :: i, n, flag ! Set up error handling @@ -124,17 +174,13 @@ module subroutine fpd_define_data(this, x, y, yc, err) ! Input Checking n = size(x) if (size(y) /= n) then - write(errmsg, 100) "Expected the y array to have ", n, & - " elements, but found an array with ", size(y), " elements." - call errmgr%report_error("fpd_define_data", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "fpd_define_data", & + "y", n, size(y)) return end if if (size(yc) /= n) then - write(errmsg, 100) "Expected the yc array to have ", n, & - " elements, but found an array with ", size(yc), " elements." - call errmgr%report_error("fpd_define_data", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "fpd_define_data", & + "yc", n, size(yc)) return end if @@ -142,9 +188,7 @@ module subroutine fpd_define_data(this, x, y, yc, err) if (allocated(this%m_data)) deallocate(this%m_data) allocate(this%m_data(n, 3), stat = flag) if (flag /= 0) then - call errmgr%report_error("fpd_define_data", & - "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "fpd_define_data", flag) return end if @@ -154,9 +198,7 @@ module subroutine fpd_define_data(this, x, y, yc, err) this%m_data(i,2) = y(i) this%m_data(i,3) = yc(i) end do - -100 format(A, I0, A, I0, A) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_label.f90 b/src/fplot_label.f90 index 9f7c40c..82c1d4b 100644 --- a/src/fplot_label.f90 +++ b/src/fplot_label.f90 @@ -1,12 +1,43 @@ ! fplot_label.f90 -submodule (fplot_core) fplot_label +module fplot_label + use iso_fortran_env + use fplot_plot_object + use fplot_constants + use strings + implicit none + private + public :: plot_label + + type, extends(plot_object) :: plot_label + !! Defines a plot label. + logical, private :: m_visible = .true. + !! Is the label visible? + real(real32), private, dimension(3) :: m_position + !! The x, y, and z coordinates of the label. + real(real32), private :: m_angle = 0.0 + !! The rotation angle of the label. + character(len = PLOTDATA_MAX_NAME_LENGTH), private :: m_text + !! The label text. + contains + procedure, public :: get_command_string => lbl_get_cmd + procedure, public :: get_is_visible => lbl_get_is_visible + procedure, public :: set_is_visible => lbl_set_is_visible + procedure, public :: get_position => lbl_get_position + procedure, public :: set_position => lbl_set_position + procedure, public :: get_angle => lbl_get_angle + procedure, public :: set_angle => lbl_set_angle + procedure, public :: get_text => lbl_get_txt + procedure, public :: set_text => lbl_set_txt + end type contains ! ------------------------------------------------------------------------------ - module function lbl_get_cmd(this) result(x) - ! Arguments + function lbl_get_cmd(this) result(x) + !! Gets the GNUPLOT command string for the label. class(plot_label), intent(in) :: this + !! The plot_label object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -37,58 +68,84 @@ module function lbl_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - pure module function lbl_get_is_visible(this) result(x) + pure function lbl_get_is_visible(this) result(x) + !! Gets a value determining if the label is to be drawn. class(plot_label), intent(in) :: this + !! The plot_label object. logical :: x + !! Returns true if the label is to be drawn; else, false. x = this%m_visible end function ! -------------------- - module subroutine lbl_set_is_visible(this, x) + subroutine lbl_set_is_visible(this, x) + !! Sets a value determining if the label is to be drawn. class(plot_label), intent(inout) :: this + !! The plot_label object. logical, intent(in) :: x + !! Set to true if the label is to be drawn; else, false. this%m_visible = x end subroutine ! ------------------------------------------------------------------------------ - pure module function lbl_get_position(this) result(x) + pure function lbl_get_position(this) result(x) + !! Gets the position of the label in terms of plot coordinates. class(plot_label), intent(in) :: this + !! The plot_label object. real(real32), dimension(3) :: x + !! A 3-element array containing the X, Y, and Z position of the + !! label. x = this%m_position end function ! -------------------- - module subroutine lbl_set_position(this, x) + subroutine lbl_set_position(this, x) + !! Sets the position of the label in terms of plot coordinates. class(plot_label), intent(inout) :: this + !! The plot_label object. real(real32), intent(in), dimension(3) :: x + !! A 3-element array containing the X, Y, and Z position of the + !! label. this%m_position = x end subroutine ! ------------------------------------------------------------------------------ - pure module function lbl_get_angle(this) result(x) + pure function lbl_get_angle(this) result(x) + !! Gets the angle of the label text, in degrees. class(plot_label), intent(in) :: this + !! The plot_label object. real(real32) :: x + !! The angle, in degrees. x = this%m_angle end function ! -------------------- - module subroutine lbl_set_angle(this, x) + subroutine lbl_set_angle(this, x) + !! Sets the angle of the label text, in degrees. class(plot_label), intent(inout) :: this + !! The plot_label object. real(real32), intent(in) :: x + !! The angle, in degrees. this%m_angle = x end subroutine ! ------------------------------------------------------------------------------ - module function lbl_get_txt(this) result(x) + function lbl_get_txt(this) result(x) + !! Gets the text displayed by the label. class(plot_label), intent(in) :: this + !! The plot_label object. character(len = :), allocatable :: x + !! The text string to display. x = trim(this%m_text) end function ! -------------------- - module subroutine lbl_set_txt(this, x) + subroutine lbl_set_txt(this, x) + !! Sets the text displayed by the label. class(plot_label), intent(inout) :: this + !! The plot_label object. character(len = *), intent(in) :: x + !! The text string to display. integer(int32) :: n n = min(len(x), PLOTDATA_MAX_NAME_LENGTH) this%m_text = "" @@ -98,14 +155,14 @@ module subroutine lbl_set_txt(this, x) ! ****************************************************************************** ! ADDED: JAN. 09, 2024 - JAC ! ------------------------------------------------------------------------------ - pure module subroutine lbl_assign(x, y) - type(plot_label), intent(out) :: x - class(plot_label), intent(in) :: y - x%m_visible = y%m_visible - x%m_position = y%m_position - x%m_angle = y%m_angle - x%m_text = y%m_text - end subroutine + ! pure subroutine lbl_assign(x, y) + ! type(plot_label), intent(out) :: x + ! class(plot_label), intent(in) :: y + ! x%m_visible = y%m_visible + ! x%m_position = y%m_position + ! x%m_angle = y%m_angle + ! x%m_text = y%m_text + ! end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_latex_terminal.f90 b/src/fplot_latex_terminal.f90 index 6db9099..c3ada37 100644 --- a/src/fplot_latex_terminal.f90 +++ b/src/fplot_latex_terminal.f90 @@ -1,11 +1,35 @@ ! fplot_latex_terminal.f90 -submodule (fplot_core) fplot_latex_terminal +module fplot_latex_terminal + use iso_fortran_env + use fplot_terminal + use fplot_constants + use strings + implicit none + private + public :: latex_terminal + + type, extends(terminal) :: latex_terminal + !! A LATEX terminal. + character(len = 14), private :: m_id = "epslatex color" + !! The terminal ID string + character(len = GNUPLOT_MAX_PATH_LENGTH), private :: m_fname = "default.tex" + !! The filename of the file to write. + contains + procedure, public :: get_filename => tex_get_filename + procedure, public :: set_filename => tex_set_filename + procedure, public :: get_id_string => tex_get_term_string + procedure, public :: get_command_string => tex_get_command_string + end type + contains ! ------------------------------------------------------------------------------ - module function tex_get_term_string(this) result(x) + function tex_get_term_string(this) result(x) + !! Retrieves a GNUPLOT terminal identifier string. class(latex_terminal), intent(in) :: this + !! The latex_terminal object. character(len = :), allocatable :: x + !! The string. integer(int32) :: n n = len_trim(this%m_id) allocate(character(len = n) :: x) @@ -13,9 +37,12 @@ module function tex_get_term_string(this) result(x) end function ! ------------------------------------------------------------------------------ - module function tex_get_filename(this) result(txt) + function tex_get_filename(this) result(txt) + !! Gets the filename for the output LATEX file. class(latex_terminal), intent(in) :: this + !! The latex_terminal object. character(len = :), allocatable :: txt + !! The filename, including the file extension (.tex). integer(int32) :: n n = len_trim(this%m_fname) allocate(character(len = n) :: txt) @@ -23,9 +50,12 @@ module function tex_get_filename(this) result(txt) end function ! -------------------- - module subroutine tex_set_filename(this, txt) + subroutine tex_set_filename(this, txt) + !! Sets the filename for the output LATEX file. class(latex_terminal), intent(inout) :: this + !! The latex_terminal object. character(len = *), intent(in) :: txt + !! The filename, including the file extension (.tex). integer(int32) :: n n = min(len_trim(txt), GNUPLOT_MAX_PATH_LENGTH) this%m_fname = "" @@ -37,10 +67,13 @@ module subroutine tex_set_filename(this, txt) end subroutine ! ------------------------------------------------------------------------------ - module function tex_get_command_string(this) result(x) - ! Arguments + function tex_get_command_string(this) result(x) + !! Returns the appropriate GNUPLOT command string to establish + !! appropriate parameters. class(latex_terminal), intent(in) :: this + !! The latex_terminal object. character(len = :), allocatable :: x + !! The GNUPLOT command string. ! Local Variables type(string_builder) :: str @@ -66,4 +99,4 @@ module function tex_get_command_string(this) result(x) x = char(str%to_string()) end function -end submodule +end module diff --git a/src/fplot_legend.f90 b/src/fplot_legend.f90 index 21b777f..bcc84b3 100644 --- a/src/fplot_legend.f90 +++ b/src/fplot_legend.f90 @@ -1,39 +1,99 @@ ! fplot_legend.f90 -submodule (fplot_core) fplot_legend +module fplot_legend + use iso_fortran_env + use fplot_plot_object + use fplot_constants + use strings + implicit none + private + public :: legend + + type, extends(plot_object) :: legend + !! Defines a legend object. + logical, private :: m_inside = .true. + !! Inside or outside the axes? + logical, private :: m_box = .true. + !! Box around? + character(len = 20), private :: m_horzPosition = LEGEND_RIGHT + !! Horizontal position. + character(len = 20), private :: m_vertPosition = LEGEND_TOP + !! Verical position. + logical, private :: m_show = .false. + !! Is visible? + character(len = 20), private :: m_layout = LEGEND_ARRANGE_VERTICALLY + !! Determines the legend layout. + logical, private :: m_opaque = .true. + !! Opaque background? + contains + procedure, public :: get_draw_inside_axes => leg_get_inside + procedure, public :: set_draw_inside_axes => leg_set_inside + procedure, public :: get_draw_border => leg_get_box + procedure, public :: set_draw_border => leg_set_box + procedure, public :: get_horizontal_position => leg_get_horz_pos + procedure, public :: set_horizontal_position => leg_set_horz_pos + procedure, public :: get_vertical_position => leg_get_vert_pos + procedure, public :: set_vertical_position => leg_set_vert_pos + procedure, public :: get_is_visible => leg_get_visible + procedure, public :: set_is_visible => leg_set_visible + procedure, public :: get_command_string => leg_get_command_txt + procedure, public :: get_layout => leg_get_layout + procedure, public :: set_layout => leg_set_layout + procedure, public :: get_is_opaque => leg_get_opaque + procedure, public :: set_is_opaque => leg_set_opaque + end type + contains ! ------------------------------------------------------------------------------ - pure module function leg_get_inside(this) result(x) + pure function leg_get_inside(this) result(x) + !! Gets a value determining if the legend should be drawn inside + !! or outside the axes border. class(legend), intent(in) :: this + !! The legend object. logical :: x + !! True to draw inside the axes border; else, false for outside. x = this%m_inside end function ! --------------------- - module subroutine leg_set_inside(this, x) + subroutine leg_set_inside(this, x) + !! Sets a value determining if the legend should be drawn inside + !! or outside the axes border. class(legend), intent(inout) :: this + !! The legend object. logical, intent(in) :: x + !! True to draw inside the axes border; else, false for outside. this%m_inside = x end subroutine ! ------------------------------------------------------------------------------ - pure module function leg_get_box(this) result(x) + pure function leg_get_box(this) result(x) + !! Gets a value determining if the legend should have a border. class(legend), intent(in) :: this + !! The legend object. logical :: x + !! True if the legend should have a border; else, false. x = this%m_box end function ! --------------------- - module subroutine leg_set_box(this, x) + subroutine leg_set_box(this, x) + !! Sets a value determining if the legend should have a border. class(legend), intent(inout) :: this + !! The legend object. logical, intent(in) :: x + !! True if the legend should have a border; else, false. this%m_box = x end subroutine ! ------------------------------------------------------------------------------ - module function leg_get_horz_pos(this) result(x) + pure function leg_get_horz_pos(this) result(x) + !! Gets the horizontal position of the legend. class(legend), intent(in) :: this + !! The legend object. character(len = :), allocatable :: x + !! The horizontal position of the legend (LEGEND_LEFT, + !! LEGEND_CENTER, or LEGEND_RIGHT). integer(int32) :: n n = len_trim(this%m_horzPosition) allocate(character(len = n) :: x) @@ -41,18 +101,27 @@ module function leg_get_horz_pos(this) result(x) end function ! --------------------- - module subroutine leg_set_horz_pos(this, x) + subroutine leg_set_horz_pos(this, x) + !! Sets the horizontal position of the legend. class(legend), intent(inout) :: this + !! The legend object. character(len = *), intent(in) :: x + !! The horizontal position of the legend. The parameter must be + !! set to one of the following: LEGEND_LEFT, LEGEND_CENTER, or + !! LEGEND_RIGHT. If not, the default LEGEND_RIGHT will be used. this%m_horzPosition = x if (x /= LEGEND_LEFT .and. x /= LEGEND_RIGHT .and. x /= LEGEND_CENTER) & this%m_horzPosition = LEGEND_RIGHT end subroutine ! ------------------------------------------------------------------------------ - module function leg_get_vert_pos(this) result(x) + pure function leg_get_vert_pos(this) result(x) + !! Gets the vertical position of the legend. class(legend), intent(in) :: this + !! The legend object. character(len = :), allocatable :: x + !! The vertical position of the legend (LEGEND_TOP, + !! LEGEND_CENTER, or LEGEND_BOTTOM). integer(int32) :: n n = len_trim(this%m_vertPosition) allocate(character(len = n) :: x) @@ -60,33 +129,46 @@ module function leg_get_vert_pos(this) result(x) end function ! --------------------- - module subroutine leg_set_vert_pos(this, x) + subroutine leg_set_vert_pos(this, x) + !! Sets the vertical position of the legend. class(legend), intent(inout) :: this + !! The legend object. character(len = *), intent(in) :: x + !! The vertical position of the legend. The parameter must be + !! set to one of the following: LEGEND_TOP, LEGEND_CENTER, or + !! LEGEND_BOTTOM. If not, the default LEGEND_TOP will be used. this%m_vertPosition = x if (x /= LEGEND_TOP .and. x /= LEGEND_CENTER .and. x /= LEGEND_BOTTOM) & this%m_vertPosition = LEGEND_TOP end subroutine ! ------------------------------------------------------------------------------ - pure module function leg_get_visible(this) result(x) + pure function leg_get_visible(this) result(x) + !! Gets a value determining if the legend is visible. class(legend), intent(in) :: this + !! The legend object. logical :: x + !! True if the legend is visible; else, false. x = this%m_show end function ! --------------------- - module subroutine leg_set_visible(this, x) + subroutine leg_set_visible(this, x) + !! Sets a value determining if the legend is visible. class(legend), intent(inout) :: this + !! The legend object. logical, intent(in) :: x + !! True if the legend is visible; else, false. this%m_show = x end subroutine ! ------------------------------------------------------------------------------ - module function leg_get_command_txt(this) result(txt) - ! Arguments + function leg_get_command_txt(this) result(txt) + !! Gets the command string defining the legend properties. class(legend), intent(in) :: this + !! The legend object. character(len = :), allocatable :: txt + !! The GNUPLOT command string. ! Local Variables type(string_builder) :: str @@ -139,16 +221,24 @@ module function leg_get_command_txt(this) result(txt) end function ! ------------------------------------------------------------------------------ - pure module function leg_get_layout(this) result(rst) + pure function leg_get_layout(this) result(rst) + !! Gets the layout of the legend. class(legend), intent(in) :: this + !! The legend object. character(len = :), allocatable :: rst + !! The layout type, either LEGEND_ARRANGE_VERTICALLY or + !! LEGEND_ARRANGE_HORIZONTALLY. rst = trim(this%m_layout) end function ! --------------------- - module subroutine leg_set_layout(this, x) + subroutine leg_set_layout(this, x) + !! Sets the layout of the legend. class(legend), intent(inout) :: this + !! The legend object. character(len = *), intent(in) :: x + !! The layout type, either LEGEND_ARRANGE_VERTICALLY or + !! LEGEND_ARRANGE_HORIZONTALLY. if (x == LEGEND_ARRANGE_HORIZONTALLY .or. & x == LEGEND_ARRANGE_VERTICALLY) & then @@ -157,18 +247,24 @@ module subroutine leg_set_layout(this, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function leg_get_opaque(this) result(rst) + pure function leg_get_opaque(this) result(rst) + !! Gets a value determining if the legend is to be opaque. class(legend), intent(in) :: this + !! The legend object. logical :: rst + !! True if the legend is to be opaque; else, false. rst = this%m_opaque end function ! --------------------- - module subroutine leg_set_opaque(this, x) + subroutine leg_set_opaque(this, x) + !! Sets a value determining if the legend is to be opaque. class(legend), intent(inout) :: this + !! The legend object. logical :: x + !! True if the legend is to be opaque; else, false. this%m_opaque = x end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_multiplot.f90 b/src/fplot_multiplot.f90 index f3237db..db0b2d5 100644 --- a/src/fplot_multiplot.f90 +++ b/src/fplot_multiplot.f90 @@ -1,12 +1,67 @@ ! fplot_multiplot.f90 -submodule (fplot_core) fplot_multiplot +module fplot_multiplot + use iso_fortran_env + use fplot_plot_object + use fplot_plot + use fplot_terminal + use fplot_windows_terminal + use fplot_qt_terminal + use fplot_wxt_terminal + use fplot_png_terminal + use fplot_latex_terminal + use fplot_constants + use fplot_errors + use collections + use ferror + use strings + implicit none + private + public :: multiplot + + type, extends(plot_object) :: multiplot + !! Defines a multi-plot layout. + type(list), private :: m_plots + !! The collection of plot objects. + integer(int32), private :: m_rows = 0 + !! The number of rows of plots. + integer(int32), private :: m_cols = 0 + !! The number of columns of plots. + character(len = PLOTDATA_MAX_NAME_LENGTH), private :: m_title + !! The page title. + logical, private :: m_hasTitle = .false. + !! Has a title? + class(terminal), pointer :: m_terminal => null() + !! The GNUPLOT terminal object to target. + contains + final :: mp_clean + procedure, public :: get_command_string => mp_get_command + procedure, public :: initialize => mp_init + procedure, public :: get_row_count => mp_get_rows + procedure, public :: get_column_count => mp_get_cols + procedure, public :: get_plot_count => mp_get_count + procedure, public :: get_title => mp_get_title + procedure, public :: set_title => mp_set_title + procedure, public :: draw => mp_draw + procedure, public :: get => mp_get + procedure, public :: set => mp_set + procedure, public :: is_title_defined => mp_has_title + procedure, public :: get_terminal => mp_get_term + procedure, public :: save_file => mp_save + procedure, public :: get_font_name => mp_get_font + procedure, public :: set_font_name => mp_set_font + procedure, public :: get_font_size => mp_get_font_size + procedure, public :: set_font_size => mp_set_font_size + end type + contains ! ------------------------------------------------------------------------------ - module function mp_get_command(this) result(x) - ! Arguments + function mp_get_command(this) result(x) + !! Gets the GNUPLOT commands for this object. class(multiplot), intent(in) :: this + !! The multiplot object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -50,12 +105,29 @@ module function mp_get_command(this) result(x) end function ! ------------------------------------------------------------------------------ - module subroutine mp_init(this, m, n, term, err) - ! Arguments + subroutine mp_init(this, m, n, term, err) + !! Initializes the multiplot object. class(multiplot), intent(inout) :: this - integer(int32), intent(in) :: m, n + !! The multiplot object. + integer(int32), intent(in) :: m + !! The number of rows of plots. + integer(int32), intent(in) :: n + !! The number of columns of plots. integer(int32), intent(in), optional :: term + !! An optional input that is used to define the terminal. The + !! default terminal is a WXT terminal. The acceptable inputs are: + !! + !! - GNUPLOT_TERMINAL_PNG + !! + !! - GNUPLOT_TERMINAL_QT + !! + !! - GNUPLOT_TERMINAL_WIN32 + !! + !! - GNUPLOT_TERMINAL_WXT + !! + !! - GNUPLOT_TERMINAL_LATEX class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: flag, t, i @@ -114,52 +186,67 @@ module subroutine mp_init(this, m, n, term, err) ! Error Checking if (flag /= 0) then - call errmgr%report_error("mp_init", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "mp_init", flag) return end if end subroutine ! ------------------------------------------------------------------------------ - module subroutine mp_clean(this) + subroutine mp_clean(this) + !! Cleans up resources held by the multiplot object. type(multiplot), intent(inout) :: this + !! The multiplot object. if (associated(this%m_terminal)) deallocate(this%m_terminal) nullify(this%m_terminal) end subroutine ! ------------------------------------------------------------------------------ - pure module function mp_get_rows(this) result(x) + pure function mp_get_rows(this) result(x) + !! Gets the number of rows of plots. class(multiplot), intent(in) :: this + !! The multiplot object. integer(int32) :: x + !! The row count. x = this%m_rows end function ! -------------------- - pure module function mp_get_cols(this) result(x) + pure function mp_get_cols(this) result(x) + !! Gets the number of columns of plots. class(multiplot), intent(in) :: this + !! The multiplot object. integer(int32) :: x + !! The column count. x = this%m_cols end function ! -------------------- - pure module function mp_get_count(this) result(x) + pure function mp_get_count(this) result(x) + !! Gets the total number of plots. class(multiplot), intent(in) :: this + !! The multiplot object. integer(int32) :: x + !! The plot count. x = this%m_plots%count() end function ! ------------------------------------------------------------------------------ - module function mp_get_title(this) result(x) + function mp_get_title(this) result(x) + !! Gets the multiplot's title. class(multiplot), intent(in) :: this + !! The multiplot object. character(len = :), allocatable :: x + !! The title. x = this%m_title end function ! -------------------- - module subroutine mp_set_title(this, x) - ! Arguments + subroutine mp_set_title(this, x) + !! Sets the multiplot's title. class(multiplot), intent(inout) :: this + !! The multiplot object. character(len = *), intent(in) :: x + !! The title. ! Local Variables integer(int32) :: n @@ -176,11 +263,17 @@ module subroutine mp_set_title(this, x) end subroutine ! ------------------------------------------------------------------------------ - module subroutine mp_draw(this, persist, err) - ! Arguments + subroutine mp_draw(this, persist, err) + !! Launches GNUPLOT and draws the multiplot per the current state of + !! the command list. class(multiplot), intent(in) :: this + !! The multiplot object. logical, intent(in), optional :: persist + !! An optional parameter that can be used to keep GNUPLOT open. + !! Set to true to force GNUPLOT to remain open; else, set to false + !! to allow GNUPLOT to close after drawing. The default is true. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Parameters character(len = *), parameter :: fname = "temp_gnuplot_file.plt" @@ -209,11 +302,7 @@ module subroutine mp_draw(this, persist, err) ! Open the file for writing, and write the contents to file open(newunit = fid, file = fname, iostat = flag) if (flag > 0) then - write(errmsg, 100) & - "The file could not be opened/created. Error code ", flag, & - " was encountered." - call errmgr%report_error("mp_draw", trim(errmsg), & - PLOT_GNUPLOT_FILE_ERROR) + call report_file_create_error(errmgr, "mp_draw", fname, flag) return end if write(fid, '(A)') term%get_command_string() @@ -236,11 +325,16 @@ module subroutine mp_draw(this, persist, err) end subroutine ! ------------------------------------------------------------------------------ - module function mp_get(this, i, j) result(x) - ! Arguments + function mp_get(this, i, j) result(x) + !! Gets the requested plot object. class(multiplot), intent(in) :: this - integer(int32), intent(in) :: i, j + !! The multiplot object. + integer(int32), intent(in) :: i + !! The row index of the plot to retrieve. + integer(int32), intent(in) :: j + !! The column index of the plot to retrieve. class(plot), pointer :: x + !! A pointer to the plot object. ! Local Variables class(*), pointer :: item @@ -258,11 +352,16 @@ module function mp_get(this, i, j) result(x) end function ! -------------------- - module subroutine mp_set(this, i, j, x) - ! Arguments + subroutine mp_set(this, i, j, x) + !! Replaces the specified plot. class(multiplot), intent(inout) :: this - integer(int32), intent(in) :: i, j + !! The multiplot object. + integer(int32), intent(in) :: i + !! The row index of the plot to replace. + integer(int32), intent(in) :: j + !! The column index of the plot to replace. class(plot), intent(in) :: x + !! The new plot. ! Local Variables integer(int32) :: ind @@ -273,31 +372,41 @@ module subroutine mp_set(this, i, j, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function mp_has_title(this) result(x) + pure function mp_has_title(this) result(x) + !! Gets a value determining if a title has been defined for the + !! multiplot object. class(multiplot), intent(in) :: this + !! The multiplot object. logical :: x + !! Returns true if a title has been defined for this multiplot; + !! else, returns false. x = this%m_hasTitle end function ! ------------------------------------------------------------------------------ - module function mp_get_term(this) result(x) + function mp_get_term(this) result(x) + !! Gets the GNUPLOT terminal object. class(multiplot), intent(in) :: this + !! The multiplot object. class(terminal), pointer :: x + !! A pointer to the terminal object. x => this%m_terminal end function ! ------------------------------------------------------------------------------ - module subroutine mp_save(this, fname, err) - ! Arguments + subroutine mp_save(this, fname, err) + !! Saves a GNUPLOT command file. class(multiplot), intent(in) :: this + !! The multiplot object. character(len = *), intent(in) :: fname + !! The filename. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: fid, flag class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg class(terminal), pointer :: term ! Initialization @@ -311,56 +420,62 @@ module subroutine mp_save(this, fname, err) ! Open the file for writing, and write the contents to file open(newunit = fid, file = fname, iostat = flag) if (flag > 0) then - write(errmsg, 100) & - "The file could not be opened/created. Error code ", flag, & - " was encountered." - call errmgr%report_error("mp_save", trim(errmsg), & - PLOT_GNUPLOT_FILE_ERROR) + call report_file_create_error(errmgr, "mp_save", fname, flag) return end if write(fid, '(A)') term%get_command_string() write(fid, '(A)') new_line('a') write(fid, '(A)') this%get_command_string() close(fid) - -100 format(A, I0, A) end subroutine ! ------------------------------------------------------------------------------ - module function mp_get_font(this) result(x) + function mp_get_font(this) result(x) + !! Gets the name of the font used for plot text. class(multiplot), intent(in) :: this + !! The multiplot object. character(len = :), allocatable :: x + !! The font name. class(terminal), pointer :: term term => this%get_terminal() x = term%get_font_name() end function ! -------------------- - module subroutine mp_set_font(this, x) + subroutine mp_set_font(this, x) + !! Sets the name of the font used for plot text. class(multiplot), intent(inout) :: this + !! The multiplot object. character(len = *), intent(in) :: x + !! The font name. class(terminal), pointer :: term term => this%get_terminal() call term%set_font_name(x) end subroutine ! ------------------------------------------------------------------------------ - module function mp_get_font_size(this) result(x) + function mp_get_font_size(this) result(x) + !! Gets the size of the font used by the plot. class(multiplot), intent(in) :: this + !! The multiplot object. integer(int32) :: x + !! The font size. class(terminal), pointer :: term term => this%get_terminal() x = term%get_font_size() end function ! -------------------- - module subroutine mp_set_font_size(this, x) + subroutine mp_set_font_size(this, x) + !! Sets the size of the font used by the plot. class(multiplot), intent(inout) :: this + !! The multiplot object. integer(int32), intent(in) :: x + !! The font size. class(terminal), pointer :: term term => this%get_terminal() call term%set_font_size(x) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_plot.f90 b/src/fplot_plot.f90 index 2835f59..7b75a96 100644 --- a/src/fplot_plot.f90 +++ b/src/fplot_plot.f90 @@ -1,10 +1,114 @@ ! fplot_plot.f90 -submodule (fplot_core) fplot_plot +module fplot_plot + use iso_fortran_env + use fplot_plot_object + use fplot_plot_data + use fplot_terminal + use fplot_windows_terminal + use fplot_qt_terminal + use fplot_wxt_terminal + use fplot_png_terminal + use fplot_latex_terminal + use fplot_colormap + use fplot_colors + use fplot_errors + use fplot_constants + use fplot_legend + use fplot_label + use fplot_arrow + use ferror + use strings + use collections + implicit none + private + public :: plot + + type, extends(plot_object) :: plot + !! Defines the basic GNUPLOT plot. + character(len = PLOTDATA_MAX_NAME_LENGTH), private :: m_title = "" + !! The plot title. + logical, private :: m_hasTitle = .false. + !! Has a title? + class(terminal), private, pointer :: m_terminal => null() + !! The GNUPLOT terminal object to target. + type(list), private :: m_data + !! A collection of plot_data items to plot. + type(legend), private, pointer :: m_legend => null() + !! The legend. + logical, private :: m_showGrid = .true. + !! Show grid lines? + logical, private :: m_ticsIn = .true. + !! Point tic marks in? + logical, private :: m_drawBorder = .true. + !! Draw the border? + type(list), private :: m_labels ! Added 6/22/2018, JAC + !! A collection of plot_label items to draw. + integer(int32), private :: m_colorIndex = 1 + !! The color index to use for automatic line coloring for scatter plots. + logical, private :: m_axisEqual = .false. + !! Determines if the axes should be scaled proportionally. + class(colormap), private, pointer :: m_colormap + !! The colormap. + logical, private :: m_showColorbar = .true. + !! Show the colorbar? + type(list), private :: m_arrows ! Added 1/3/2024, JAC + !! A collection of plot_arrow items to draw. + contains + procedure, public :: free_resources => plt_clean_up + procedure, public :: initialize => plt_init + procedure, public :: get_title => plt_get_title + procedure, public :: set_title => plt_set_title + procedure, public :: is_title_defined => plt_has_title + procedure, public :: get_legend => plt_get_legend + procedure, public :: get_count => plt_get_count + procedure, public :: push => plt_push_data + procedure, public :: pop => plt_pop_data + procedure, public :: clear_all => plt_clear_all + procedure, public :: get => plt_get + procedure, public :: set => plt_set + procedure, public :: get_terminal => plt_get_term + procedure, public :: get_show_gridlines => plt_get_show_grid + procedure, public :: set_show_gridlines => plt_set_show_grid + procedure, public :: draw => plt_draw + procedure, public :: save_file => plt_save + procedure, public :: get_font_name => plt_get_font + procedure, public :: set_font_name => plt_set_font + procedure, public :: get_font_size => plt_get_font_size + procedure, public :: set_font_size => plt_set_font_size + procedure, public :: get_tics_inward => plt_get_tics_in + procedure, public :: set_tics_inward => plt_set_tics_in + procedure, public :: get_draw_border => plt_get_draw_border + procedure, public :: set_draw_border => plt_set_draw_border + procedure, public :: push_label => plt_push_label + procedure, public :: pop_label => plt_pop_label + procedure, public :: get_label => plt_get_label + procedure, public :: set_label => plt_set_label + procedure, public :: get_label_count => plt_get_label_count + procedure, public :: clear_all_labels => plt_clear_labels + procedure, public :: get_axis_equal => plt_get_axis_equal + procedure, public :: set_axis_equal => plt_set_axis_equal + procedure, public :: get_colormap => plt_get_colormap + procedure, public :: set_colormap => plt_set_colormap + procedure, public :: get_show_colorbar => plt_get_show_colorbar + procedure, public :: set_show_colorbar => plt_set_show_colorbar + procedure, public :: get_command_string => plt_get_cmd + procedure, public :: push_arrow => plt_push_arrow + procedure, public :: pop_arrow => plt_pop_arrow + procedure, public :: get_arrow => plt_get_arrow + procedure, public :: set_arrow => plt_set_arrow + procedure, public :: get_arrow_count => plt_get_arrow_count + procedure, public :: clear_arrows => plt_clear_arrows + end type + contains ! ------------------------------------------------------------------------------ - module subroutine plt_clean_up(this) + subroutine plt_clean_up(this) + !! Cleans up resources held by the plot object. Inheriting + !! classes are expected to call this routine to free internally held + !! resources. class(plot), intent(inout) :: this + !! The plot object. if (associated(this%m_terminal)) then deallocate(this%m_terminal) nullify(this%m_terminal) @@ -20,12 +124,29 @@ module subroutine plt_clean_up(this) end subroutine ! ------------------------------------------------------------------------------ - module subroutine plt_init(this, term, fname, err) - ! Arguments + subroutine plt_init(this, term, fname, err) + !! Initializes the plot object. class(plot), intent(inout) :: this + !! The plot object. integer(int32), intent(in), optional :: term + !! An optional input that is used to define the terminal. + !! The default terminal is a WXT terminal. The acceptable inputs + !! are: + !! + !! - GNUPLOT_TERMINAL_PNG + !! + !! - GNUPLOT_TERMINAL_QT + !! + !! - GNUPLOT_TERMINAL_WIN32 + !! + !! - GNUPLOT_TERMINAL_WXT + !! + !! - GNUPLOT_TERMINAL_LATEX character(len = *), intent(in), optional :: fname + !! A filename to pass to the terminal in the event the + !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: flag, t @@ -81,16 +202,18 @@ module subroutine plt_init(this, term, fname, err) ! Error Checking if (flag /= 0) then - call errmgr%report_error("plt_init", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "plt_init", flag) return end if end subroutine ! ------------------------------------------------------------------------------ - module function plt_get_title(this) result(txt) + function plt_get_title(this) result(txt) + !! Gets the plot's title. class(plot), intent(in) :: this + !! The plot object. character(len = :), allocatable :: txt + !! The title. integer(int32) :: n n = len_trim(this%m_title) allocate(character(len = n) :: txt) @@ -98,9 +221,12 @@ module function plt_get_title(this) result(txt) end function ! -------------------- - module subroutine plt_set_title(this, txt) + subroutine plt_set_title(this, txt) + !! Sets the plot's title. class(plot), intent(inout) :: this + !! The plot object. character(len = *), intent(in) :: txt + !! The title. integer :: n n = min(len_trim(txt), PLOTDATA_MAX_NAME_LENGTH) this%m_title = "" @@ -113,33 +239,46 @@ module subroutine plt_set_title(this, txt) end subroutine ! ------------------------------------------------------------------------------ - pure module function plt_has_title(this) result(x) + pure function plt_has_title(this) result(x) + !! Gets a value determining if a title has been defined for the plot + !! object. class(plot), intent(in) :: this + !! The plot object. logical :: x + !! Returns true if a title has been defined for this plot; else, + !! returns false. x = this%m_hasTitle end function ! ------------------------------------------------------------------------------ - module function plt_get_legend(this) result(x) + function plt_get_legend(this) result(x) + !! Gets the plot's legend object. class(plot), intent(in) :: this + !! The plot object. type(legend), pointer :: x + !! A pointer to the legend object. x => this%m_legend end function ! ------------------------------------------------------------------------------ - pure module function plt_get_count(this) result(x) + pure function plt_get_count(this) result(x) + !! Gets the number of stored plot_data objects. class(plot), intent(in) :: this + !! The plot object. integer(int32) :: x + !! The number of plot_data objects. x = this%m_data%count() end function ! ------------------------------------------------------------------------------ - module subroutine plt_push_data(this, x, err) - ! Arguments + subroutine plt_push_data(this, x, err) + !! Pushes a plot_data object onto the stack. class(plot), intent(inout) :: this + !! The plot object. class(plot_data), intent(inout) :: x + !! The plot_data object. class(errors), intent(inout), optional, target :: err - class(legend), pointer :: lgnd + !! An error handling object. ! Index the color tracking index if the type is of plot_data_colored select type (x) @@ -157,23 +296,20 @@ module subroutine plt_push_data(this, x, err) end subroutine ! ------------------------------------------------------------------------------ - module subroutine plt_pop_data(this) - ! Arguments + subroutine plt_pop_data(this) + !! Pops the last plot_data object from the stack. class(plot), intent(inout) :: this - class(legend), pointer :: lgnd + !! The plot object. ! Process call this%m_data%pop() - if (this%m_data%count() < 2) then - lgnd => this%get_legend() - call lgnd%set_is_visible(.false.) - end if end subroutine ! ------------------------------------------------------------------------------ - module subroutine plt_clear_all(this) - ! Arguments + subroutine plt_clear_all(this) + !! Removes all plot_data objects from the plot. class(plot), intent(inout) :: this + !! The plot object. ! Process this%m_colorIndex = 1 @@ -181,11 +317,14 @@ module subroutine plt_clear_all(this) end subroutine ! ------------------------------------------------------------------------------ - module function plt_get(this, i) result(x) - ! Arguments + function plt_get(this, i) result(x) + !! Gets a pointer to the requested plot_data object. class(plot), intent(in) :: this + !! The plot object. integer(int32), intent(in) :: i + !! The index of the plot_data object. class(plot_data), pointer :: x + !! A pointer to the requested plot_data object. ! Local Variables class(*), pointer :: item @@ -202,40 +341,59 @@ module function plt_get(this, i) result(x) ! -------------------- - module subroutine plt_set(this, i, x) + subroutine plt_set(this, i, x) + !! Sets the requested plot_data object into the plot. class(plot), intent(inout) :: this + !! The plot object. integer(int32), intent(in) :: i + !! The index of the plot_data object. class(plot_data), intent(in) :: x + !! The plot_data object. call this%m_data%set(i, x) end subroutine ! ------------------------------------------------------------------------------ - module function plt_get_term(this) result(x) + function plt_get_term(this) result(x) + !! Gets the GNUPLOT terminal object. class(plot), intent(in) :: this + !! The plot object. class(terminal), pointer :: x + !! A pointer to the GNUPLOT terminal object. x => this%m_terminal end function ! ------------------------------------------------------------------------------ - pure module function plt_get_show_grid(this) result(x) + pure function plt_get_show_grid(this) result(x) + !! Gets a flag determining if the grid lines should be shown. class(plot), intent(in) :: this + !! The plot object. logical :: x + !! Returns true if the grid lines should be shown; else, false. x = this%m_showGrid end function ! -------------------- - module subroutine plt_set_show_grid(this, x) + subroutine plt_set_show_grid(this, x) + !! Sets a flag determining if the grid lines should be shown. class(plot), intent(inout) :: this + !! The plot object. logical, intent(in) :: x + !! Set to true if the grid lines should be shown; else, false. this%m_showGrid = x end subroutine ! ------------------------------------------------------------------------------ - module subroutine plt_draw(this, persist, err) - ! Arguments + subroutine plt_draw(this, persist, err) + !! Launches GNUPLOT and draws the plot per the current state of + !! the command list. class(plot), intent(in) :: this + !! The plot object. logical, intent(in), optional :: persist + !! An optional parameter that can be used to keep GNUPLOT open. + !! Set to true to force GNUPLOT to remain open; else, set to false + !! to allow GNUPLOT to close after drawing. The default is true. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Parameters character(len = *), parameter :: fname = "temp_gnuplot_file.plt" @@ -245,7 +403,6 @@ module subroutine plt_draw(this, persist, err) integer(int32) :: fid, flag class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg class(terminal), pointer :: term ! Initialization @@ -264,11 +421,7 @@ module subroutine plt_draw(this, persist, err) ! Open the file for writing, and write the contents to file open(newunit = fid, file = fname, iostat = flag) if (flag > 0) then - write(errmsg, 100) & - "The file could not be opened/created. Error code ", flag, & - " was encountered." - call errmgr%report_error("plt_draw", trim(errmsg), & - PLOT_GNUPLOT_FILE_ERROR) + call report_file_create_error(errmgr, "plt_draw", fname, flag) return end if write(fid, '(A)') term%get_command_string() @@ -286,22 +439,22 @@ module subroutine plt_draw(this, persist, err) ! Clean up by deleting the file open(newunit = fid, file = fname) close(fid, status = "delete") - -100 format(A, I0, A) end subroutine ! ------------------------------------------------------------------------------ - module subroutine plt_save(this, fname, err) - ! Arguments + subroutine plt_save(this, fname, err) + !! Saves a GNUPLOT command file. class(plot), intent(in) :: this + !! The plot object. character(len = *), intent(in) :: fname + !! The filename. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: fid, flag class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg class(terminal), pointer :: term ! Initialization @@ -315,110 +468,141 @@ module subroutine plt_save(this, fname, err) ! Open the file for writing, and write the contents to file open(newunit = fid, file = fname, iostat = flag) if (flag > 0) then - write(errmsg, 100) & - "The file could not be opened/created. Error code ", flag, & - " was encountered." - call errmgr%report_error("plt_save", trim(errmsg), & - PLOT_GNUPLOT_FILE_ERROR) + call report_file_create_error(errmgr, "plt_save", fname, flag) return end if write(fid, '(A)') term%get_command_string() write(fid, '(A)') new_line('a') write(fid, '(A)') this%get_command_string() close(fid) - -100 format(A, I0, A) end subroutine ! ------------------------------------------------------------------------------ - module function plt_get_font(this) result(x) + function plt_get_font(this) result(x) + !! Gets the name of the font used for plot text. class(plot), intent(in) :: this + !! The plot object. character(len = :), allocatable :: x + !! The font name. class(terminal), pointer :: term term => this%get_terminal() x = term%get_font_name() end function ! -------------------- - module subroutine plt_set_font(this, x) + subroutine plt_set_font(this, x) + !! Sets the name of the font used for plot text. class(plot), intent(inout) :: this + !! The plot object. character(len = *), intent(in) :: x + !! The font name. class(terminal), pointer :: term term => this%get_terminal() call term%set_font_name(x) end subroutine ! ------------------------------------------------------------------------------ - module function plt_get_font_size(this) result(x) + function plt_get_font_size(this) result(x) + !! Gets the size of the font used by the plot. class(plot), intent(in) :: this + !! The plot object. integer(int32) :: x + !! The size of the font, in points. class(terminal), pointer :: term term => this%get_terminal() x = term%get_font_size() end function ! -------------------- - module subroutine plt_set_font_size(this, x) + subroutine plt_set_font_size(this, x) + !! Sets the size of the font used by the plot. class(plot), intent(inout) :: this + !! The plot object. integer(int32), intent(in) :: x + !! The font size, in points. If a value of zero is provided, + !! the font size is reset to its default value; or, if a negative + !! value is provided, the absolute value of the supplied value is + !! utilized. class(terminal), pointer :: term term => this%get_terminal() call term%set_font_size(x) end subroutine ! ------------------------------------------------------------------------------ - pure module function plt_get_tics_in(this) result(x) + pure function plt_get_tics_in(this) result(x) + !! Gets a value determining if the axis tic marks should point inwards. class(plot), intent(in) :: this + !! The plot object. logical :: x + !! Returns true if the tic marks should point inwards; else, false + !! if the tic marks should point outwards. x = this%m_ticsIn end function ! -------------------- - module subroutine plt_set_tics_in(this, x) + subroutine plt_set_tics_in(this, x) + !! Sets a value determining if the axis tic marks should point inwards. class(plot), intent(inout) :: this + !! The plot object. logical, intent(in) :: x + !! Set to true if the tic marks should point inwards; else, false + !! if the tic marks should point outwards. this%m_ticsIn = x end subroutine ! ------------------------------------------------------------------------------ - pure module function plt_get_draw_border(this) result(x) + pure function plt_get_draw_border(this) result(x) + !! Gets a value determining if the border should be drawn. class(plot), intent(in) :: this + !! The plot object. logical :: x + !! Returns true if the border should be drawn; else, false. x = this%m_drawBorder end function ! -------------------- - module subroutine plt_set_draw_border(this, x) + subroutine plt_set_draw_border(this, x) + !! Sets a value determining if the border should be drawn. class(plot), intent(inout) :: this + !! The plot object. logical, intent(in) :: x + !! Set to true if the border should be drawn; else, false. this%m_drawBorder = x end subroutine ! ****************************************************************************** ! ADDED: JUNE 22, 2018 - JAC ! ------------------------------------------------------------------------------ - module subroutine plt_push_label(this, lbl, err) - ! Arguments + subroutine plt_push_label(this, lbl, err) + !! Adds a label to the plot. class(plot), intent(inout) :: this + !! The plot object. class(plot_label), intent(in) :: lbl + !! The plot label. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Process call this%m_labels%push(lbl, err = err) end subroutine ! ------------------------------------------------------------------------------ - module subroutine plt_pop_label(this) + subroutine plt_pop_label(this) + !! Removes the last label from the plot. class(plot), intent(inout) :: this + !! The plot object. call this%m_labels%pop() end subroutine ! ------------------------------------------------------------------------------ - module function plt_get_label(this, i) result(x) - ! Arguments + function plt_get_label(this, i) result(x) + !! Gets the requested plot_label from the plot. class(plot), intent(in) :: this + !! The plot object. integer(int32), intent(in) :: i + !! The index of the plot_label object to retrieve. class(plot_label), pointer :: x + !! A pointer to the requested plot_label object. ! Local Variables class(*), pointer :: item @@ -434,57 +618,81 @@ module function plt_get_label(this, i) result(x) end function ! -------------------- - module subroutine plt_set_label(this, i, x) + subroutine plt_set_label(this, i, x) + !! Sets the specified plot_label object. class(plot), intent(inout) :: this + !! The plot object. integer(int32), intent(in) :: i + !! The index of the plot_label to replace. class(plot_label), intent(in) :: x + !! The new plot_label object. call this%m_labels%set(i, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function plt_get_label_count(this) result(x) + pure function plt_get_label_count(this) result(x) + !! Gets the number of plot_label objects belonging to the plot. class(plot), intent(in) :: this + !! The plot object. integer(int32) :: x + !! The number of plot_label objects. x = this%m_labels%count() end function ! ------------------------------------------------------------------------------ - module subroutine plt_clear_labels(this) + subroutine plt_clear_labels(this) + !! Clears all plot_label objects from the plot. class(plot), intent(inout) :: this + !! The plot object. call this%m_labels%clear() end subroutine ! ****************************************************************************** ! ADDED: SEPT. 25, 2020 - JAC ! ------------------------------------------------------------------------------ - pure module function plt_get_axis_equal(this) result(rst) + pure function plt_get_axis_equal(this) result(rst) + !! Gets a flag determining if the axes should be equally scaled. class(plot), intent(in) :: this + !! The plot object. logical :: rst + !! Returns true if the axes should be scaled equally; else, false. rst = this%m_axisEqual end function ! -------------------- - module subroutine plt_set_axis_equal(this, x) + subroutine plt_set_axis_equal(this, x) + !! Sets a flag determining if the axes should be equally scaled. class(plot), intent(inout) :: this + !! The plot object. logical, intent(in) :: x + !! Set to true if the axes should be scaled equally; else, false. this%m_axisEqual = x end subroutine ! ****************************************************************************** ! ADDED: OCT. 8, 2020 - JAC ! ------------------------------------------------------------------------------ - module function plt_get_colormap(this) result(x) + function plt_get_colormap(this) result(x) + !! Gets a pointer to the colormap object. class(plot), intent(in) :: this + !! The plot object. class(colormap), pointer :: x + !! A pointer to the colormap object. If no colormap is defined, a + !! null pointer is returned. x => this%m_colormap end function ! -------------------- - module subroutine plt_set_colormap(this, x, err) - ! Arguments + subroutine plt_set_colormap(this, x, err) + !! Sets the colormap object. class(plot), intent(inout) :: this + !! The plot object. class(colormap), intent(in) :: x + !! The colormap object. Notice, a copy of this object is + !! stored, and the plot object then manages the lifetime of the + !! copy. class(errors), intent(inout), optional, target :: err + !! An error handler object. ! Local Variables integer(int32) :: flag @@ -509,24 +717,32 @@ module subroutine plt_set_colormap(this, x, err) end subroutine ! ------------------------------------------------------------------------------ - pure module function plt_get_show_colorbar(this) result(x) + pure function plt_get_show_colorbar(this) result(x) + !! Gets a value determining if the colorbar should be shown. class(plot), intent(in) :: this + !! The plot object. logical :: x + !! Returns true if the colorbar should be drawn; else, false. x = this%m_showColorbar end function ! -------------------- - module subroutine plt_set_show_colorbar(this, x) + subroutine plt_set_show_colorbar(this, x) + !! Sets a value determining if the colorbar should be shown. class(plot), intent(inout) :: this + !! The plot object. logical, intent(in) :: x + !! Set to true if the colorbar should be drawn; else, false. this%m_showColorbar = x end subroutine ! ------------------------------------------------------------------------------ - module function plt_get_cmd(this) result(x) - ! Arguments + function plt_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this plot object. class(plot), intent(in) :: this + !! The plot object. character(len = :), allocatable :: x + !! The command string. ! Local Variables integer(int32) :: i @@ -574,24 +790,34 @@ module function plt_get_cmd(this) result(x) ! ****************************************************************************** ! ADDED: 1/3/2024 - JAC ! ------------------------------------------------------------------------------ - module subroutine plt_push_arrow(this, x, err) + subroutine plt_push_arrow(this, x, err) + !! Pushes a new @ref plot_arrow object onto the plot. class(plot), intent(inout) :: this + !! The plot object. class(plot_arrow), intent(in) :: x + !! The plot_arrow object. class(errors), intent(inout), optional, target :: err + !! An error handling object. call this%m_arrows%push(x, manage = .true., err = err) end subroutine ! ------------------------------------------------------------------------------ - module subroutine plt_pop_arrow(this) + subroutine plt_pop_arrow(this) + !! Pops the last plot_arrow object from the plot. class(plot), intent(inout) :: this + !! The plot object. call this%m_arrows%pop() end subroutine ! ------------------------------------------------------------------------------ - module function plt_get_arrow(this, i) result(rst) + function plt_get_arrow(this, i) result(rst) + !! Gets a pointer to the requested plot_arrow object. class(plot), intent(in) :: this + !! The plot object. integer(int32), intent(in) :: i + !! The index of the plot_arrow to retrieve. class(plot_arrow), pointer :: rst + !! The plot_arrow object to retrieve. class(*), pointer :: ptr ptr => this%m_arrows%get(i) @@ -604,25 +830,34 @@ module function plt_get_arrow(this, i) result(rst) end function ! ------------------------------------------------------------------------------ - module subroutine plt_set_arrow(this, i, x) + subroutine plt_set_arrow(this, i, x) + !! Sets a plot_arrow into the plot. class(plot), intent(inout) :: this + !! The plot object. integer(int32), intent(in) :: i + !! The index of the plot_arrow object to replace. class(plot_arrow), intent(in) :: x + !! The new plot_arrow object. call this%m_arrows%set(i, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function plt_get_arrow_count(this) result(rst) + pure function plt_get_arrow_count(this) result(rst) + !! Gets the number of plot_arrow objects held by the plot object. class(plot), intent(in) :: this + !! The plot object. integer(int32) :: rst + !! The plot_arrow objects count. rst = this%m_arrows%count() end function ! ------------------------------------------------------------------------------ - module subroutine plt_clear_arrows(this) + subroutine plt_clear_arrows(this) + !! Clears all plot_arrow objects from the plot. class(plot), intent(inout) :: this + !! The plot object. call this%m_arrows%clear() end subroutine ! ------------------------------------------------------------------------------ -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_plot_2d.f90 b/src/fplot_plot_2d.f90 index 06f2dc1..62769ea 100644 --- a/src/fplot_plot_2d.f90 +++ b/src/fplot_plot_2d.f90 @@ -1,10 +1,48 @@ ! fplot_plot_2d.f90 +module fplot_plot_2d + use iso_fortran_env + use fplot_plot_data + use fplot_plot + use fplot_errors + use fplot_plot_axis + use fplot_legend + use ferror + use strings + implicit none + private + public :: plot_2d + + type, extends(plot) :: plot_2d + !! A plot object defining a 2D plot. + type(x_axis), private, pointer :: m_xAxis => null() + !! The x-axis. + type(y_axis), private, pointer :: m_yAxis => null() + !! The y-axis. + type(y2_axis), private, pointer :: m_y2Axis => null() + !! The secondary y-axis. + logical, private :: m_useY2 = .false. + !! Display the secondary y axis? + logical, private :: m_set2square = .false. + !! Set to square scaling. + contains + final :: p2d_clean_up + procedure, public :: initialize => p2d_init + procedure, public :: get_command_string => p2d_get_cmd + procedure, public :: get_x_axis => p2d_get_x_axis + procedure, public :: get_y_axis => p2d_get_y_axis + procedure, public :: get_y2_axis => p2d_get_y2_axis + procedure, public :: get_use_y2_axis => p2d_get_use_y2 + procedure, public :: set_use_y2_axis => p2d_set_use_y2 + procedure, public :: get_square_axes => p2d_get_square_axes + procedure, public :: set_square_axes => p2d_set_square_axes + end type -submodule (fplot_core) fplot_plot_2d contains ! ------------------------------------------------------------------------------ - module subroutine p2d_clean_up(this) + subroutine p2d_clean_up(this) + !! Cleans up resources held by the plot_2d object. type(plot_2d), intent(inout) :: this + !! The plot_2d object. call this%free_resources() if (associated(this%m_xAxis)) then deallocate(this%m_xAxis) @@ -21,12 +59,29 @@ module subroutine p2d_clean_up(this) end subroutine ! ------------------------------------------------------------------------------ - module subroutine p2d_init(this, term, fname, err) - ! Arguments + subroutine p2d_init(this, term, fname, err) + !! Initializes the plot_2d object. class(plot_2d), intent(inout) :: this + !! The plot_2d object. integer(int32), intent(in), optional :: term + !! An optional input that is used to define the terminal. + !! The default terminal is a WXT terminal. The acceptable inputs + !! are: + !! + !! - GNUPLOT_TERMINAL_PNG + !! + !! - GNUPLOT_TERMINAL_QT + !! + !! - GNUPLOT_TERMINAL_WIN32 + !! + !! - GNUPLOT_TERMINAL_WXT + !! + !! - GNUPLOT_TERMINAL_LATEX character(len = *), intent(in), optional :: fname + !! A filename to pass to the terminal in the event the + !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: flag @@ -41,7 +96,8 @@ module subroutine p2d_init(this, term, fname, err) end if ! Initialize the base class - call plt_init(this, term, fname, errmgr) + ! call plt_init(this, term, fname, errmgr) + call this%plot%initialize(term, fname, errmgr) if (errmgr%has_error_occurred()) return ! Process @@ -58,17 +114,18 @@ module subroutine p2d_init(this, term, fname, err) ! Error Checking if (flag /= 0) then - call errmgr%report_error("p2d_init", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "p2d_init", flag) return end if end subroutine ! ------------------------------------------------------------------------------ - module function p2d_get_cmd(this) result(x) - ! Arguments + function p2d_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this plot_2d object. class(plot_2d), intent(in) :: this + !! The plot_2d object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -217,53 +274,80 @@ module function p2d_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module function p2d_get_x_axis(this) result(ptr) + function p2d_get_x_axis(this) result(ptr) + !! Gets the x-axis object. class(plot_2d), intent(in) :: this + !! The plot_2d object. class(plot_axis), pointer :: ptr + !! A pointer to the x-axis object. ptr => this%m_xAxis end function ! ------------------------------------------------------------------------------ - module function p2d_get_y_axis(this) result(ptr) + function p2d_get_y_axis(this) result(ptr) + !! Gets the y-axis object. class(plot_2d), intent(in) :: this + !! The plot_2d object. class(plot_axis), pointer :: ptr + !! A pointer to the y-axis object. ptr => this%m_yAxis end function ! ------------------------------------------------------------------------------ - module function p2d_get_y2_axis(this) result(ptr) + function p2d_get_y2_axis(this) result(ptr) + !! Gets the secondary y-axis object. class(plot_2d), intent(in) :: this + !! The plot_2d object. class(plot_axis), pointer :: ptr + !! A pointer to the secondary y-axis object. ptr => this%m_y2Axis end function ! ------------------------------------------------------------------------------ - pure module function p2d_get_use_y2(this) result(x) + pure function p2d_get_use_y2(this) result(x) + !! Gets a flag determining if the secondary y-axis should be + !! displayed. class(plot_2d), intent(in) :: this + !! The plot_2d object. logical :: x + !! Returns true if the axis should be displayed; else, false. x = this%m_useY2 end function ! -------------------- - module subroutine p2d_set_use_y2(this, x) + subroutine p2d_set_use_y2(this, x) + !! Sets a flag determining if the secondary y-axis should be + !! displayed. class(plot_2d), intent(inout) :: this + !! The plot_2d object. logical, intent(in) :: x + !! Set to true if the axis should be displayed; else, false. this%m_useY2 = x end subroutine ! ------------------------------------------------------------------------------ - pure module function p2d_get_square_axes(this) result(rst) + pure function p2d_get_square_axes(this) result(rst) + !! Gets a logical flag determining if the axes size should be squared + !! off. class(plot_2d), intent(in) :: this + !! The plot_2d object. logical :: rst + !! Returns true if the axes are to be sized to a square; else, + !! false. rst = this%m_set2square end function ! -------------------- - module subroutine p2d_set_square_axes(this, x) + subroutine p2d_set_square_axes(this, x) + !! Sets a logical flag determining if the axes size should be + !! squared off. class(plot_2d), intent(inout) :: this + !! The plot_2d object. logical, intent(in) :: x + !! Set to true if the axes are to be sized to a square; else, + !! false. this%m_set2square = x end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_plot_3d.f90 b/src/fplot_plot_3d.f90 index 3798dfa..5fe21c4 100644 --- a/src/fplot_plot_3d.f90 +++ b/src/fplot_plot_3d.f90 @@ -1,10 +1,62 @@ ! fplot_plot_3d.f90 -submodule (fplot_core) fplot_plot_3d +module fplot_plot_3d + use iso_fortran_env + use fplot_plot + use fplot_errors + use fplot_plot_axis + use fplot_constants + use fplot_plot_data + use fplot_legend + use ferror + use strings + implicit none + private + public :: plot_3d + + type, extends(plot) :: plot_3d + !! A plot object defining a 3D plot. + type(x_axis), private, pointer :: m_xAxis => null() + !! The x-axis. + type(y_axis), private, pointer :: m_yAxis => null() + !! The y-axis. + type(z_axis), private, pointer :: m_zAxis => null() + !! The z-axis. + real(real64), private :: m_elevation = 60.0d0 + !! The elevation angle. + real(real64), private :: m_azimuth = 30.0d0 + !! The azimuth. + logical, private :: m_zIntersect = .true. + !! Z-axis intersect X-Y plane? + logical, private :: m_setMap = .false. + !! Set map projection. + integer(int32), private :: m_csys = COORDINATES_CARTESIAN + !! Plot coordinate system. + contains + final :: p3d_clean_up + procedure, public :: initialize => p3d_init + procedure, public :: get_command_string => p3d_get_cmd + procedure, public :: get_x_axis => p3d_get_x_axis + procedure, public :: get_y_axis => p3d_get_y_axis + procedure, public :: get_z_axis => p3d_get_z_axis + procedure, public :: get_elevation => p3d_get_elevation + procedure, public :: set_elevation => p3d_set_elevation + procedure, public :: get_azimuth => p3d_get_azimuth + procedure, public :: set_azimuth => p3d_set_azimuth + procedure, public :: get_z_intersect_xy => p3d_get_z_axis_intersect + procedure, public :: set_z_intersect_xy => p3d_set_z_axis_intersect + procedure, public :: get_use_map_view => p3d_get_use_map_view + procedure, public :: set_use_map_view => p3d_set_use_map_view + procedure, public :: get_coordinate_system => p3d_get_csys + procedure, public :: set_coordinate_system => p3d_set_csys + end type + contains ! ------------------------------------------------------------------------------ - module subroutine p3d_clean_up(this) + subroutine p3d_clean_up(this) + !! Cleans up resources held by the plot_3d object. type(plot_3d), intent(inout) :: this + !! The plot_3d object. call this%free_resources() if (associated(this%m_xAxis)) then deallocate(this%m_xAxis) @@ -21,12 +73,29 @@ module subroutine p3d_clean_up(this) end subroutine ! ------------------------------------------------------------------------------ - module subroutine p3d_init(this, term, fname, err) - ! Arguments + subroutine p3d_init(this, term, fname, err) + !! Initializes the plot_3d object. class(plot_3d), intent(inout) :: this + !! The plot_3d object. integer(int32), intent(in), optional :: term + !! An optional input that is used to define the terminal. + !! The default terminal is a WXT terminal. The acceptable inputs + !! are: + !! + !! - GNUPLOT_TERMINAL_PNG + !! + !! - GNUPLOT_TERMINAL_QT + !! + !! - GNUPLOT_TERMINAL_WIN32 + !! + !! - GNUPLOT_TERMINAL_WXT + !! + !! - GNUPLOT_TERMINAL_LATEX character(len = *), intent(in), optional :: fname + !! A filename to pass to the terminal in the event the + !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: flag @@ -41,7 +110,8 @@ module subroutine p3d_init(this, term, fname, err) end if ! Initialize the base class - call plt_init(this, term, fname, errmgr) + ! call plt_init(this, term, fname, errmgr) + call this%plot%initialize(term, fname, errmgr) if (errmgr%has_error_occurred()) return ! Process @@ -58,17 +128,18 @@ module subroutine p3d_init(this, term, fname, err) ! Error Checking if (flag /= 0) then - call errmgr%report_error("p3d_init", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "p3d_init", flag) return end if end subroutine ! ------------------------------------------------------------------------------ - module function p3d_get_cmd(this) result(x) - ! Arguments + function p3d_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this plot_3d object. class(plot_3d), intent(in) :: this + !! The plot_3d object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -220,95 +291,152 @@ module function p3d_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module function p3d_get_x_axis(this) result(ptr) + function p3d_get_x_axis(this) result(ptr) + !! Gets the x-axis object. class(plot_3d), intent(in) :: this + !! The plot_3d object. class(plot_axis), pointer :: ptr + !! A pointer to the x-axis object. ptr => this%m_xAxis end function ! ------------------------------------------------------------------------------ - module function p3d_get_y_axis(this) result(ptr) + function p3d_get_y_axis(this) result(ptr) + !! Gets the y-axis object. class(plot_3d), intent(in) :: this + !! The plot_3d object. class(plot_axis), pointer :: ptr + !! A pointer to the y-axis object. ptr => this%m_yAxis end function ! ------------------------------------------------------------------------------ - module function p3d_get_z_axis(this) result(ptr) + function p3d_get_z_axis(this) result(ptr) + !! Gets the z-axis object. class(plot_3d), intent(in) :: this + !! The plot_3d object. class(plot_axis), pointer :: ptr + !! A pointer to the z-axis object. ptr => this%m_zAxis end function ! ------------------------------------------------------------------------------ - pure module function p3d_get_elevation(this) result(x) + pure function p3d_get_elevation(this) result(x) + !! Gets the plot elevation angle. class(plot_3d), intent(in) :: this + !! The plot_3d object. real(real64) :: x + !! The elevation angle, in degrees. x = this%m_elevation end function ! -------------------- - module subroutine p3d_set_elevation(this, x) + subroutine p3d_set_elevation(this, x) + !! Sets the plot elevation angle. class(plot_3d), intent(inout) :: this + !! The plot_3d object. real(real64), intent(in) :: x + !! The elevation angle, in degrees. this%m_elevation = x end subroutine ! ------------------------------------------------------------------------------ - pure module function p3d_get_azimuth(this) result(x) + pure function p3d_get_azimuth(this) result(x) + !! Gets the plot azimuth angle. class(plot_3d), intent(in) :: this + !! The plot_3d object. real(real64) :: x + !! The azimuth angle, in degrees. x = this%m_azimuth end function ! -------------------- - module subroutine p3d_set_azimuth(this, x) + subroutine p3d_set_azimuth(this, x) + !! Sets the plot azimuth angle. class(plot_3d), intent(inout) :: this + !! The plot_3d object. real(real64), intent(in) :: x + !! The azimuth angle, in degrees. this%m_azimuth = x end subroutine ! ------------------------------------------------------------------------------ - pure module function p3d_get_z_axis_intersect(this) result(x) + pure function p3d_get_z_axis_intersect(this) result(x) + !! Gets a value determining if the z-axis should intersect the + !! x-y plane. class(plot_3d), intent(in) :: this + !! The plot_3d object. logical :: x + !! Returns true if the z-axis should intersect the x-y plane; else, + !! false to allow the z-axis to float. x = this%m_zIntersect end function ! -------------------- - module subroutine p3d_set_z_axis_intersect(this, x) + subroutine p3d_set_z_axis_intersect(this, x) + !! Sets a value determining if the z-axis should intersect the + !! x-y plane. class(plot_3d), intent(inout) :: this + !! The plot_3d object. logical, intent(in) :: x + !! Set to true if the z-axis should intersect the x-y plane; else, + !! false to allow the z-axis to float. this%m_zIntersect = x end subroutine ! ADDED March 29, 2023 - JAC ! ------------------------------------------------------------------------------ - pure module function p3d_get_use_map_view(this) result(rst) + pure function p3d_get_use_map_view(this) result(rst) + !! Gets a value determining if the view should be set to a 2D + !! map view. If true, the azimuth and elevation terms are ignored. class(plot_3d), intent(in) :: this + !! The plot_3d object. logical :: rst + !! Returns true if the map view will be used; else, false. rst = this%m_setMap end function ! -------------------- - module subroutine p3d_set_use_map_view(this, x) + subroutine p3d_set_use_map_view(this, x) + !! Sets a value determining if the view should be set to a 2D + !! map view. If true, the azimuth and elevation terms are ignored. class(plot_3d), intent(inout) :: this + !! The plot_3d object. logical, intent(in) :: x + !! Seturns true if the map view will be used; else, false. this%m_setMap = x end subroutine ! ADDED Sept. 15, 2023 - JAC ! ------------------------------------------------------------------------------ - pure module function p3d_get_csys(this) result(rst) + pure function p3d_get_csys(this) result(rst) + !! Gets a value determining the coordinate system. class(plot_3d), intent(in) :: this + !! The plot_3d object. integer(int32) :: rst + !! The coordinate system ID, which must be one of the following. + !! + !! - COORDINATES_CARTESIAN + !! + !! - COORDINATES_CYLINDRICAL + !! + !! - COORDINATES_SPHERICAL rst = this%m_csys end function ! -------------------- - module subroutine p3d_set_csys(this, x) + subroutine p3d_set_csys(this, x) + !! Sets a value determining the coordinate system. class(plot_3d), intent(inout) :: this + !! The plot_3d object. integer(int32), intent(in) :: x + !! The coordinate system ID, which must be one of the following. + !! + !! - COORDINATES_CARTESIAN + !! + !! - COORDINATES_CYLINDRICAL + !! + !! - COORDINATES_SPHERICAL if (x /= COORDINATES_CARTESIAN .and. & x /= COORDINATES_CYLINDRICAL .and. & x /= COORDINATES_SPHERICAL) & @@ -321,4 +449,4 @@ module subroutine p3d_set_csys(this, x) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_plot_axis.f90 b/src/fplot_plot_axis.f90 index 2ffe8a1..a25142a 100644 --- a/src/fplot_plot_axis.f90 +++ b/src/fplot_plot_axis.f90 @@ -1,11 +1,114 @@ ! fplot_plot_axis.f90 -submodule (fplot_core) fplot_plot_axis +module fplot_plot_axis + use iso_fortran_env + use fplot_plot_object + use fplot_constants + use strings + implicit none + private + public :: plot_axis + public :: pa_get_string_result + public :: x_axis + public :: y_axis + public :: y2_axis + public :: z_axis + + type, abstract, extends(plot_object) :: plot_axis + private + logical :: m_hasTitle = .false. + !! Has a title? + character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_title = "" + !! Axis title. + logical :: m_autoscale = .true. + !! Autoscale? + real(real64), dimension(2) :: m_limits = [0.0d0, 1.0d0] + !! Display limits. + logical :: m_logScale = .false. + !! Log scaled? + logical :: m_zeroAxis = .false. + !! Has a zero axis? + real(real32) :: m_axisWidth = 1.0 + !! The width, in pixels, of the zero-axis line. + logical :: m_defaultTicLabels = .true. + !! Use default tic label format? + character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_ticLabelFmt = "%g" + !! The tic lablel format. + contains + procedure, public :: get_title => pa_get_title + procedure, public :: set_title => pa_set_title + procedure, public :: is_title_defined => pa_has_title + procedure, public :: get_autoscale => pa_get_autoscale + procedure, public :: set_autoscale => pa_set_autoscale + procedure, public :: get_limits => pa_get_axis_limits + procedure, public :: set_limits => pa_set_axis_limits + procedure, public :: get_is_log_scaled => pa_get_log_scale + procedure, public :: set_is_log_scaled => pa_set_log_scale + procedure, public :: get_command_string => pa_get_cmd_string + procedure, public :: get_zero_axis => pa_get_zero_axis + procedure, public :: set_zero_axis => pa_set_zero_axis + procedure, public :: get_zero_axis_line_width => pa_get_zero_axis_width + procedure, public :: set_zero_axis_line_width => pa_set_zero_axis_width + procedure(pa_get_string_result), deferred, public :: get_id_string + procedure, public :: get_use_default_tic_label_format => & + pa_get_use_dft_tic_lbl_fmt + procedure, public :: set_use_default_tic_label_format => & + pa_set_use_dft_tic_lbl_fmt + procedure, public :: get_tic_label_format => pa_get_tic_label_fmt + procedure, public :: set_tic_label_format => pa_set_tic_label_fmt + end type + + interface + function pa_get_string_result(this) result(x) + !! Retrieves a string from a plot_axis. + import plot_axis + class(plot_axis), intent(in) :: this + !! The plot_axis object. + character(len = :), allocatable :: x + !! The string. + end function + end interface + + type, extends(plot_axis) :: x_axis + !! Defines an x-axis object. + character, private :: m_id = "x" + !! The ID character. + contains + procedure, public :: get_id_string => xa_get_id + end type + + type, extends(plot_axis) :: y_axis + !! Defines a y-axis object. + character, private :: m_id = "y" + !! The ID character. + contains + procedure, public :: get_id_string => ya_get_id + end type + + type, extends(plot_axis) :: y2_axis + !! Defines a secondary y-axis object. + character(len = 2), private :: m_id = "y2" + !! The ID character. + contains + procedure, public :: get_id_string => y2a_get_id + end type + + type, extends(plot_axis) :: z_axis + !! Defines a z-axis object. + character, private :: m_id = "z" + !! The ID character. + contains + procedure, public :: get_id_string => za_get_id + end type + contains ! ------------------------------------------------------------------------------ - module function pa_get_title(this) result(txt) + function pa_get_title(this) result(txt) + !! Gets the axis title. class(plot_axis), intent(in) :: this + !! The plot_axis object. character(len = :), allocatable :: txt + !! The title. integer(int32) :: n n = len_trim(this%m_title) allocate(character(len = n) :: txt) @@ -13,10 +116,12 @@ module function pa_get_title(this) result(txt) end function ! -------------------- - module subroutine pa_set_title(this, txt) - ! Arguments + subroutine pa_set_title(this, txt) + !! Sets the axis title. class(plot_axis), intent(inout) :: this + !! The plot_axis object. character(len = *), intent(in) :: txt + !! The title. ! Local Variables integer(int32) :: n @@ -33,61 +138,94 @@ module subroutine pa_set_title(this, txt) end subroutine ! ------------------------------------------------------------------------------ - pure module function pa_has_title(this) result(x) + pure function pa_has_title(this) result(x) + !! Gets a value determining if a title has been defined for this axis. class(plot_axis), intent(in) :: this + !! The plot_axis object. logical :: x + !! Returns true if a title has been defined; else, false. x = this%m_hasTitle end function ! ------------------------------------------------------------------------------ - pure module function pa_get_autoscale(this) result(x) + pure function pa_get_autoscale(this) result(x) + !! Gets a value determining if the axis should be automatically scaled + !! to fit the data. class(plot_axis), intent(in) :: this + !! The plot_axis object. logical :: x + !! Returns true if the axis should be automatically scaled; else, + !! false. x = this%m_autoscale end function ! -------------------- - module subroutine pa_set_autoscale(this, x) + subroutine pa_set_autoscale(this, x) + !! Sets a value determining if the axis should be automatically scaled + !! to fit the data. class(plot_axis), intent(inout) :: this + !! The plot_axis object. logical, intent(in) :: x + !! Set to true if the axis should be automatically scaled; else, + !! set to false. this%m_autoscale = x end subroutine ! ------------------------------------------------------------------------------ - pure module function pa_get_axis_limits(this) result(x) + pure function pa_get_axis_limits(this) result(x) + !! Gets the axis display limits, assuming autoscaling is not + !! active for this axis. class(plot_axis), intent(in) :: this + !! The plot_axis object. real(real64), dimension(2) :: x + !! A two-element array containing the limits as follows: + !! [lower, upper]. x(1) = minval(this%m_limits) x(2) = maxval(this%m_limits) end function ! -------------------- - module subroutine pa_set_axis_limits(this, lower, upper) + subroutine pa_set_axis_limits(this, lower, upper) + !! Gets the axis display limits, assuming autoscaling is not + !! active for this axis. class(plot_axis), intent(inout) :: this - real(real64), intent(in) :: lower, upper - this%m_limits(1) = lower - this%m_limits(2) = upper + !! The plot_axis object. + real(real64), intent(in) :: lower + !! The lower display limit. + real(real64), intent(in) :: upper + !! The upper display limit. + this%m_limits(1) = min(lower, upper) + this%m_limits(2) = max(lower, upper) end subroutine ! ------------------------------------------------------------------------------ - pure module function pa_get_log_scale(this) result(x) + pure function pa_get_log_scale(this) result(x) + !! Gets a logical value defining if the axis should be log scaled. class(plot_axis), intent(in) :: this + !! The plot_axis object. logical :: x + !! Returns true if log scaling is applied to the axis; else, false. x = this%m_logScale end function ! -------------------- - module subroutine pa_set_log_scale(this, x) + subroutine pa_set_log_scale(this, x) + !! Sets a logical value defining if the axis should be log scaled. class(plot_axis), intent(inout) :: this + !! The plot_axis object. logical, intent(in) :: x + !! Set to true if log scaling is applied to the axis; else, false. this%m_logScale = x end subroutine ! ------------------------------------------------------------------------------ - module function pa_get_cmd_string(this) result(txt) - ! Arguments + function pa_get_cmd_string(this) result(txt) + !! Returns the appropriate GNUPLOT command string to define the + !! plot_axis properties. class(plot_axis), intent(in) :: this + !! The plot_axis object. character(len = :), allocatable :: txt + !! The GNUPLOT command string. ! Local Variables type(string_builder) :: str @@ -165,61 +303,143 @@ module function pa_get_cmd_string(this) result(txt) end function ! ------------------------------------------------------------------------------ - pure module function pa_get_zero_axis(this) result(x) + pure function pa_get_zero_axis(this) result(x) + !! Gets a value determining if the axis should be drawn through + !! zero of opposing axes. class(plot_axis), intent(in) :: this + !! The plot_axis object. logical :: x + !! Returns true to draw as a zero axis; else, set to false. x = this%m_zeroAxis end function ! -------------------- - module subroutine pa_set_zero_axis(this, x) + subroutine pa_set_zero_axis(this, x) + !! Sets a value determining if the axis should be drawn through + !! zero of opposing axes. class(plot_axis), intent(inout) :: this + !! The plot_axis object. logical, intent(in) :: x + !! Set to true to draw as a zero axis; else, set to false. this%m_zeroAxis = x end subroutine ! ------------------------------------------------------------------------------ - pure module function pa_get_zero_axis_width(this) result(x) + pure function pa_get_zero_axis_width(this) result(x) + !! Gets the width of the line used to represent the zero axis line, if + !! active. class(plot_axis), intent(in) :: this + !! The plot_axis object. real(real32) :: x + !! The width of the line, in pixels. x = this%m_axisWidth end function ! -------------------- - module subroutine pa_set_zero_axis_width(this, x) + subroutine pa_set_zero_axis_width(this, x) + !! Sets the width of the line used to represent the zero axis line, if + !! active. class(plot_axis), intent(inout) :: this + !! The plot_axis object. real(real32), intent(in) :: x + !! The width of the line, in pixels. this%m_axisWidth = x end subroutine ! ADDED March 29, 2023 - JAC ! ------------------------------------------------------------------------------ - pure module function pa_get_use_dft_tic_lbl_fmt(this) result(rst) + pure function pa_get_use_dft_tic_lbl_fmt(this) result(rst) + !! Gets a value determining if the default tic label format will be + !! used. class(plot_axis), intent(in) :: this + !! The plot_axis object. logical :: rst + !! Returns true if the default tic label format will be used; else, + !! false. rst = this%m_defaultTicLabels end function ! -------------------- - module subroutine pa_set_use_dft_tic_lbl_fmt(this, x) + subroutine pa_set_use_dft_tic_lbl_fmt(this, x) + !! Sets a value determining if the default tic label format will be + !! used. class(plot_axis), intent(inout) :: this + !! The plot_axis object. logical, intent(in) :: x + !! Set to true if the default tic label format will be used; else, + !! false. this%m_defaultTicLabels = x end subroutine ! ------------------------------------------------------------------------------ - pure module function pa_get_tic_label_fmt(this) result(rst) + pure function pa_get_tic_label_fmt(this) result(rst) + !! Gets the tic label format. The format string can be any format + !! string accepted by the C command 'printf.' class(plot_axis), intent(in) :: this + !! The plot_axis object. character(len = :), allocatable :: rst + !! The tic label format string. rst = trim(this%m_ticLabelFmt) end function ! -------------------- - module subroutine pa_set_tic_label_fmt(this, x) + subroutine pa_set_tic_label_fmt(this, x) + !! Sets the tic label format. The format string can be any format + !! string accepted by the C command 'printf.' class(plot_axis), intent(inout) :: this + !! The plot_axis object. character(len = *), intent(in) :: x + !! The tic label format string. this%m_ticLabelFmt = x end subroutine +! ****************************************************************************** +! X_AXIS MEMBERS +! ------------------------------------------------------------------------------ + function xa_get_id(this) result(x) + !! Gets the axis identification string. + class(x_axis), intent(in) :: this + !! The x_axis object. + character(len = :), allocatable :: x + !! The identification string. + x = this%m_id + end function + +! ****************************************************************************** +! Y_AXIS MEMBERS +! ------------------------------------------------------------------------------ + function ya_get_id(this) result(x) + !! Gets the axis identification string. + class(y_axis), intent(in) :: this + !! The y_axis object. + character(len = :), allocatable :: x + !! The identification string. + x = this%m_id + end function + +! ****************************************************************************** +! Y2_AXIS MEMBERS +! ------------------------------------------------------------------------------ + function y2a_get_id(this) result(x) + !! Gets the axis identification string. + class(y2_axis), intent(in) :: this + !! The y2_axis object. + character(len = :), allocatable :: x + !! The identification string. + x = this%m_id + end function + +! ****************************************************************************** +! Z_AXIS MEMBERS +! ------------------------------------------------------------------------------ + function za_get_id(this) result(x) + !! Gets the axis identification string. + class(z_axis), intent(in) :: this + !! The z_axis object. + character(len = :), allocatable :: x + !! The identification string. + x = this%m_id + end function + ! ------------------------------------------------------------------------------ -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_plot_bar.f90 b/src/fplot_plot_bar.f90 index 09e6415..a479311 100644 --- a/src/fplot_plot_bar.f90 +++ b/src/fplot_plot_bar.f90 @@ -1,18 +1,43 @@ ! fplot_plot_bar.f90 -submodule (fplot_core) fplot_plot_bar +module fplot_plot_bar + use iso_fortran_env + use fplot_plot_2d + use strings + implicit none + private + public :: plot_bar + + type, extends(plot_2d) :: plot_bar + !! Defines a 2D plot tailored towards bar plotting. + real(real32), private :: m_barWidth = 0.75d0 + !! A relative scaling of the width of a single bar. The value + !! must be between 0 and 1 with 1 being full width. + contains + procedure, public :: get_bar_width => pb_get_bar_width + procedure, public :: set_bar_width => pb_set_bar_width + procedure, public :: get_command_string => pb_get_cmd + end type + contains ! ------------------------------------------------------------------------------ -pure module function pb_get_bar_width(this) result(x) +pure function pb_get_bar_width(this) result(x) + !! Gets the bar width scaling factor. class(plot_bar), intent(in) :: this + !! The plot_bar object. real(real32) :: x + !! The scaling factor. x = this%m_barWidth end function ! ------------------------------------------------------------------------------ -module subroutine pb_set_bar_width(this, x) +subroutine pb_set_bar_width(this, x) + !! Sets the bar width scaling factor. class(plot_bar), intent(inout) :: this + !! The plot_bar object. real(real32), intent(in) :: x + !! The scaling factor. The value must be in the set [0, 1]; else, the + !! value will be shifted accordingly. if (x > 1.0) then this%m_barWidth = 1.0 else if (x < 0.0) then @@ -23,10 +48,12 @@ module subroutine pb_set_bar_width(this, x) end subroutine ! ------------------------------------------------------------------------------ -module function pb_get_cmd(this) result(x) - ! Arguments +function pb_get_cmd(this) result(x) + !! Gets the GNUPLOT commands required to draw the plot. class(plot_bar), intent(in) :: this + !! The plot_bar object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -52,4 +79,4 @@ module function pb_get_cmd(this) result(x) ! - clustering ! - stacking ! - lighting -end submodule +end module diff --git a/src/fplot_plot_data.f90 b/src/fplot_plot_data.f90 index ce88f1e..5171745 100644 --- a/src/fplot_plot_data.f90 +++ b/src/fplot_plot_data.f90 @@ -1,26 +1,191 @@ ! fplot_plot_data.f90 -submodule (fplot_core) fplot_plot_data +module fplot_plot_data + use iso_fortran_env + use fplot_plot_object + use fplot_constants + use fplot_colors + use strings + use ferror + use fplot_errors + implicit none + private + public :: plot_data + public :: pd_get_string_result + public :: plot_data_colored + public :: scatter_plot_data + public :: spd_get_int_value + public :: spd_get_string_result + public :: spd_get_value + public :: spd_set_value + + type, abstract, extends(plot_object) :: plot_data + !! A container for plot data. + private + character(len = PLOTDATA_MAX_NAME_LENGTH) :: m_name = "" + !! The name to associate with the data set. + contains + procedure, public :: get_name => pd_get_name + procedure, public :: set_name => pd_set_name + procedure(pd_get_string_result), deferred, public :: get_data_string + end type + + interface + function pd_get_string_result(this) result(x) + !! Retrieves a string from a plot_data object. + import plot_data + class(plot_data), intent(in) :: this + !! The plot_data object. + character(len = :), allocatable :: x + !! The string. + end function + end interface + + type, abstract, extends(plot_data) :: plot_data_colored + !! Defines a colored plot data set. + private + type(color) :: m_color = CLR_BLUE + !! The line color. + logical :: m_useAutoColor = .true. + !! Let the object choose colors automatically? + integer(int32) :: m_colorIndex = 1 + !! The color index to use, assuming we're using auto color + contains + procedure, public :: get_line_color => pdc_get_line_color + procedure, public :: set_line_color => pdc_set_line_color + procedure, public :: get_color_index => pdc_get_color_index + procedure, public :: set_color_index => pdc_set_color_index + end type + + type, abstract, extends(plot_data_colored) :: scatter_plot_data + !! A plot_data object for describing scatter plot data sets. + private + logical :: m_drawLine = .true. + !! Draw a line connecting the dots? + logical :: m_drawMarkers = .false. + !! Draw the markers? + integer(int32) :: m_markerFrequency = 1 + !! Marker frequency. + real(real32) :: m_lineWidth = 1.0 + !! Line width. + integer(int32) :: m_lineStyle = LINE_SOLID + !! Line style. + integer(int32) :: m_markerType = MARKER_FILLED_CIRCLE + !! Marker type. + real(real32) :: m_markerSize = 0.5 + !! Marker size multiplier. + logical :: m_simplifyData = .true. + !! True if large data sets should be simplified before sending to + !! GNUPLOT. + real(real64) :: m_simplifyFactor = 1.0d-3 + !! A scaling factor used to establish the simplification tolerance. + !! The simplification tolerance is established by multiplying this + !! factor by the range in the dependent variable data. + logical :: m_dataDependentColors = .false. + !! Determines if the data should utilize data-dependent colors. + logical :: m_filledCurve = .false. + !! Fill the curve? + logical :: m_useVariableSizePoints = .false. + !! Use variable size data points? + contains + procedure, public :: get_command_string => spd_get_cmd + procedure, public :: get_line_width => spd_get_line_width + procedure, public :: set_line_width => spd_set_line_width + procedure, public :: get_line_style => spd_get_line_style + procedure, public :: set_line_style => spd_set_line_style + procedure, public :: get_draw_line => spd_get_draw_line + procedure, public :: set_draw_line => spd_set_draw_line + procedure, public :: get_draw_markers => spd_get_draw_markers + procedure, public :: set_draw_markers => spd_set_draw_markers + procedure, public :: get_marker_style => spd_get_marker_style + procedure, public :: set_marker_style => spd_set_marker_style + procedure, public :: get_marker_scaling => spd_get_marker_scaling + procedure, public :: set_marker_scaling => spd_set_marker_scaling + procedure, public :: get_marker_frequency => spd_get_marker_frequency + procedure, public :: set_marker_frequency => spd_set_marker_frequency + procedure(spd_get_int_value), deferred, public :: get_count + procedure(spd_get_value), deferred, public :: get_x + procedure(spd_set_value), deferred, public :: set_x + procedure(spd_get_value), deferred, public :: get_y + procedure(spd_set_value), deferred, public :: set_y + procedure(spd_get_string_result), deferred, public :: get_axes_string + procedure, public :: get_simplify_data => spd_get_simplify_data + procedure, public :: set_simplify_data => spd_set_simplify_data + procedure, public :: get_simplification_factor => spd_get_simplify_factor + procedure, public :: set_simplification_factor => spd_set_simplify_factor + procedure, public :: get_use_data_dependent_colors => & + spd_get_data_dependent_colors + procedure, public :: set_use_data_dependent_colors => & + spd_set_data_dependent_colors + procedure, public :: get_fill_curve => spd_get_filled + procedure, public :: set_fill_curve => spd_set_filled + procedure, public :: get_use_variable_size_points => spd_get_use_var_point_size + procedure, public :: set_use_variable_size_points => spd_set_use_var_point_size + end type + + interface + pure function spd_get_value(this, index) result(x) + !! Gets an indexed value from the scatter_plot_data object. + use, intrinsic :: iso_fortran_env, only : int32, real64 + import scatter_plot_data + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + integer(int32), intent(in) :: index + !! The index. + real(real64) :: x + !! The value. + end function + + subroutine spd_set_value(this, index, x) + !! Sets an indexed value from the scatter_plot_data object. + use, intrinsic :: iso_fortran_env, only : int32, real64 + import scatter_plot_data + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + integer(int32), intent(in) :: index + !! The index. + real(real64), intent(in) :: x + !! The value. + end subroutine + + pure function spd_get_int_value(this) result(x) + !! Gets an integer value from the scatter_plot_data object. + use, intrinsic :: iso_fortran_env, only : int32 + import scatter_plot_data + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + integer(int32) :: x + !! The value. + end function + + function spd_get_string_result(this) result(x) + !! Gets a string value from the scatter_plot_data object. + import scatter_plot_data + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + character(len = :), allocatable :: x + !! The string. + end function + end interface + contains ! ------------------------------------------------------------------------------ - !> @brief Gets the name to associate with this data set. - !! - !! @param[in] this The plot_data object. - !! @return The name. - pure module function pd_get_name(this) result(txt) + pure function pd_get_name(this) result(txt) + !! Gets the name to associate with this data set. class(plot_data), intent(in) :: this + !! The plot_data object. character(len = :), allocatable :: txt + !! The name. txt = trim(this%m_name) end function ! -------------------- - !> @brief Sets the name to associate with this data set. - !! - !! @param[in,out] this The plot_data object. - !! @param[in] txt The name. - module subroutine pd_set_name(this, txt) + subroutine pd_set_name(this, txt) + !! Sets the name to associate with this data set. class(plot_data), intent(inout) :: this + !! The plot_data object. character(len = *), intent(in) :: txt + !! The name. integer(int32) :: n n = min(len(txt), PLOTDATA_MAX_NAME_LENGTH) this%m_name = "" @@ -29,4 +194,486 @@ module subroutine pd_set_name(this, txt) end if end subroutine -end submodule \ No newline at end of file +! ****************************************************************************** +! PLOT_DATA_COLORED +! ------------------------------------------------------------------------------ + pure function pdc_get_line_color(this) result(x) + !! Gets the object color. + class(plot_data_colored), intent(in) :: this + !! The plot_data_colored object. + type(color) :: x + !! The color. + if (this%m_useAutoColor) then + x = color_list(this%get_color_index()) + else + x = this%m_color + end if + end function + +! -------------------- + subroutine pdc_set_line_color(this, x) + !! Sets the object color. + class(plot_data_colored), intent(inout) :: this + !! The plot_data_colored object. + type(color), intent(in) :: x + !! The color. + this%m_color = x + this%m_useAutoColor = .false. + end subroutine + +! ------------------------------------------------------------------------------ + pure function pdc_get_color_index(this) result(x) + !! Gets the color index. + class(plot_data_colored), intent(in) :: this + !! The plot_data_colored object. + integer(int32) :: x + !! The index value. + x = this%m_colorIndex + end function + +! -------------------- + subroutine pdc_set_color_index(this, x) + !! Sets the color index. + class(plot_data_colored), intent(inout) :: this + !! The plot_data_colored object. + integer(int32), intent(in) :: x + !! The index value. + this%m_colorIndex = x + end subroutine + +! ****************************************************************************** +! SCATTER_PLOT_DATA +! ------------------------------------------------------------------------------ + function spd_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this + !! scatter_plot_data object. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + character(len = :), allocatable :: x + !! The command string. + + ! Local Variables + type(string_builder) :: str + integer(int32) :: n + type(color) :: clr + + ! Initialization + call str%initialize() + + ! Title + n = len_trim(this%get_name()) + if (n > 0) then + call str%append(' "-" title "') + call str%append(this%get_name()) + call str%append('"') + else + call str%append(' "-" notitle') + end if + + ! Lines, points, or filled + if (this%get_fill_curve()) then + call str%append(" with filledcurves") + else + if (this%get_draw_line() .and. this%get_draw_markers()) then + call str%append(" with linespoints") + else if (.not.this%get_draw_line() .and. this%get_draw_markers()) then + call str%append(" with points") + else + call str%append(" with lines") + end if + end if + + ! Line Width + call str%append(" lw ") + call str%append(to_string(this%get_line_width())) + + ! Line Color + if (this%get_use_data_dependent_colors()) then + ! http://www.gnuplotting.org/using-a-palette-as-line-color/ + call str%append(" lc palette") + else + clr = this%get_line_color() + call str%append(' lc rgb "#') + call str%append(clr%to_hex_string()) + call str%append('"') + end if + + ! Define other properties specific to the lines and points + if (this%get_draw_line()) then + call str%append(" lt ") + call str%append(to_string(this%get_line_style())) + if (this%get_line_style() /= LINE_SOLID) then + call str%append(" dashtype ") + call str%append(to_string(this%get_line_style())) + end if + end if + if (this%get_draw_markers()) then + call str%append(" pi ") + call str%append(to_string(this%get_marker_frequency())) + call str%append(" pt ") + call str%append(to_string(this%get_marker_style())) + call str%append(" ps ") + if (this%get_use_variable_size_points()) then + call str%append("variable") + else + call str%append(to_string(this%get_marker_scaling())) + end if + end if + + ! Define the axes structure + call str%append(" ") + call str%append(this%get_axes_string()) + + ! End + x = char(str%to_string()) + end function + +! ------------------------------------------------------------------------------ + pure function spd_get_line_width(this) result(x) + !! Gets the width of the line, in pixels. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + real(real32) :: x + !! The line width. + x = this%m_lineWidth + end function + +! -------------------- + subroutine spd_set_line_width(this, x) + !! Sets the width of the line, in pixels. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + real(real32), intent(in) :: x + !! The line width. + this%m_lineWidth = x + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_line_style(this) result(x) + !! Gets the line style. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + integer(int32) :: x + !! The line style. The line style must be one of the following. + !! + !! - LINE_DASHED + !! + !! - LINE_DASH_DOTTED + !! + !! - LINE_DASH_DOT_DOT + !! + !! - LINE_DOTTED + !! + !! - LINE_SOLID + x = this%m_lineStyle + end function + +! -------------------- + subroutine spd_set_line_style(this, x) + !! Sets the line style. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + integer(int32), intent(in) :: x + !! The line style. The line style must be one of the following. + !! + !! - LINE_DASHED + !! + !! - LINE_DASH_DOTTED + !! + !! - LINE_DASH_DOT_DOT + !! + !! - LINE_DOTTED + !! + !! - LINE_SOLID + if (x == LINE_DASHED .or. & + x == LINE_DASH_DOTTED .or. & + x == LINE_DASH_DOT_DOT .or. & + x == LINE_DOTTED .or. & + x == LINE_SOLID) then + ! Only reset the line style if it is a valid type. + this%m_lineStyle = x + end if + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_draw_line(this) result(x) + !! Gets a value determining if a line should be drawn. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + logical :: x + !! Returns true if the line should be drawn; else, false. + x = this%m_drawLine + end function + +! -------------------- + subroutine spd_set_draw_line(this, x) + !! Sets a value determining if a line should be drawn. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + logical, intent(in) :: x + !! Set to true if the line should be drawn; else, false. + this%m_drawLine = x + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_draw_markers(this) result(x) + !! Gets a value determining if data point markers should be drawn. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + logical :: x + !! Returns true if the markers should be drawn; else, false. + x = this%m_drawMarkers + end function + +! -------------------- + subroutine spd_set_draw_markers(this, x) + !! Sets a value determining if data point markers should be drawn. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + logical, intent(in) :: x + !! Set to true if the markers should be drawn; else, false. + this%m_drawMarkers = x + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_marker_style(this) result(x) + !! Gets the marker style. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + integer(int32) :: x + !! The marker type. The marker type must be one of the following: + !! + !! - MARKER_ASTERISK + !! + !! - MARKER_EMPTY_CIRCLE + !! + !! - MARKER_EMPTY_NABLA + !! + !! - MARKER_EMPTY_RHOMBUS + !! + !! - MARKER_EMPTY_SQUARE + !! + !! - MARKER_EMPTY_TRIANGLE + !! + !! - MARKER_FILLED_CIRCLE + !! + !! - MARKER_FILLED_NABLA + !! + !! - MARKER_FILLED_RHOMBUS + !! + !! - MARKER_FILLED_SQUARE + !! + !! - MARKER_FILLED_TRIANGLE + !! + !! - MARKER_PLUS + !! + !! - MARKER_X + x = this%m_markerType + end function + +! -------------------- + subroutine spd_set_marker_style(this, x) + !! Sets the marker style. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + integer(int32), intent(in) :: x + !! The marker type. The marker type must be one of the following: + !! + !! - MARKER_ASTERISK + !! + !! - MARKER_EMPTY_CIRCLE + !! + !! - MARKER_EMPTY_NABLA + !! + !! - MARKER_EMPTY_RHOMBUS + !! + !! - MARKER_EMPTY_SQUARE + !! + !! - MARKER_EMPTY_TRIANGLE + !! + !! - MARKER_FILLED_CIRCLE + !! + !! - MARKER_FILLED_NABLA + !! + !! - MARKER_FILLED_RHOMBUS + !! + !! - MARKER_FILLED_SQUARE + !! + !! - MARKER_FILLED_TRIANGLE + !! + !! - MARKER_PLUS + !! + !! - MARKER_X + if (x == MARKER_ASTERISK .or. & + x == MARKER_EMPTY_CIRCLE .or. & + x == MARKER_EMPTY_NABLA .or. & + x == MARKER_EMPTY_RHOMBUS .or. & + x == MARKER_EMPTY_SQUARE .or. & + x == MARKER_EMPTY_TRIANGLE .or. & + x == MARKER_FILLED_CIRCLE .or. & + x == MARKER_FILLED_NABLA .or. & + x == MARKER_FILLED_RHOMBUS .or. & + x == MARKER_FILLED_SQUARE .or. & + x == MARKER_FILLED_TRIANGLE .or. & + x == MARKER_PLUS .or. & + x == MARKER_X) then + + ! Only alter the value if the marker is a known type + this%m_markerType = x + end if + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_marker_scaling(this) result(x) + !! Gets the marker scaling. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + real(real32) :: x + !! The scaling factor. + x = this%m_markerSize + end function + +! -------------------- + subroutine spd_set_marker_scaling(this, x) + !! Sets the marker scaling. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + real(real32), intent(in) :: x + !! The scaling factor. + this%m_markerSize = x + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_marker_frequency(this) result(x) + !! Gets the marker frequency. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + integer(int32) :: x + !! The marker frequency. + x = this%m_markerFrequency + end function + +! -------------------- + subroutine spd_set_marker_frequency(this, x) + !! Sets the marker frequency. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + integer(int32), intent(in) :: x + !! The marker frequency. + this%m_markerFrequency = x + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_simplify_data(this) result(x) + !! Gets a value determining if the stored data should be + !! simplified (reduced) before passing to GNUPLOT. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + logical :: x + !! True if the data should be simplified prior to sending + !! to GNUPLOT; else, false to leave the data alone. + x = this%m_simplifyData + end function + +! -------------------- + subroutine spd_set_simplify_data(this, x) + !! Sets a value determining if the stored data should be + !! simplified (reduced) before passing to GNUPLOT. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + logical, intent(in) :: x + !! True if the data should be simplified prior to sending + !! to GNUPLOT; else, false to leave the data alone. + this%m_simplifyData = x + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_simplify_factor(this) result(x) + !! Gets a factor used to establish the simplification tolerance. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + real(real64) :: x + !! The scaling factor. + x = this%m_simplifyFactor + end function + +! -------------------- + subroutine spd_set_simplify_factor(this, x) + !! Sets a factor used to establish the simplification tolerance. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + real(real64), intent(in) :: x + !! The scaling factor. + this%m_simplifyFactor = x + end subroutine + +! ------------------------------------------------------------------------------ + pure function spd_get_data_dependent_colors(this) result(rst) + !! Gets a value determing if data-dependent colors should be used. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + logical :: rst + !! True if data-dependent colors should be used; else, false. + rst = this%m_dataDependentColors + end function + +! -------------------- + subroutine spd_set_data_dependent_colors(this, x) + !! Sets a value determing if data-dependent colors should be used. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + logical, intent(in) :: x + !! True if data-dependent colors should be used; else, false. + this%m_dataDependentColors = x + end subroutine + +! ****************************************************************************** +! ADDED: JUNE 28, 2021 - JAC +! ------------------------------------------------------------------------------ + pure function spd_get_filled(this) result(rst) + !! Gets a logical value determining if a filled curve should be drawn. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + logical :: rst + !! True if the curve should be filled; else, false. + rst = this%m_filledCurve + end function + +! -------------------- + subroutine spd_set_filled(this, x) + !! Sets a logical value determining if a filled curve should be drawn. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + logical, intent(in) :: x + !! True if the curve should be filled; else, false. + this%m_filledCurve = x + end subroutine + +! ****************************************************************************** +! ADDED: JAN 12, 2024 - JAC +! ------------------------------------------------------------------------------ + pure function spd_get_use_var_point_size(this) result(rst) + !! Gets a logical value determining if variable sized data points + !! should be used. The default is false, such that points will be of + !! a constant size. + class(scatter_plot_data), intent(in) :: this + !! The scatter_plot_data object. + logical :: rst + !! True if variable size points should be used; else, false. + rst = this%m_useVariableSizePoints + end function + +! -------------------- + subroutine spd_set_use_var_point_size(this, x) + !! Sets a logical value determining if variable sized data points + !! should be used. The default is false, such that points will be of + !! a constant size. + class(scatter_plot_data), intent(inout) :: this + !! The scatter_plot_data object. + logical, intent(in) :: x + !! True if variable size points should be used; else, false. + this%m_useVariableSizePoints = x + end subroutine + +! ------------------------------------------------------------------------------ +end module \ No newline at end of file diff --git a/src/fplot_plot_data_2d.f90 b/src/fplot_plot_data_2d.f90 index 5133c25..8310bf0 100644 --- a/src/fplot_plot_data_2d.f90 +++ b/src/fplot_plot_data_2d.f90 @@ -1,372 +1,457 @@ -! fplot_plot_data_2d.f90 +module fplot_plot_data_2d + use iso_fortran_env + use fplot_plot_data + use fplot_simplify + use fplot_errors + use ferror + use strings + implicit none + private + public :: plot_data_2d + + type, extends(scatter_plot_data) :: plot_data_2d + !! Defines a two-dimensional plot data set. + real(real64), private, allocatable, dimension(:,:) :: m_data + !! An N-by-2 matrix containing the x and y data points. + !> Draw against the secondary y axis? + logical, private :: m_useY2 = .false. + !! Draw against the secondary y axis? + contains + procedure, public :: get_axes_string => pd2d_get_axes_cmd + procedure, public :: get_data_string => pd2d_get_data_cmd + procedure, public :: get_count => pd2d_get_data_count + procedure, public :: get_x => pd2d_get_x_data + procedure, public :: set_x => pd2d_set_x_data + procedure, public :: get_y => pd2d_get_y_data + procedure, public :: set_y => pd2d_set_y_data + procedure, public :: get_draw_against_y2 => pd2d_get_draw_against_y2 + procedure, public :: set_draw_against_y2 => pd2d_set_draw_against_y2 + generic, public :: define_data => pd2d_set_data_1, pd2d_set_data_2 + procedure :: pd2d_set_data_1 + procedure :: pd2d_set_data_2 + procedure, public :: get_x_data => pd2d_get_x_array + procedure, public :: get_y_data => pd2d_get_y_array + procedure, public :: get_color_data => pd2d_get_c_array + procedure, public :: get_point_size_data => pd2d_get_ps_array + end type -submodule (fplot_core) fplot_plot_data_2d contains ! ------------------------------------------------------------------------------ - module function pd2d_get_axes_cmd(this) result(x) - ! Arguments - class(plot_data_2d), intent(in) :: this - character(len = :), allocatable :: x - - ! Define which axes the data is to be plotted against - if (this%get_draw_against_y2()) then - x = "axes x1y2" - else - x = "axes x1y1" - end if - end function +function pd2d_get_axes_cmd(this) result(x) + !! Gets the GNUPLOT command string defining which axes the data + !! is to be plotted against. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + character(len = :), allocatable :: x + !! The command string. + + ! Define which axes the data is to be plotted against + if (this%get_draw_against_y2()) then + x = "axes x1y2" + else + x = "axes x1y1" + end if +end function ! ------------------------------------------------------------------------------ - module function pd2d_get_data_cmd(this) result(x) - ! Arguments - class(plot_data_2d), intent(in) :: this - character(len = :), allocatable :: x - - ! Local Variables - type(string_builder) :: str - integer(int32) :: i - character :: delimiter, nl - real(real64), allocatable, dimension(:) :: xv, yv, cv, ps - real(real64), allocatable, dimension(:,:) :: pts - real(real64) :: tol, maxy, miny, eps - logical :: usecolors, usevarpoints - - ! Initialization - call str%initialize() - delimiter = achar(9) ! tab delimiter - nl = new_line(nl) - usecolors = this%get_use_data_dependent_colors() - usevarpoints = this%get_use_variable_size_points() - - ! Process - xv = this%get_x_data() - yv = this%get_y_data() - if (usecolors .and. usevarpoints) then - cv = this%get_color_data() - ps = this%get_point_size_data() - do i = 1, size(xv) - call str%append(to_string(xv(i))) - call str%append(delimiter) - call str%append(to_string(yv(i))) - call str%append(delimiter) - call str%append(to_string(ps(i))) - call str%append(delimiter) - call str%append(to_string(cv(i))) - call str%append(nl) - end do - else if (usecolors .and. .not.usevarpoints) then - cv = this%get_color_data() - do i = 1, size(xv) - call str%append(to_string(xv(i))) - call str%append(delimiter) - call str%append(to_string(yv(i))) +function pd2d_get_data_cmd(this) result(x) + !! Gets the GNUPLOT command string containing the actual data + !! to plot. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + character(len = :), allocatable :: x + !! The command string. + + ! Local Variables + type(string_builder) :: str + integer(int32) :: i + character :: delimiter, nl + real(real64), allocatable, dimension(:) :: xv, yv, cv, ps + real(real64), allocatable, dimension(:,:) :: pts + real(real64) :: tol, maxy, miny, eps + logical :: usecolors, usevarpoints + + ! Initialization + call str%initialize() + delimiter = achar(9) ! tab delimiter + nl = new_line(nl) + usecolors = this%get_use_data_dependent_colors() + usevarpoints = this%get_use_variable_size_points() + + ! Process + xv = this%get_x_data() + yv = this%get_y_data() + if (usecolors .and. usevarpoints) then + cv = this%get_color_data() + ps = this%get_point_size_data() + do i = 1, size(xv) + call str%append(to_string(xv(i))) + call str%append(delimiter) + call str%append(to_string(yv(i))) + call str%append(delimiter) + call str%append(to_string(ps(i))) + call str%append(delimiter) + call str%append(to_string(cv(i))) + call str%append(nl) + end do + else if (usecolors .and. .not.usevarpoints) then + cv = this%get_color_data() + do i = 1, size(xv) + call str%append(to_string(xv(i))) + call str%append(delimiter) + call str%append(to_string(yv(i))) + call str%append(delimiter) + call str%append(to_string(cv(i))) + call str%append(nl) + end do + else if (.not.usecolors .and. usevarpoints) then + ps = this%get_point_size_data() + do i = 1, size(xv) + call str%append(to_string(xv(i))) + call str%append(delimiter) + call str%append(to_string(yv(i))) + call str%append(delimiter) + call str%append(to_string(ps(i))) + call str%append(nl) + end do + else + if (this%get_simplify_data()) then + maxy = maxval(yv) + miny = minval(yv) + tol = abs(this%get_simplification_factor() * (maxy - miny)) + eps = 10.0d0 * epsilon(eps) + if (tol < eps) tol = eps + pts = simplify_polyline(xv, yv, tol) + do i = 1, size(pts, 1) + call str%append(to_string(pts(i,1))) call str%append(delimiter) - call str%append(to_string(cv(i))) + call str%append(to_string(pts(i,2))) call str%append(nl) end do - else if (.not.usecolors .and. usevarpoints) then - ps = this%get_point_size_data() + else do i = 1, size(xv) call str%append(to_string(xv(i))) call str%append(delimiter) call str%append(to_string(yv(i))) - call str%append(delimiter) - call str%append(to_string(ps(i))) call str%append(nl) end do - else - if (this%get_simplify_data()) then - maxy = maxval(yv) - miny = minval(yv) - tol = abs(this%get_simplification_factor() * (maxy - miny)) - eps = 10.0d0 * epsilon(eps) - if (tol < eps) tol = eps - pts = simplify_polyline(xv, yv, tol) - do i = 1, size(pts, 1) - call str%append(to_string(pts(i,1))) - call str%append(delimiter) - call str%append(to_string(pts(i,2))) - call str%append(nl) - end do - else - do i = 1, size(xv) - call str%append(to_string(xv(i))) - call str%append(delimiter) - call str%append(to_string(yv(i))) - call str%append(nl) - end do - end if end if - - ! End - x = char(str%to_string()) - end function + end if + + ! End + x = char(str%to_string()) +end function ! ------------------------------------------------------------------------------ - pure module function pd2d_get_data_count(this) result(x) - class(plot_data_2d), intent(in) :: this - integer(int32) :: x - if (allocated(this%m_data)) then - x = size(this%m_data, 1) - else - x = 0 - end if - end function +pure function pd2d_get_data_count(this) result(x) + !! Gets the number of data points. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + integer(int32) :: x + !! The number of data points. + if (allocated(this%m_data)) then + x = size(this%m_data, 1) + else + x = 0 + end if +end function ! ------------------------------------------------------------------------------ - pure module function pd2d_get_x_data(this, index) result(x) - class(plot_data_2d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - if (allocated(this%m_data)) then - x = this%m_data(index, 1) - else - x = 0.0d0 - end if - end function +pure function pd2d_get_x_data(this, index) result(x) + !! Gets the requested X data point. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + integer(int32), intent(in) :: index + !! The index of the data point to retrieve. + real(real64) :: x + !! The requested data point. + if (allocated(this%m_data)) then + x = this%m_data(index, 1) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine pd2d_set_x_data(this, index, x) - class(plot_data_2d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - if (allocated(this%m_data)) then - this%m_data(index, 1) = x - end if - end subroutine +subroutine pd2d_set_x_data(this, index, x) + !! Sets the requested X data point. + class(plot_data_2d), intent(inout) :: this + !! The plot_data_2d object. + integer(int32), intent(in) :: index + !! The index of the data point to replace. + real(real64), intent(in) :: x + !! The data point. + if (allocated(this%m_data)) then + this%m_data(index, 1) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - pure module function pd2d_get_y_data(this, index) result(x) - class(plot_data_2d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - if (allocated(this%m_data)) then - x = this%m_data(index, 2) - else - x = 0.0d0 - end if - end function +pure function pd2d_get_y_data(this, index) result(x) + !! Gets the requested Y data point. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + integer(int32), intent(in) :: index + !! The index of the data point to retrieve. + real(real64) :: x + !! The requested data point. + if (allocated(this%m_data)) then + x = this%m_data(index, 2) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine pd2d_set_y_data(this, index, x) - class(plot_data_2d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - if (allocated(this%m_data)) then - this%m_data(index, 2) = x - end if - end subroutine +subroutine pd2d_set_y_data(this, index, x) + !! Sets the requested Y data point. + class(plot_data_2d), intent(inout) :: this + !! The plot_data_2d object. + integer(int32), intent(in) :: index + !! The index of the data point to replace. + real(real64), intent(in) :: x + !! The data point. + if (allocated(this%m_data)) then + this%m_data(index, 2) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - module subroutine pd2d_set_data_1(this, x, y, c, ps, err) - ! Arguments - class(plot_data_2d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y - real(real64), intent(in), dimension(:), optional :: c, ps - class(errors), intent(inout), optional, target :: err - - ! Local Variables - integer(int32) :: i, n, flag, ncols - class(errors), pointer :: errmgr - type(errors), target :: deferr - - ! Initialization - n = size(x) - ncols = 2 - if (present(c)) ncols = ncols + 1 - if (present(ps)) ncols = ncols + 1 - if (present(err)) then - errmgr => err - else - errmgr => deferr - end if +subroutine pd2d_set_data_1(this, x, y, c, ps, err) + !! Defines the data set to plot. + class(plot_data_2d), intent(inout) :: this + !! The plot_data_2d object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinate data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinate data. + real(real64), intent(in), dimension(:), optional :: c + !! An N-element array defining how color should vary with the + !! current colormap for each value. + real(real64), intent(in), dimension(:), optional :: ps + !! An N-element array defining the size of each data point. + class(errors), intent(inout), optional, target :: err + !! An error-handling object. - ! Input Check - if (size(y) /= n) then - call errmgr%report_error("pd2d_set_data_1", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) - return - end if - if (present(c)) then - if (size(c) /= n) then - call errmgr%report_error("pd2d_set_data_1", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) - return - end if - end if - if (present(ps)) then - if (size(ps) /= n) then - call errmgr%report_error("pd2d_set_data_1", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) - return - end if - end if + ! Local Variables + integer(int32) :: i, n, flag, ncols + class(errors), pointer :: errmgr + type(errors), target :: deferr + + ! Initialization + n = size(x) + ncols = 2 + if (present(c)) ncols = ncols + 1 + if (present(ps)) ncols = ncols + 1 + if (present(err)) then + errmgr => err + else + errmgr => deferr + end if - ! Process - if (allocated(this%m_data)) deallocate(this%m_data) - allocate(this%m_data(n, ncols), stat = flag) - if (flag /= 0) then - call errmgr%report_error("pd2d_set_data_1", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + ! Input Check + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, "pd2d_set_data_1", & + "y", n, size(y)) + return + end if + if (present(c)) then + if (size(c) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pd2d_set_data_1", "c", n, size(c)) return end if - ! if (present(c)) then - ! call this%set_use_data_dependent_colors(.true.) - ! do concurrent (i = 1:n) - ! this%m_data(i, 1) = x(i) - ! this%m_data(i, 2) = y(i) - ! this%m_data(i, 3) = c(i) - ! end do - ! else - ! call this%set_use_data_dependent_colors(.false.) - ! do concurrent (i = 1:n) - ! this%m_data(i, 1) = x(i) - ! this%m_data(i, 2) = y(i) - ! end do - ! end if - if (present(c) .and. present(ps)) then - call this%set_use_data_dependent_colors(.true.) - call this%set_use_variable_size_points(.true.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - this%m_data(i, 3) = ps(i) - this%m_data(i, 4) = c(i) - end do - else if (present(c) .and. .not.present(ps)) then - call this%set_use_data_dependent_colors(.true.) - call this%set_use_variable_size_points(.false.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - this%m_data(i, 3) = c(i) - end do - else if (.not.present(c) .and. present(ps)) then - call this%set_use_data_dependent_colors(.false.) - call this%set_use_variable_size_points(.true.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - this%m_data(i, 3) = ps(i) - end do - else - call this%set_use_data_dependent_colors(.false.) - call this%set_use_variable_size_points(.false.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - end do + end if + if (present(ps)) then + if (size(ps) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pd2d_set_data_1", "ps", n, size(ps)) + return end if - end subroutine + end if + + ! Process + if (allocated(this%m_data)) deallocate(this%m_data) + allocate(this%m_data(n, ncols), stat = flag) + if (flag /= 0) then + call report_memory_error(errmgr, "pd2d_set_data_1", flag) + return + end if + ! if (present(c)) then + ! call this%set_use_data_dependent_colors(.true.) + ! do concurrent (i = 1:n) + ! this%m_data(i, 1) = x(i) + ! this%m_data(i, 2) = y(i) + ! this%m_data(i, 3) = c(i) + ! end do + ! else + ! call this%set_use_data_dependent_colors(.false.) + ! do concurrent (i = 1:n) + ! this%m_data(i, 1) = x(i) + ! this%m_data(i, 2) = y(i) + ! end do + ! end if + if (present(c) .and. present(ps)) then + call this%set_use_data_dependent_colors(.true.) + call this%set_use_variable_size_points(.true.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + this%m_data(i, 3) = ps(i) + this%m_data(i, 4) = c(i) + end do + else if (present(c) .and. .not.present(ps)) then + call this%set_use_data_dependent_colors(.true.) + call this%set_use_variable_size_points(.false.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + this%m_data(i, 3) = c(i) + end do + else if (.not.present(c) .and. present(ps)) then + call this%set_use_data_dependent_colors(.false.) + call this%set_use_variable_size_points(.true.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + this%m_data(i, 3) = ps(i) + end do + else + call this%set_use_data_dependent_colors(.false.) + call this%set_use_variable_size_points(.false.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + end do + end if +end subroutine ! ------------------------------------------------------------------------------ - pure module function pd2d_get_draw_against_y2(this) result(x) - class(plot_data_2d), intent(in) :: this - logical :: x - x = this%m_useY2 - end function +pure function pd2d_get_draw_against_y2(this) result(x) + !! Gets a value determining if the data should be plotted against + !! the secondary y-axis. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + logical :: x + !! Returns true if the data should be plotted against the secondary + !! y-axis; else, false to plot against the primary y-axis. + x = this%m_useY2 +end function ! -------------------- - module subroutine pd2d_set_draw_against_y2(this, x) - class(plot_data_2d), intent(inout) :: this - logical, intent(in) :: x - this%m_useY2 = x - end subroutine +subroutine pd2d_set_draw_against_y2(this, x) + !! Sets a value determining if the data should be plotted against + !! the secondary y-axis. + class(plot_data_2d), intent(inout) :: this + !! The plot_data_2d object. + logical, intent(in) :: x + !! Set to true if the data should be plotted against the + !! secondary y-axis; else, false to plot against the primary y-axis. + this%m_useY2 = x +end subroutine ! ------------------------------------------------------------------------------ - module subroutine pd2d_set_data_2(this, y, err) - ! Arguments - class(plot_data_2d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: y - class(errors), intent(inout), optional, target :: err - - ! Local Variables - integer(int32) :: i, n, flag - class(errors), pointer :: errmgr - type(errors), target :: deferr - - ! Initialization - n = size(y) - if (present(err)) then - errmgr => err - else - errmgr => deferr - end if +subroutine pd2d_set_data_2(this, y, err) + !! Defines the data set to plot. + class(plot_data_2d), intent(inout) :: this + !! The plot_data_2d object. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y-coordinate data. This + !! data will be plotted against its own index. + class(errors), intent(inout), optional, target :: err + !! An error-handling object. - ! Process - if (allocated(this%m_data)) deallocate(this%m_data) - allocate(this%m_data(n, 2), stat = flag) - if (flag /= 0) then - call errmgr%report_error("pd2d_set_data_2", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) - return - end if - do concurrent (i = 1:n) - this%m_data(i, 1) = real(i, real64) - this%m_data(i, 2) = y(i) - end do - end subroutine + ! Local Variables + integer(int32) :: i, n, flag + class(errors), pointer :: errmgr + type(errors), target :: deferr + + ! Initialization + n = size(y) + if (present(err)) then + errmgr => err + else + errmgr => deferr + end if + + ! Process + if (allocated(this%m_data)) deallocate(this%m_data) + allocate(this%m_data(n, 2), stat = flag) + if (flag /= 0) then + call report_memory_error(errmgr, "pd2d_set_data_2", flag) + return + end if + do concurrent (i = 1:n) + this%m_data(i, 1) = real(i, real64) + this%m_data(i, 2) = y(i) + end do +end subroutine ! ------------------------------------------------------------------------------ - module function pd2d_get_x_array(this) result(x) - ! Arguments - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - - ! Process - if (allocated(this%m_data)) then - x = this%m_data(:,1) - end if - end function +function pd2d_get_x_array(this) result(x) + !! Gets the stored X data array. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. + + ! Process + if (allocated(this%m_data)) then + x = this%m_data(:,1) + end if +end function ! ------------------------------------------------------------------------------ - module function pd2d_get_y_array(this) result(x) - ! Arguments - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - - ! Process - if (allocated(this%m_data)) then - x = this%m_data(:,2) - end if - end function +function pd2d_get_y_array(this) result(x) + !! Gets the stored Y data array. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. + + ! Process + if (allocated(this%m_data)) then + x = this%m_data(:,2) + end if +end function ! ****************************************************************************** ! ADDED: OCT. 8, 2020 - JAC ! ------------------------------------------------------------------------------ - module function pd2d_get_c_array(this) result(x) - ! Arguments - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - - ! Process - if (allocated(this%m_data)) then - if (size(this%m_data, 2) == 3) then - x = this%m_data(:,3) - else if (size(this%m_data, 2) == 4) then - x = this%m_data(:,4) - end if +function pd2d_get_c_array(this) result(x) + !! Gets the stored color scaling data array. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. + + ! Process + if (allocated(this%m_data)) then + if (size(this%m_data, 2) == 3) then + x = this%m_data(:,3) + else if (size(this%m_data, 2) == 4) then + x = this%m_data(:,4) end if - end function + end if +end function ! ****************************************************************************** ! ADDED: JAN. 12, 2024 - JAC ! ------------------------------------------------------------------------------ - module function pd2d_get_ps_array(this) result(x) - ! Arguments - class(plot_data_2d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x - - ! Process - if (allocated(this%m_data)) then - if (size(this%m_data, 2) > 2) then - x = this%m_data(:,3) - end if +function pd2d_get_ps_array(this) result(x) + !! Gets the stored point size data array. + class(plot_data_2d), intent(in) :: this + !! The plot_data_2d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. + + ! Process + if (allocated(this%m_data)) then + if (size(this%m_data, 2) > 2) then + x = this%m_data(:,3) end if - end function + end if +end function ! ------------------------------------------------------------------------------ -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_plot_data_3d.f90 b/src/fplot_plot_data_3d.f90 index 8e268ad..eb879e6 100644 --- a/src/fplot_plot_data_3d.f90 +++ b/src/fplot_plot_data_3d.f90 @@ -1,347 +1,438 @@ -! fplot_plot_data_3d.f90 +module fplot_plot_data_3d + use iso_fortran_env + use fplot_plot_data + use fplot_errors + use fplot_simplify + use ferror + use strings + implicit none + private + public :: plot_data_3d + + type, extends(scatter_plot_data) :: plot_data_3d + !! Defines a three-dimensional plot data set. + real(real64), private, allocatable, dimension(:,:) :: m_data + !! An N-by-3 matrix containing the x, y, and z data points. + contains + procedure, public :: get_count => pd3d_get_data_count + procedure, public :: get_x => pd3d_get_x_data + procedure, public :: set_x => pd3d_set_x_data + procedure, public :: get_y => pd3d_get_y_data + procedure, public :: set_y => pd3d_set_y_data + procedure, public :: get_z => pd3d_get_z_data + procedure, public :: set_z => pd3d_set_z_data + procedure, public :: get_axes_string => pd3d_get_axes_cmd + procedure, public :: get_data_string => pd3d_get_data_cmd + procedure, public :: define_data => pd3d_set_data_1 + procedure, public :: get_x_data => pd3d_get_x_array + procedure, public :: get_y_data => pd3d_get_y_array + procedure, public :: get_z_data => pd3d_get_z_array + procedure, public :: get_color_data => pd3d_get_c_array + procedure, public :: get_point_size_data => pd3d_get_c_array + end type -submodule (fplot_core) fplot_plot_data_3d contains ! ------------------------------------------------------------------------------ - pure module function pd3d_get_data_count(this) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32) :: x - if (allocated(this%m_data)) then - x = size(this%m_data, 1) - else - x = 0 - end if - end function +pure function pd3d_get_data_count(this) result(x) + !! Gets the number of data points. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + integer(int32) :: x + !! The number of data points. + if (allocated(this%m_data)) then + x = size(this%m_data, 1) + else + x = 0 + end if +end function ! ------------------------------------------------------------------------------ - pure module function pd3d_get_x_data(this, index) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - if (allocated(this%m_data)) then - x = this%m_data(index, 1) - else - x = 0.0d0 - end if - end function +pure function pd3d_get_x_data(this, index) result(x) + !! Gets the requested X data point. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + integer(int32), intent(in) :: index + !! The index of the data point to retrieve. + real(real64) :: x + !! The requested data point. + if (allocated(this%m_data)) then + x = this%m_data(index, 1) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine pd3d_set_x_data(this, index, x) - class(plot_data_3d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - if (allocated(this%m_data)) then - this%m_data(index, 1) = x - end if - end subroutine +subroutine pd3d_set_x_data(this, index, x) + !! Sets the requested X data point. + class(plot_data_3d), intent(inout) :: this + !! The plot_data_3d object. + integer(int32), intent(in) :: index + !! The index of the data point to replace. + real(real64), intent(in) :: x + !! The data point. + if (allocated(this%m_data)) then + this%m_data(index, 1) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - pure module function pd3d_get_y_data(this, index) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - if (allocated(this%m_data)) then - x = this%m_data(index, 2) - else - x = 0.0d0 - end if - end function +pure function pd3d_get_y_data(this, index) result(x) + !! Gets the requested Y data point. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + integer(int32), intent(in) :: index + !! The index of the data point to retrieve. + real(real64) :: x + !! The requested data point. + if (allocated(this%m_data)) then + x = this%m_data(index, 2) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine pd3d_set_y_data(this, index, x) - class(plot_data_3d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - if (allocated(this%m_data)) then - this%m_data(index, 2) = x - end if - end subroutine +subroutine pd3d_set_y_data(this, index, x) + !! Sets the requested Y data point. + class(plot_data_3d), intent(inout) :: this + !! The plot_data_3d object. + integer(int32), intent(in) :: index + !! The index of the data point to replace. + real(real64), intent(in) :: x + !! The data point. + if (allocated(this%m_data)) then + this%m_data(index, 2) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - pure module function pd3d_get_z_data(this, index) result(x) - class(plot_data_3d), intent(in) :: this - integer(int32), intent(in) :: index - real(real64) :: x - if (allocated(this%m_data)) then - x = this%m_data(index, 3) - else - x = 0.0d0 - end if - end function +pure function pd3d_get_z_data(this, index) result(x) + !! Gets the requested Z data point. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + integer(int32), intent(in) :: index + !! The index of the data point to retrieve. + real(real64) :: x + !! The requested data point. + if (allocated(this%m_data)) then + x = this%m_data(index, 3) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine pd3d_set_z_data(this, index, x) - class(plot_data_3d), intent(inout) :: this - integer(int32), intent(in) :: index - real(real64), intent(in) :: x - if (allocated(this%m_data)) then - this%m_data(index, 3) = x - end if - end subroutine +subroutine pd3d_set_z_data(this, index, x) + !! Sets the requested Z data point. + class(plot_data_3d), intent(inout) :: this + !! The plot_data_3d object. + integer(int32), intent(in) :: index + !! The index of the data point to replace. + real(real64), intent(in) :: x + !! The data point. + if (allocated(this%m_data)) then + this%m_data(index, 3) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - module function pd3d_get_axes_cmd(this) result(x) - ! Arguments - class(plot_data_3d), intent(in) :: this - character(len = :), allocatable :: x +function pd3d_get_axes_cmd(this) result(x) + !! Gets the GNUPLOT command string defining which axes the data + !! is to be plotted against. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + character(len = :), allocatable :: x + !! The command string. - ! Output - x = "" - end function + ! Output + x = "" +end function ! ------------------------------------------------------------------------------ - module function pd3d_get_data_cmd(this) result(x) - ! Arguments - class(plot_data_3d), intent(in) :: this - character(len = :), allocatable :: x +function pd3d_get_data_cmd(this) result(x) + !! Gets the GNUPLOT command string containing the actual data to plot. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + character(len = :), allocatable :: x + !! The command string. - ! Local Variables - type(string_builder) :: str - integer(int32) :: i - character :: delimiter, nl - real(real64), allocatable, dimension(:) :: xv, yv, zv, cv, ps - real(real64), allocatable, dimension(:,:) :: pts - real(real64) :: tol, maxz, minz, eps - logical :: usecolors, usevarpoints + ! Local Variables + type(string_builder) :: str + integer(int32) :: i + character :: delimiter, nl + real(real64), allocatable, dimension(:) :: xv, yv, zv, cv, ps + real(real64), allocatable, dimension(:,:) :: pts + real(real64) :: tol, maxz, minz, eps + logical :: usecolors, usevarpoints - ! Initialization - call str%initialize() - delimiter = achar(9) ! tab delimiter - nl = new_line(nl) - usecolors = this%get_use_data_dependent_colors() - usevarpoints = this%get_use_variable_size_points() + ! Initialization + call str%initialize() + delimiter = achar(9) ! tab delimiter + nl = new_line(nl) + usecolors = this%get_use_data_dependent_colors() + usevarpoints = this%get_use_variable_size_points() - ! Process - xv = this%get_x_data() - yv = this%get_y_data() - zv = this%get_z_data() - if (usecolors .and. usevarpoints) then - cv = this%get_color_data() - ps = this%get_point_size_data() - do i = 1, size(xv) - call str%append(to_string(xv(i))) + ! Process + xv = this%get_x_data() + yv = this%get_y_data() + zv = this%get_z_data() + if (usecolors .and. usevarpoints) then + cv = this%get_color_data() + ps = this%get_point_size_data() + do i = 1, size(xv) + call str%append(to_string(xv(i))) + call str%append(delimiter) + call str%append(to_string(yv(i))) + call str%append(delimiter) + call str%append(to_string(zv(i))) + call str%append(delimiter) + call str%append(to_string(ps(i))) + call str%append(delimiter) + call str%append(to_string(cv(i))) + call str%append(nl) + end do + else if (usecolors .and. .not.usevarpoints) then + cv = this%get_color_data() + do i = 1, size(xv) + call str%append(to_string(xv(i))) + call str%append(delimiter) + call str%append(to_string(yv(i))) + call str%append(delimiter) + call str%append(to_string(zv(i))) + call str%append(delimiter) + call str%append(to_string(cv(i))) + call str%append(nl) + end do + else if (.not.usecolors .and. usevarpoints) then + ps = this%get_point_size_data() + do i = 1, size(xv) + call str%append(to_string(xv(i))) + call str%append(delimiter) + call str%append(to_string(yv(i))) + call str%append(delimiter) + call str%append(to_string(zv(i))) + call str%append(delimiter) + call str%append(to_string(ps(i))) + call str%append(nl) + end do + else + if (this%get_simplify_data()) then + maxz = maxval(zv) + minz = minval(zv) + tol = abs(this%get_simplification_factor() * (maxz - minz)) + eps = 10.0d0 * epsilon(eps) + if (tol < eps) tol = eps + pts = simplify_polyline(xv, yv, zv, tol) + do i = 1, size(pts, 1) + call str%append(to_string(pts(i,1))) call str%append(delimiter) - call str%append(to_string(yv(i))) - call str%append(delimiter) - call str%append(to_string(zv(i))) + call str%append(to_string(pts(i,2))) call str%append(delimiter) - call str%append(to_string(ps(i))) - call str%append(delimiter) - call str%append(to_string(cv(i))) + call str%append(to_string(pts(i,3))) call str%append(nl) end do - else if (usecolors .and. .not.usevarpoints) then - cv = this%get_color_data() - do i = 1, size(xv) - call str%append(to_string(xv(i))) - call str%append(delimiter) - call str%append(to_string(yv(i))) - call str%append(delimiter) - call str%append(to_string(zv(i))) - call str%append(delimiter) - call str%append(to_string(cv(i))) - call str%append(nl) - end do - else if (.not.usecolors .and. usevarpoints) then - ps = this%get_point_size_data() + else do i = 1, size(xv) call str%append(to_string(xv(i))) call str%append(delimiter) call str%append(to_string(yv(i))) call str%append(delimiter) call str%append(to_string(zv(i))) - call str%append(delimiter) - call str%append(to_string(ps(i))) call str%append(nl) end do - else - if (this%get_simplify_data()) then - maxz = maxval(zv) - minz = minval(zv) - tol = abs(this%get_simplification_factor() * (maxz - minz)) - eps = 10.0d0 * epsilon(eps) - if (tol < eps) tol = eps - pts = simplify_polyline(xv, yv, zv, tol) - do i = 1, size(pts, 1) - call str%append(to_string(pts(i,1))) - call str%append(delimiter) - call str%append(to_string(pts(i,2))) - call str%append(delimiter) - call str%append(to_string(pts(i,3))) - call str%append(nl) - end do - else - do i = 1, size(xv) - call str%append(to_string(xv(i))) - call str%append(delimiter) - call str%append(to_string(yv(i))) - call str%append(delimiter) - call str%append(to_string(zv(i))) - call str%append(nl) - end do - end if end if + end if - ! End - x = char(str%to_string()) - end function + ! End + x = char(str%to_string()) +end function ! ------------------------------------------------------------------------------ - module subroutine pd3d_set_data_1(this, x, y, z, c, ps, err) - ! Arguments - class(plot_data_3d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, z - real(real64), intent(in), dimension(:), optional :: c, ps - class(errors), intent(inout), optional, target :: err +subroutine pd3d_set_data_1(this, x, y, z, c, ps, err) + !! Defines the data set. + class(plot_data_3d), intent(inout) :: this + !! The plot_data_3d object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinate data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinate data. + real(real64), intent(in), dimension(:) :: z + !! An N-element array containing the z coordinate data. + real(real64), intent(in), dimension(:), optional :: c + !! An N-element array defining how color should vary with the + !! current colormap for each value. + real(real64), intent(in), dimension(:), optional :: ps + !! An N-element array defining the size of each data point. + class(errors), intent(inout), optional, target :: err + !! An error handling object. - ! Local Variables - integer(int32) :: i, n, flag, ncols - class(errors), pointer :: errmgr - type(errors), target :: deferr + ! Local Variables + integer(int32) :: i, n, flag, ncols + class(errors), pointer :: errmgr + type(errors), target :: deferr - ! Initialization - n = size(x) - ncols = 3 - if (present(c)) ncols = ncols + 1 - if (present(ps)) ncols = ncols + 1 - if (present(err)) then - errmgr => err - else - errmgr => deferr - end if + ! Initialization + n = size(x) + ncols = 3 + if (present(c)) ncols = ncols + 1 + if (present(ps)) ncols = ncols + 1 + if (present(err)) then + errmgr => err + else + errmgr => deferr + end if - ! Input Check - if (size(y) /= n .or. size(z) /= n) then - call errmgr%report_error("pd3d_set_data_1", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + ! Input Check + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, "pd3d_set_data_1", & + "y", n, size(y)) + return + end if + if (size(z) /= n) then + call report_array_size_mismatch_error(errmgr, "pd3d_set_data_1", & + "z", n, size(z)) + return + end if + if (present(c)) then + if (size(c) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pd3d_set_data_1", "c", n, size(c)) return end if - if (present(c)) then - if (size(c) /= n) then - call errmgr%report_error("pd3d_set_data_1", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) - return - end if + end if + if (present(ps)) then + if (size(ps) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pd3d_set_data_1", "ps", n, size(ps)) end if + end if - ! Process - if (allocated(this%m_data)) deallocate(this%m_data) - allocate(this%m_data(n, ncols), stat = flag) - if (flag /= 0) then - call errmgr%report_error("pd3d_set_data_1", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) - return - end if - if (present(c) .and. present(ps)) then - call this%set_use_data_dependent_colors(.true.) - call this%set_use_variable_size_points(.true.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - this%m_data(i, 3) = z(i) - this%m_data(i, 4) = ps(i) - this%m_data(i, 5) = c(i) - end do - else if (present(c) .and. .not.present(ps)) then - call this%set_use_data_dependent_colors(.true.) - call this%set_use_variable_size_points(.false.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - this%m_data(i, 3) = z(i) - this%m_data(i, 4) = c(i) - end do - else if (.not.present(c) .and. present(ps)) then - call this%set_use_data_dependent_colors(.false.) - call this%set_use_variable_size_points(.true.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - this%m_data(i, 3) = z(i) - this%m_data(i, 4) = ps(i) - end do - else - call this%set_use_data_dependent_colors(.false.) - call this%set_use_variable_size_points(.false.) - do concurrent (i = 1:n) - this%m_data(i, 1) = x(i) - this%m_data(i, 2) = y(i) - this%m_data(i, 3) = z(i) - end do - end if - end subroutine + ! Process + if (allocated(this%m_data)) deallocate(this%m_data) + allocate(this%m_data(n, ncols), stat = flag) + if (flag /= 0) then + call report_memory_error(errmgr, "pd3d_set_data_1", flag) + return + end if + if (present(c) .and. present(ps)) then + call this%set_use_data_dependent_colors(.true.) + call this%set_use_variable_size_points(.true.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + this%m_data(i, 3) = z(i) + this%m_data(i, 4) = ps(i) + this%m_data(i, 5) = c(i) + end do + else if (present(c) .and. .not.present(ps)) then + call this%set_use_data_dependent_colors(.true.) + call this%set_use_variable_size_points(.false.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + this%m_data(i, 3) = z(i) + this%m_data(i, 4) = c(i) + end do + else if (.not.present(c) .and. present(ps)) then + call this%set_use_data_dependent_colors(.false.) + call this%set_use_variable_size_points(.true.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + this%m_data(i, 3) = z(i) + this%m_data(i, 4) = ps(i) + end do + else + call this%set_use_data_dependent_colors(.false.) + call this%set_use_variable_size_points(.false.) + do concurrent (i = 1:n) + this%m_data(i, 1) = x(i) + this%m_data(i, 2) = y(i) + this%m_data(i, 3) = z(i) + end do + end if +end subroutine ! ------------------------------------------------------------------------------ - module function pd3d_get_x_array(this) result(x) - ! Arguments - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x +function pd3d_get_x_array(this) result(x) + !! Gets the stored X data array. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. - ! Process - if (allocated(this%m_data)) then - x = this%m_data(:,1) - end if - end function + ! Process + if (allocated(this%m_data)) then + x = this%m_data(:,1) + end if +end function ! ------------------------------------------------------------------------------ - module function pd3d_get_y_array(this) result(x) - ! Arguments - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x +function pd3d_get_y_array(this) result(x) + !! Gets the stored Y data array. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. - ! Process - if (allocated(this%m_data)) then - x = this%m_data(:,2) - end if - end function + ! Process + if (allocated(this%m_data)) then + x = this%m_data(:,2) + end if +end function ! ------------------------------------------------------------------------------ - module function pd3d_get_z_array(this) result(x) - ! Arguments - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x +function pd3d_get_z_array(this) result(x) + !! Gets the stored Z data array. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. - ! Process - if (allocated(this%m_data)) then - x = this%m_data(:,3) - end if - end function + ! Process + if (allocated(this%m_data)) then + x = this%m_data(:,3) + end if +end function ! ****************************************************************************** ! ADDED: OCT. 9, 2020 - JAC ! ------------------------------------------------------------------------------ - module function pd3d_get_c_array(this) result(x) - ! Arguments - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x +function pd3d_get_c_array(this) result(x) + !! Gets the stored color scaling data array. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. - ! Process - if (allocated(this%m_data)) then - if (size(this%m_data, 2) == 4) then - x = this%m_data(:,4) - else if (size(this%m_data, 2) == 5) then - x = this%m_data(:,5) - end if + ! Process + if (allocated(this%m_data)) then + if (size(this%m_data, 2) == 4) then + x = this%m_data(:,4) + else if (size(this%m_data, 2) == 5) then + x = this%m_data(:,5) end if - end function + end if +end function ! ****************************************************************************** ! ADDED: JAN. 12, 2020 - JAC ! ------------------------------------------------------------------------------ - module function pd3d_get_ps_array(this) result(x) - ! Arguments - class(plot_data_3d), intent(in) :: this - real(real64), allocatable, dimension(:) :: x +function pd3d_get_ps_array(this) result(x) + !! Gets the stored point scaling data array. + class(plot_data_3d), intent(in) :: this + !! The plot_data_3d object. + real(real64), allocatable, dimension(:) :: x + !! A copy of the stored data array. - ! Process - if (allocated(this%m_data)) then - if (size(this%m_data, 2) > 3) then - x = this%m_data(:,4) - end if + ! Process + if (allocated(this%m_data)) then + if (size(this%m_data, 2) > 3) then + x = this%m_data(:,4) end if - end function + end if +end function ! ------------------------------------------------------------------------------ -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_plot_data_bar.f90 b/src/fplot_plot_data_bar.f90 index 1b26440..1b1159a 100644 --- a/src/fplot_plot_data_bar.f90 +++ b/src/fplot_plot_data_bar.f90 @@ -1,11 +1,70 @@ ! fplot_plot_data_bar.f90 -submodule (fplot_core) fplot_plot_data_bar +module fplot_plot_data_bar + use iso_fortran_env + use fplot_plot_data + use fplot_errors + use fplot_colors + use strings + use ferror + implicit none + private + public :: plot_data_bar + + type, extends(plot_data_colored) :: plot_data_bar + !! Defines a data set tailored to bar charts. + type(string), private, allocatable, dimension(:) :: m_axisLabels + !! An array containing axis labels to associate with each bar. + real(real64), private, allocatable, dimension(:,:) :: m_barData + !! An array of data defining each bar - the matrix contains + !! multiple columns to allow multiple bars per label. + logical, private :: m_useAxisLabels = .true. + !! Determines if the axis labels should be used - only applicable + !! if there is existing data stored in m_axisLabels & m_axisLabels + !! is the same size as m_barData. + logical, private :: m_useY2 = .false. + !! Draw against the secondary y axis? + logical, private :: m_filled = .true. + !! Determines if each bar is filled. + real(real32), private :: m_alpha = 1.0 + !! The alpha value (transparency) for each bar. + contains + procedure, public :: get_count => pdb_get_count + procedure, public :: get => pdb_get_data + procedure, public :: set => pdb_set_data + procedure, public :: get_data => pdb_get_data_set + procedure, public :: get_label => pdb_get_label + procedure, public :: set_label => pdb_set_label + procedure, public :: get_use_labels => pdb_get_use_labels + procedure, public :: set_use_labels => pdb_set_use_labels + procedure, public :: get_command_string => pdb_get_cmd + procedure, public :: get_data_string => pdb_get_data_cmd + procedure, public :: get_axes_string => pdb_get_axes_cmd + procedure, public :: get_bar_per_label_count => pdb_get_col_count + procedure, public :: get_draw_against_y2 => pdb_get_use_y2 + procedure, public :: set_draw_against_y2 => pdb_set_use_y2 + procedure, public :: get_is_filled => pdb_get_is_filled + procedure, public :: set_is_filled => pdb_set_is_filled + procedure, public :: get_transparency => pdb_get_alpha + procedure, public :: set_transparency => pdb_set_alpha + generic, public :: define_data => pdb_set_data_1, pdb_set_data_2, & + pdb_set_data_3 + procedure, private :: pdb_set_data_1 + procedure, private :: pdb_set_data_2 + procedure, private :: pdb_set_data_3 + procedure, public :: set_data_1 => pdb_set_data_1_core + procedure, public :: set_data_2 => pdb_set_data_2_core + procedure, public :: set_data_3 => pdb_set_data_3_core + end type + contains ! ------------------------------------------------------------------------------ -pure module function pdb_get_count(this) result(x) +pure function pdb_get_count(this) result(x) + !! Gets the number of stored data points. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. integer(int32) :: x + !! The number of stored data points. if (allocated(this%m_barData)) then x = size(this%m_barData, 1) else @@ -14,10 +73,16 @@ pure module function pdb_get_count(this) result(x) end function ! ------------------------------------------------------------------------------ -pure module function pdb_get_data(this, index, col) result(x) +pure function pdb_get_data(this, index, col) result(x) + !! Gets the requested data point. class(plot_data_bar), intent(in) :: this - integer(int32), intent(in) :: index, col + !! The plot_data_bar object. + integer(int32), intent(in) :: index + !! The data point index. + integer(int32), intent(in) :: col + !! The column index. real(real64) :: x + !! The value. if (allocated(this%m_barData)) then x = this%m_barData(index, col) else @@ -26,20 +91,30 @@ pure module function pdb_get_data(this, index, col) result(x) end function ! ------------------------------------------------------------------------------ -module subroutine pdb_set_data(this, index, col, x) +subroutine pdb_set_data(this, index, col, x) + !! Replaces the requested data point. class(plot_data_bar), intent(inout) :: this - integer(int32), intent(in) :: index, col + !! The plot_data_bar object. + integer(int32), intent(in) :: index + !! The data point index. + integer(int32), intent(in) :: col + !! The column index. real(real64), intent(in) :: x + !! The new value. if (allocated(this%m_barData)) then this%m_barData(index, col) = x end if end subroutine ! ------------------------------------------------------------------------------ -pure module function pdb_get_data_set(this, col) result(x) +pure function pdb_get_data_set(this, col) result(x) + !! Gets the requested data set. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. integer(int32), intent(in) :: col + !! The column index. real(real64), allocatable, dimension(:) :: x + !! A copy of the data set. if (allocated(this%m_barData)) then x = this%m_barData(:,col) else @@ -48,10 +123,14 @@ pure module function pdb_get_data_set(this, col) result(x) end function ! ------------------------------------------------------------------------------ -pure module function pdb_get_label(this, index) result(x) +pure function pdb_get_label(this, index) result(x) + !! Gets the axis label associated with a specific data set. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. integer(int32), intent(in) :: index + !! The index of the data set. character(len = :), allocatable :: x + !! The label. if (allocated(this%m_axisLabels)) then x = char(this%m_axisLabels(index)) else @@ -60,34 +139,46 @@ pure module function pdb_get_label(this, index) result(x) end function ! ------------------------------------------------------------------------------ -module subroutine pdb_set_label(this, index, txt) +subroutine pdb_set_label(this, index, txt) + !! Sets the axis label for a specific data set. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. integer(int32) :: index + !! The index of the data set. character(len = *), intent(in) :: txt + !! The label. if (allocated(this%m_axisLabels)) then this%m_axisLabels(index) = txt end if end subroutine ! ------------------------------------------------------------------------------ -pure module function pdb_get_use_labels(this) result(x) +pure function pdb_get_use_labels(this) result(x) + !! Gets a value determining if labels are used to identify the data. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. logical :: x + !! Returns true if labels are used; else, false. x = this%m_useAxisLabels end function ! ------------------------------------------------------------------------------ -module subroutine pdb_set_use_labels(this, x) +subroutine pdb_set_use_labels(this, x) + !! Sets a value determining if labels are used to identify the data. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. logical, intent(in) :: x + !! Set to true if labels are used; else, false. this%m_useAxisLabels = x end subroutine ! ------------------------------------------------------------------------------ -module function pdb_get_cmd(this) result(x) - ! Arguments +function pdb_get_cmd(this) result(x) + !! Gets the GNUPLOT command string for this object. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -151,10 +242,12 @@ module function pdb_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ -module function pdb_get_data_cmd(this) result(x) - ! Arguments +function pdb_get_data_cmd(this) result(x) + !! Gets the GNUPLOT command string defining the data for this object. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -195,10 +288,12 @@ module function pdb_get_data_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ -module function pdb_get_axes_cmd(this) result(x) - ! Arguments +function pdb_get_axes_cmd(this) result(x) + !! Gets the GNUPLOT command defining which axes to plot against. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. character(len = :), allocatable :: x + !! The command string. ! Define which axes the data is to be plotted against if (this%get_draw_against_y2()) then @@ -209,9 +304,12 @@ module function pdb_get_axes_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ -pure module function pdb_get_col_count(this) result(x) +pure function pdb_get_col_count(this) result(x) + !! Gets the number of data sets (columns). class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. integer(int32) :: x + !! The count. if (allocated(this%m_barData)) then x = size(this%m_barData, 2) else @@ -220,80 +318,112 @@ pure module function pdb_get_col_count(this) result(x) end function ! ------------------------------------------------------------------------------ -pure module function pdb_get_use_y2(this) result(x) +pure function pdb_get_use_y2(this) result(x) + !! Gets a value determining if the data should be plotted against a + !! secondary y-axis. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. logical :: x + !! Returns true to plot against a secondary y-axis; else, false. x = this%m_useY2 end function ! ------------------------------------------------------------------------------ -module subroutine pdb_set_use_y2(this, x) +subroutine pdb_set_use_y2(this, x) + !! Sets a value determining if the data should be plotted against a + !! secondary y-axis. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. logical, intent(in) :: x + !! Set to true to plot against a secondary y-axis; else, false. this%m_useY2 = x end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdb_set_data_1(this, x, err) - ! Arguments +subroutine pdb_set_data_1(this, x, err) + !! Defines a single data set. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. real(real64), intent(in), dimension(:) :: x + !! The data to plot. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Process call this%set_data_1(x, err) end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdb_set_data_2(this, labels, x, err) - ! Arguments +subroutine pdb_set_data_2(this, labels, x, err) + !! Defines data along with associated axis labels. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. class(string), intent(in), dimension(:) :: labels + !! The axis labels to associate with the data. real(real64), intent(in), dimension(:) :: x + !! The data set. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Process call this%set_data_2(labels, x, err) end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdb_set_data_3(this, labels, x, fmt, err) - ! Arguments +subroutine pdb_set_data_3(this, labels, x, fmt, err) + !! Defines data along with labels and formatting information. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. real(real64), intent(in), dimension(:) :: labels + !! The axis labels to associate with the data. real(real64), intent(in), dimension(:) :: x + !! The data set. character(len = *), intent(in), optional :: fmt + !! The format string for the labels (e.g. '(I0)', etc.). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Process call this%set_data_3(labels, x, fmt, err) end subroutine ! ------------------------------------------------------------------------------ -pure module function pdb_get_is_filled(this) result(x) +pure function pdb_get_is_filled(this) result(x) + !! Gets a value determining if each bar is filled. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. logical :: x + !! Returns true if the bars are to be filled; else, false. x = this%m_filled end function ! ------------------------------------------------------------------------------ -module subroutine pdb_set_is_filled(this, x) +subroutine pdb_set_is_filled(this, x) + !! Sets a value determining if each bar is filled. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. logical, intent(in) :: x + !! Set to true if the bars are to be filled; else, false. this%m_filled = x end subroutine ! ------------------------------------------------------------------------------ -pure module function pdb_get_alpha(this) result(x) +pure function pdb_get_alpha(this) result(x) + !! Gets the alpha (transparency) for the bar color. class(plot_data_bar), intent(in) :: this + !! The plot_data_bar object. real(real32) :: x + !! The alpha value ([0, 1]). x = this%m_alpha end function ! ------------------------------------------------------------------------------ -module subroutine pdb_set_alpha(this, x) +subroutine pdb_set_alpha(this, x) + !! Gets the alpha (transparency) for the bar color. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. real(real32), intent(in) :: x + !! The alpha value ([0, 1]). if (x > 1.0) then this%m_alpha = 1.0 else if (x < 0.0) then @@ -304,11 +434,14 @@ module subroutine pdb_set_alpha(this, x) end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdb_set_data_1_core(this, x, err) - ! Arguments +subroutine pdb_set_data_1_core(this, x, err) + !! Defines the data set. class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. real(real64), intent(in), dimension(:) :: x + !! The data set. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables class(errors), pointer :: errmgr @@ -328,20 +461,23 @@ module subroutine pdb_set_data_1_core(this, x, err) if (allocated(this%m_barData)) deallocate(this%m_barData) allocate(this%m_barData(n, 1), stat = flag) if (flag /= 0) then - call errmgr%report_error("pdb_set_data_1_core", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pdb_set_data_1_core", flag) return end if this%m_barData(:,1) = x end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdb_set_data_2_core(this, labels, x, err) +subroutine pdb_set_data_2_core(this, labels, x, err) ! Arguments class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. class(string), intent(in), dimension(:) :: labels + !! The axis labels. real(real64), intent(in), dimension(:) :: x + !! The data set. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables class(errors), pointer :: errmgr @@ -358,9 +494,8 @@ module subroutine pdb_set_data_2_core(this, labels, x, err) ! Input Check if (size(labels) /= n) then - call errmgr%report_error("pdb_set_data_2_core", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "pdb_set_data_2_core", & + "labels", n, size(labels)) return end if @@ -370,8 +505,7 @@ module subroutine pdb_set_data_2_core(this, labels, x, err) allocate(this%m_barData(n, 1), stat = flag) if (flag == 0) allocate(this%m_axisLabels(n), stat = flag) if (flag /= 0) then - call errmgr%report_error("pdb_set_data_2_core", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pdb_set_data_2_core", flag) return end if this%m_barData(:,1) = x @@ -379,13 +513,18 @@ module subroutine pdb_set_data_2_core(this, labels, x, err) end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdb_set_data_3_core(this, labels, x, fmt, err) +subroutine pdb_set_data_3_core(this, labels, x, fmt, err) ! Arguments class(plot_data_bar), intent(inout) :: this + !! The plot_data_bar object. real(real64), intent(in), dimension(:) :: labels + !! The axis labels. real(real64), intent(in), dimension(:) :: x + !! The data set. character(len = *), intent(in), optional :: fmt + !! The format string for the labels (e.g. '(I0)', etc.). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables class(errors), pointer :: errmgr @@ -403,17 +542,15 @@ module subroutine pdb_set_data_3_core(this, labels, x, fmt, err) ! Input Check if (size(labels) /= n) then - call errmgr%report_error("pdb_set_data_3_core", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "pdb_set_data_3_core", & + "labels", n, size(labels)) return end if ! Convert the numeric labels to strings allocate(lbls(n), stat = flag) if (flag /= 0) then - call errmgr%report_error("pdb_set_data_3_core", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pdb_set_data_3_core", flag) return end if do i = 1, n @@ -426,8 +563,7 @@ module subroutine pdb_set_data_3_core(this, labels, x, fmt, err) allocate(this%m_barData(n, 1), stat = flag) if (flag == 0) allocate(this%m_axisLabels(n), stat = flag) if (flag /= 0) then - call errmgr%report_error("pdb_set_data_3_core", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pdb_set_data_3_core", flag) return end if this%m_barData(:,1) = x @@ -435,4 +571,4 @@ module subroutine pdb_set_data_3_core(this, labels, x, fmt, err) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_plot_data_colored.f90 b/src/fplot_plot_data_colored.f90 deleted file mode 100644 index f3bbbef..0000000 --- a/src/fplot_plot_data_colored.f90 +++ /dev/null @@ -1,39 +0,0 @@ -! fplot_plot_data_colored.f90 - -submodule (fplot_core) fplot_plot_data_colored -contains -! ------------------------------------------------------------------------------ - pure module function pdc_get_line_color(this) result(x) - class(plot_data_colored), intent(in) :: this - type(color) :: x - if (this%m_useAutoColor) then - x = color_list(this%get_color_index()) - else - x = this%m_color - end if - end function - -! -------------------- - module subroutine pdc_set_line_color(this, x) - class(plot_data_colored), intent(inout) :: this - type(color), intent(in) :: x - this%m_color = x - this%m_useAutoColor = .false. - end subroutine - -! ------------------------------------------------------------------------------ - pure module function pdc_get_color_index(this) result(x) - class(plot_data_colored), intent(in) :: this - integer(int32) :: x - x = this%m_colorIndex - end function - -! -------------------- - module subroutine pdc_set_color_index(this, x) - class(plot_data_colored), intent(inout) :: this - integer(int32), intent(in) :: x - this%m_colorIndex = x - end subroutine - -! ------------------------------------------------------------------------------ -end submodule diff --git a/src/fplot_plot_data_error_bars.f90 b/src/fplot_plot_data_error_bars.f90 index eb98166..aab2560 100644 --- a/src/fplot_plot_data_error_bars.f90 +++ b/src/fplot_plot_data_error_bars.f90 @@ -1,12 +1,63 @@ ! fplot_plot_data_error_bars.f90 -submodule (fplot_core) fplot_plot_data_error_bars +module fplot_plot_data_error_bars + use iso_fortran_env + use fplot_plot_data + use fplot_errors + use fplot_colors + use ferror + use strings + implicit none + private + public :: plot_data_error_bars + + type, extends(plot_data_colored) :: plot_data_error_bars + !! Defines a 2D error-bar based data set. + logical, private :: m_xBars = .false. + !! Display x error bars? + logical, private :: m_yBars = .false. + !! Display y error bars? + real(real64), private, allocatable, dimension(:,:) :: m_data + !! A matrix containing the raw and error data. Column 1 is for the + !! x coordinate, column 2 for the y coordinate, and the remaining + !! columns are for the error data (x, then y if applicable). + logical, private :: m_box = .false. + !! Display an error box for the case where x and y errors are + !! defined. + logical, private :: m_range = .false. + !! Plot error bars using a defined range vs. a +/- value. + contains + procedure, public :: get_command_string => pde_get_cmd + procedure, public :: get_data_string => pde_get_data_cmd + generic, public :: define_x_error_data => pde_define_x_err, & + pde_define_x_err_lim + generic, public :: define_y_error_data => pde_define_y_err, & + pde_define_y_err_lim + generic, public :: define_xy_error_data => pde_define_xy_err, & + pde_define_xy_err_lim + procedure, public :: get_plot_x_error_bars => pde_get_plot_x_err + procedure, public :: get_plot_y_error_bars => pde_get_plot_y_err + procedure, public :: get_count => pde_get_count + procedure, public :: get_use_error_box => pde_get_box + procedure, public :: set_use_error_box => pde_set_box + procedure, public :: get_use_range => pde_get_use_range + + procedure :: pde_define_x_err + procedure :: pde_define_y_err + procedure :: pde_define_xy_err + procedure :: pde_define_x_err_lim + procedure :: pde_define_y_err_lim + procedure :: pde_define_xy_err_lim + end type + contains ! ------------------------------------------------------------------------------ - module function pde_get_cmd(this) result(cmd) - ! Arguments + function pde_get_cmd(this) result(cmd) + !! Gets the appropriate GNUPLOT command string for the object. class(plot_data_error_bars), intent(in) :: this + !! The plot_data_error_bars object. character(len = :), allocatable :: cmd + !! The command string. ! Local Variables type(string_builder) :: str @@ -50,10 +101,12 @@ module function pde_get_cmd(this) result(cmd) end function ! ------------------------------------------------------------------------------ - module function pde_get_data_cmd(this) result(cmd) - ! Arguments + function pde_get_data_cmd(this) result(cmd) + !! Gets the appropriate GNUPLOT commands to plot the data itself. class(plot_data_error_bars), intent(in) :: this + !! The plot_data_error_bars object. character(len = :), allocatable :: cmd + !! The command string. ! Local Variables type(string_builder) :: str @@ -146,11 +199,18 @@ module function pde_get_data_cmd(this) result(cmd) end function ! ------------------------------------------------------------------------------ - module subroutine pde_define_x_err(this, x, y, xerr, err) - ! Arguments + subroutine pde_define_x_err(this, x, y, xerr, err) + !! Defines the x error data. class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xerr + !! The plot_data_error_bars object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinates of the data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinates of the data. + real(real64), intent(in), dimension(:) :: xerr + !! An N-element array containing the x errors at each data point. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: i, n, flag @@ -166,10 +226,15 @@ module subroutine pde_define_x_err(this, x, y, xerr, err) end if ! Input Checking - if (size(y) /= n .or. size(xerr) /= n) then - call errmgr%report_error("pde_define_x_err", & - "Input arrays must be the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, "pde_define_x_err", & + "y", n, size(y)) + return + end if + + if (size(xerr) /= n) then + call report_array_size_mismatch_error(errmgr, "pde_define_x_err", & + "xerr", n, size(xerr)) return end if @@ -180,8 +245,7 @@ module subroutine pde_define_x_err(this, x, y, xerr, err) if (allocated(this%m_data)) deallocate(this%m_data) allocate(this%m_data(n, 3), stat = flag) if (flag /= 0) then - call errmgr%report_error("pde_define_x_err", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pde_define_x_err", flag) return end if do i = 1, n @@ -194,11 +258,18 @@ module subroutine pde_define_x_err(this, x, y, xerr, err) end subroutine ! ------------------------------------------------------------------------------ - module subroutine pde_define_y_err(this, x, y, yerr, err) - ! Arguments + subroutine pde_define_y_err(this, x, y, yerr, err) + !! Defines the y error data. class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, yerr + !! The plot_data_error_bars object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinates of the data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinates of the data. + real(real64), intent(in), dimension(:) :: yerr + !! An N-element array containing the y errors at each data point. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: i, n, flag @@ -214,10 +285,14 @@ module subroutine pde_define_y_err(this, x, y, yerr, err) end if ! Input Checking - if (size(y) /= n .or. size(yerr) /= n) then - call errmgr%report_error("pde_define_y_err", & - "Input arrays must be the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, "pde_define_y_err", & + "y", n, size(y)) + return + end if + if (size(yerr) /= n) then + call report_array_size_mismatch_error(errmgr, "pde_define_y_err", & + "yerr", n, size(yerr)) return end if @@ -228,8 +303,7 @@ module subroutine pde_define_y_err(this, x, y, yerr, err) if (allocated(this%m_data)) deallocate(this%m_data) allocate(this%m_data(n, 3), stat = flag) if (flag /= 0) then - call errmgr%report_error("pde_define_y_err", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pde_define_y_err", flag) return end if do i = 1, n @@ -242,11 +316,20 @@ module subroutine pde_define_y_err(this, x, y, yerr, err) end subroutine ! ------------------------------------------------------------------------------ - module subroutine pde_define_xy_err(this, x, y, xerr, yerr, err) - ! Arguments + subroutine pde_define_xy_err(this, x, y, xerr, yerr, err) + !! Defines x and y error data. class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xerr, yerr + !! The plot_data_error_bars object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinates of the data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinates of the data. + real(real64), intent(in), dimension(:) :: xerr + !! An N-element array containing the x errors at each data point. + real(real64), intent(in), dimension(:) :: yerr + !! An N-element array containing the y errors at each data point. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: i, n, flag @@ -262,10 +345,21 @@ module subroutine pde_define_xy_err(this, x, y, xerr, yerr, err) end if ! Input Checking - if (size(y) /= n .or. size(xerr) /= n .or. size(yerr) /= n) then - call errmgr%report_error("pde_define_xy_err", & - "Input arrays must be the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, "pde_define_xy_err", & + "y", n, size(y)) + return + end if + + if (size(xerr) /= n) then + call report_array_size_mismatch_error(errmgr, "pde_define_xy_err", & + "xerr", n, size(xerr)) + return + end if + + if (size(yerr) /= n) then + call report_array_size_mismatch_error(errmgr, "pde_define_xy_err", & + "yerr", n, size(yerr)) return end if @@ -276,8 +370,7 @@ module subroutine pde_define_xy_err(this, x, y, xerr, yerr, err) if (allocated(this%m_data)) deallocate(this%m_data) allocate(this%m_data(n, 4), stat = flag) if (flag /= 0) then - call errmgr%report_error("pde_define_xy_err", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pde_define_xy_err", flag) return end if do i = 1, n @@ -292,22 +385,33 @@ module subroutine pde_define_xy_err(this, x, y, xerr, yerr, err) end subroutine ! ------------------------------------------------------------------------------ - pure module function pde_get_plot_x_err(this) result(x) + pure function pde_get_plot_x_err(this) result(x) + !! Checks to see if the x error bar data has been defined, and as + !! a result, if the x error data is to be plotted. class(plot_data_error_bars), intent(in) :: this + !! The plot_data_error_bars object. logical :: x + !! Returns true if the x error bars are to be plotted; else, false. x = this%m_xBars end function ! ------------------------------------------------------------------------------ - pure module function pde_get_plot_y_err(this) result(x) + pure function pde_get_plot_y_err(this) result(x) + !! Checks to see if the y error bar data has been defined, and as + !! a result, if the x error data is to be plotted. class(plot_data_error_bars), intent(in) :: this + !! The plot_data_error_bars object. logical :: x + !! Returns true if the y error bars are to be plotted; else, false. x = this%m_yBars end function ! ------------------------------------------------------------------------------ - pure module function pde_get_count(this) result(x) + pure function pde_get_count(this) result(x) + !! Gets the number of stored data points. class(plot_data_error_bars), intent(in) :: this + !! The plot_data_error_bars object. integer(int32) :: x + !! The number of data points. if (allocated(this%m_data)) then x = size(this%m_data, 1) else @@ -316,32 +420,59 @@ pure module function pde_get_count(this) result(x) end function ! ------------------------------------------------------------------------------ - pure module function pde_get_box(this) result(x) + pure function pde_get_box(this) result(x) + !! Checks to see if the x and y error boxes should be utilized. class(plot_data_error_bars), intent(in) :: this + !! The plot_data_error_bars object. logical :: x + !! Returns true if the error boxes are to be plotted; else, + !! false. Notice, the error boxes are only utilized if there is + !! both x and y error data defined, regardless of the value of this + !! property. x = this%m_box end function ! -------------------- - module subroutine pde_set_box(this, x) + subroutine pde_set_box(this, x) + !! Deterimines if the x and y error boxes should be utilized. class(plot_data_error_bars), intent(inout) :: this + !! The plot_data_error_bars object. logical, intent(in) :: x + !! Set to true if the error boxes are to be plotted; else, + !! false. Notice, the error boxes are only utilized if there is + !! both x and y error data defined, regardless of the value of this + !! property. this%m_box = x end subroutine ! ------------------------------------------------------------------------------ - pure module function pde_get_use_range(this) result(x) + pure function pde_get_use_range(this) result(x) + !! Gets a value determining if a defined range is being used + !! to define the error bar extremes. class(plot_data_error_bars), intent(in) :: this + !! The plot_data_error_bars object. logical :: x + !! True if a defined range is being used; else, false. x = this%m_range end function ! ------------------------------------------------------------------------------ - module subroutine pde_define_x_err_lim(this, x, y, xmin, xmax, err) - ! Arguments + subroutine pde_define_x_err_lim(this, x, y, xmin, xmax, err) + !! Defines the x error data. class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xmin, xmax + !! The plot_data_error_bars object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinates of the data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinates of the data. + real(real64), intent(in), dimension(:) :: xmin + !! An N-element array containing the minimum x values at each data + !! point. + real(real64), intent(in), dimension(:) :: xmax + !! An N-element array containing the maximum x values at each data + !! point. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: i, n, flag @@ -357,10 +488,21 @@ module subroutine pde_define_x_err_lim(this, x, y, xmin, xmax, err) end if ! Input Checking - if (size(y) /= n .or. size(xmin) /= n .or. size(xmax) /= n) then - call errmgr%report_error("pde_define_x_err_lim", & - "Input arrays must be the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_x_err_lim", "y", n, size(y)) + return + end if + + if (size(xmin) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_x_err_lim", "xmin", n, size(xmin)) + return + end if + + if (size(xmax) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_x_err_lim", "xmax", n, size(xmax)) return end if @@ -371,8 +513,7 @@ module subroutine pde_define_x_err_lim(this, x, y, xmin, xmax, err) if (allocated(this%m_data)) deallocate(this%m_data) allocate(this%m_data(n, 4), stat = flag) if (flag /= 0) then - call errmgr%report_error("pde_define_x_err_lim", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pde_define_x_err_lim", flag) return end if do i = 1, n @@ -386,11 +527,22 @@ module subroutine pde_define_x_err_lim(this, x, y, xmin, xmax, err) end subroutine ! ------------------------------------------------------------------------------ - module subroutine pde_define_y_err_lim(this, x, y, ymin, ymax, err) - ! Arguments + subroutine pde_define_y_err_lim(this, x, y, ymin, ymax, err) + !! Defines the y error data. class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, ymin, ymax + !! The plot_data_error_bars object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinates of the data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinates of the data. + real(real64), intent(in), dimension(:) :: ymin + !! An N-element array containing the minimum y values at each data + !! point. + real(real64), intent(in), dimension(:) :: ymax + !! An N-element array containing the maximum y values at each data + !! point. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: i, n, flag @@ -406,10 +558,21 @@ module subroutine pde_define_y_err_lim(this, x, y, ymin, ymax, err) end if ! Input Checking - if (size(y) /= n .or. size(ymin) /= n .or. size(ymax) /= n) then - call errmgr%report_error("pde_define_y_err_lim", & - "Input arrays must be the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_y_err_lim", "y", n, size(y)) + return + end if + + if (size(ymin) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_y_err_lim", "ymin", n, size(ymin)) + return + end if + + if (size(ymax) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_y_err_lim", "ymax", n, size(ymax)) return end if @@ -420,8 +583,7 @@ module subroutine pde_define_y_err_lim(this, x, y, ymin, ymax, err) if (allocated(this%m_data)) deallocate(this%m_data) allocate(this%m_data(n, 4), stat = flag) if (flag /= 0) then - call errmgr%report_error("pde_define_y_err_lim", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pde_define_y_err_lim", flag) return end if do i = 1, n @@ -434,12 +596,29 @@ module subroutine pde_define_y_err_lim(this, x, y, ymin, ymax, err) this%m_range = .true. end subroutine ! ------------------------------------------------------------------------------ - module subroutine pde_define_xy_err_lim(this, x, y, xmin, xmax, ymin, ymax, err) - ! Arguments + subroutine pde_define_xy_err_lim(this, x, y, xmin, xmax, ymin, & + ymax, err) + !! Defines the x and y error data. class(plot_data_error_bars), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y, xmin, xmax, & - ymin, ymax + !! The plot_data_error_bars object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x coordinates of the data. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y coordinates of the data. + real(real64), intent(in), dimension(:) :: xmin + !! An N-element array containing the minimum x values at each data + !! point. + real(real64), intent(in), dimension(:) :: xmax + !! An N-element array containing the maximum x values at each data + !! point. + real(real64), intent(in), dimension(:) :: ymin + !! An N-element array containing the minimum y values at each data + !! point. + real(real64), intent(in), dimension(:) :: ymax + !! An N-element array containing the maximum x values at each data + !! point. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: i, n, flag @@ -455,10 +634,33 @@ module subroutine pde_define_xy_err_lim(this, x, y, xmin, xmax, ymin, ymax, err) end if ! Input Checking - if (size(y) /= n .or. size(ymin) /= n .or. size(ymax) /= n) then - call errmgr%report_error("pde_define_xy_err_lim", & - "Input arrays must be the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_xy_err_lim", "y", n, size(y)) + return + end if + + if (size(xmin) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_xy_err_lim", "xmin", n, size(xmin)) + return + end if + + if (size(xmax) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_xy_err_lim", "xmax", n, size(xmax)) + return + end if + + if (size(ymin) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_xy_err_lim", "ymin", n, size(ymin)) + return + end if + + if (size(ymax) /= n) then + call report_array_size_mismatch_error(errmgr, & + "pde_define_xy_err_lim", "ymax", n, size(ymax)) return end if @@ -469,8 +671,7 @@ module subroutine pde_define_xy_err_lim(this, x, y, xmin, xmax, ymin, ymax, err) if (allocated(this%m_data)) deallocate(this%m_data) allocate(this%m_data(n, 6), stat = flag) if (flag /= 0) then - call errmgr%report_error("pde_define_xy_err_lim", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pde_define_xy_err_lim", flag) return end if do i = 1, n @@ -487,4 +688,4 @@ module subroutine pde_define_xy_err_lim(this, x, y, xmin, xmax, ymin, ymax, err) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_plot_data_histogram.f90 b/src/fplot_plot_data_histogram.f90 index 8ca982c..b87c58d 100644 --- a/src/fplot_plot_data_histogram.f90 +++ b/src/fplot_plot_data_histogram.f90 @@ -1,28 +1,66 @@ ! fplot_plot_data_histogram.f90 -submodule (fplot_core) fplot_plot_data_histogram +module fplot_plot_data_histogram + use iso_fortran_env + use fplot_plot_data_bar + use fplot_errors + use ferror + use strings + implicit none + private + public :: plot_data_histogram + + type, extends(plot_data_bar) :: plot_data_histogram + !! A container for plotting data in the form of a histogram. + integer(int32), private :: m_binCount = 10 + !! The number of bins. + character(len = :), private, allocatable :: m_numberFmt + !! The numerical label format string. + contains + procedure, public :: get_bin_count => pdh_get_bin_count + procedure, public :: set_bin_count => pdh_set_bin_count + procedure, public :: bin_data => pdh_bin_data + procedure, public :: get_extreme_values => pdh_get_extremes + procedure, public :: get_number_format => pdh_get_num_fmt + procedure, public :: set_number_format => pdh_set_num_fmt + procedure, public :: set_data_1 => pdh_set_data_1 + procedure, public :: set_data_2 => pdh_set_data_2 + procedure, public :: set_data_3 => pdh_set_data_3 + end type + contains ! ------------------------------------------------------------------------------ -pure module function pdh_get_bin_count(this) result(x) +pure function pdh_get_bin_count(this) result(x) + !! Gets the number of bins. class(plot_data_histogram), intent(in) :: this + !! The plot_data_histogram object. integer(int32) :: x + !! The bin count. x = this%m_binCount end function ! ------------------------------------------------------------------------------ -module subroutine pdh_set_bin_count(this, x) +subroutine pdh_set_bin_count(this, x) + !! Sets the bin count. For this property to have an effect, call before + !! calling the define_data subroutine or bin_data subroutine. class(plot_data_histogram), intent(inout) :: this + !! The plot_data_histogram object. integer(int32), intent(in) :: x + !! The bin count. this%m_binCount = x end subroutine ! ------------------------------------------------------------------------------ -module function pdh_bin_data(this, x, err) result(bx) - ! Arguments +function pdh_bin_data(this, x, err) result(bx) + !! Bins the supplied data set. class(plot_data_histogram), intent(in) :: this + !! The plot_data_histogram object. real(real64), intent(in), dimension(:) :: x + !! The data set to bin. class(errors), intent(inout), optional, target :: err + !! An error handling object. real(real64), allocatable, dimension(:,:) :: bx + !! The binned data. ! Local Variables real(real64) :: maxX, minX, width, val @@ -49,8 +87,7 @@ module function pdh_bin_data(this, x, err) result(bx) allocate(bx(nbins, 2), stat = flag) if (flag == 0) allocate(ranges(nbins, 2), stat = flag) if (flag /= 0) then - call errmgr%report_error("pdh_bin_data", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "pdh_bin_data", flag) return end if bx = 0.0d0 @@ -78,10 +115,13 @@ module function pdh_bin_data(this, x, err) result(bx) end function ! ------------------------------------------------------------------------------ -pure module function pdh_get_extremes(this) result(x) - ! Arguments +pure function pdh_get_extremes(this) result(x) + !! Returns the extreme values in the data set. class(plot_data_histogram), intent(in) :: this + !! The plot_data_histogram object. real(real64), dimension(2) :: x + !! A two-element array containing the minimum and maximum values, in + !! that order. ! Local Variables integer(int32) :: i, j, nrows, ncols @@ -113,11 +153,14 @@ pure module function pdh_get_extremes(this) result(x) end function ! ------------------------------------------------------------------------------ -module subroutine pdh_set_data_1(this, x, err) - ! Arguments +subroutine pdh_set_data_1(this, x, err) + !! Defines the data set. class(plot_data_histogram), intent(inout) :: this + !! The plot_data_histogram object. real(real64), intent(in), dimension(:) :: x + !! The data set. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables real(real64), allocatable, dimension(:,:) :: bx @@ -142,12 +185,16 @@ module subroutine pdh_set_data_1(this, x, err) end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdh_set_data_2(this, labels, x, err) - ! Arguments +subroutine pdh_set_data_2(this, labels, x, err) + !! Defines the data set with associated axis labels. class(plot_data_histogram), intent(inout) :: this + !! The plot_data_histogram object. class(string), intent(in), dimension(:) :: labels + !! The axis labels. real(real64), intent(in), dimension(:) :: x + !! The data set. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables real(real64), allocatable, dimension(:,:) :: bx @@ -163,9 +210,8 @@ module subroutine pdh_set_data_2(this, labels, x, err) ! Ensure the labels array is the same size as the number of bins if (size(labels) /= this%get_bin_count()) then - call errmgr%report_error("pdh_set_data_2", & - "The labels array must be the same size as the number of bins.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "pdh_set_data_2", & + "labels", this%get_bin_count(), size(labels)) return end if @@ -174,13 +220,18 @@ module subroutine pdh_set_data_2(this, labels, x, err) end subroutine ! ------------------------------------------------------------------------------ -module subroutine pdh_set_data_3(this, labels, x, fmt, err) - ! Arguments +subroutine pdh_set_data_3(this, labels, x, fmt, err) + !! Defines the data set with associated axis labels with a specific format. class(plot_data_histogram), intent(inout) :: this + !! The plot_data_histogram object. real(real64), intent(in), dimension(:) :: labels + !! The axis labels. real(real64), intent(in), dimension(:) :: x + !! The data set. character(len = *), intent(in), optional :: fmt + !! The format string for the labels (e.g. '(I0)', etc.). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables real(real64), allocatable, dimension(:,:) :: bx @@ -196,9 +247,8 @@ module subroutine pdh_set_data_3(this, labels, x, fmt, err) ! Ensure the labels array is the same size as the number of bins if (size(labels) /= this%get_bin_count()) then - call errmgr%report_error("pdh_set_data_3", & - "The labels array must be the same size as the number of bins.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "pdh_set_data_3", & + "labels", this%get_bin_count(), size(labels)) return end if @@ -207,9 +257,12 @@ module subroutine pdh_set_data_3(this, labels, x, fmt, err) end subroutine ! ------------------------------------------------------------------------------ -pure module function pdh_get_num_fmt(this) result(x) +pure function pdh_get_num_fmt(this) result(x) + !! Gets the numerical format string used for the labels. class(plot_data_histogram), intent(in) :: this + !! The plot_data_histogram object. character(len = :), allocatable :: x + !! The format string. if (allocated(this%m_numberFmt)) then x = this%m_numberFmt else @@ -218,11 +271,14 @@ pure module function pdh_get_num_fmt(this) result(x) end function ! ------------------------------------------------------------------------------ -module subroutine pdh_set_num_fmt(this, x) +subroutine pdh_set_num_fmt(this, x) + !! Sets the numerical format string used for the labels. class(plot_data_histogram), intent(inout) :: this + !! The plot_data_histogram object. character(len = *), intent(in) :: x + !! The format string (e.g. "(F6.2)"). this%m_numberFmt = x end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_plot_data_tri_2d.f90 b/src/fplot_plot_data_tri_2d.f90 index 65e4287..55ca117 100644 --- a/src/fplot_plot_data_tri_2d.f90 +++ b/src/fplot_plot_data_tri_2d.f90 @@ -1,12 +1,47 @@ ! fplot_plot_data_tri_2d.f90 -submodule (fplot_core) fplot_plot_data_tri_2d +module fplot_plot_data_tri_2d + use iso_fortran_env + use fplot_plot_data + use fplot_constants + use fplot_triangulations_delaunay_2d + use fplot_colors + use strings + implicit none + private + public :: plot_data_tri_2d + + type, extends(plot_data_colored) :: plot_data_tri_2d + !! Defines a 2D triangulated data set. + real(real64), private, allocatable, dimension(:) :: m_x + !! An array of the x-coordinates of each point. + real(real64), private, allocatable, dimension(:) :: m_y + !! An array of the y-coordinates of each point. + integer(int32), private, allocatable, dimension(:,:) :: m_indices + !! A 3-column matrix containing the indices of each triangle's + !! vertex. + real(real32), private :: m_lineWidth = 1.0 + !! The line width. + integer(int32), private :: m_lineStyle = LINE_SOLID + !! The line style + contains + procedure, public :: get_data_string => pdt2d_get_data_cmd + procedure, public :: get_command_string => pdt2d_get_cmd + procedure, public :: define_data => pdt2d_define_data + procedure, public :: get_line_width => pdt2d_get_line_width + procedure, public :: set_line_width => pdt2d_set_line_width + procedure, public :: get_line_style => pdt2d_get_line_style + procedure, public :: set_line_style => pdt2d_set_line_style + end type + contains ! ------------------------------------------------------------------------------ module function pdt2d_get_data_cmd(this) result(x) - ! Arguments + !! Gets the GNUPLOT command string describing the data to plot. class(plot_data_tri_2d), intent(in) :: this + !! The plot_data_tri_2d object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -97,9 +132,11 @@ module function pdt2d_get_data_cmd(this) result(x) ! ------------------------------------------------------------------------------ module function pdt2d_get_cmd(this) result(x) - ! Arguments + !! Gets the GNUPLOT command string for the object. class(plot_data_tri_2d), intent(in) :: this + !! The plot_data_tri_2d object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -146,9 +183,11 @@ module function pdt2d_get_cmd(this) result(x) ! ------------------------------------------------------------------------------ module subroutine pdt2d_define_data(this, tri) - ! Arguments + !! Defines the data to plot. class(plot_data_tri_2d), intent(inout) :: this + !! The plot_data_tri_2d object. class(delaunay_tri_2d), intent(in) :: tri + !! The triangulation data to plot. ! Process if (allocated(this%m_x)) deallocate(this%m_x) @@ -162,15 +201,21 @@ module subroutine pdt2d_define_data(this, tri) ! ------------------------------------------------------------------------------ pure module function pdt2d_get_line_width(this) result(rst) + !! Gets the width of the lines used to draw the triangulation. class(plot_data_tri_2d), intent(in) :: this + !! The plot_data_tri_2d object. real(real32) :: rst + !! The line width. rst = this%m_lineWidth end function ! -------------------- module subroutine pdt2d_set_line_width(this, x) + !! Sets the width of the lines used to draw the triangulation. class(plot_data_tri_2d), intent(inout) :: this + !! The plot_data_tri_2d object. real(real32), intent(in) :: x + !! The line width. if (x <= 0.0d0) then this%m_lineWidth = 1.0d0 else @@ -179,15 +224,43 @@ module subroutine pdt2d_set_line_width(this, x) end subroutine ! ------------------------------------------------------------------------------ pure module function pdt2d_get_line_style(this) result(rst) + !! Gets the line style. class(plot_data_tri_2d), intent(in) :: this + !! The plot_data_tri_2d object. integer(int32) :: rst + !! The line style. The line style must be one of the following + !! constants. + !! + !! - LINE_DASHED + !! + !! - LINE_DASH_DOTTED + !! + !! - LINE_DASH_DOT_DOT + !! + !! - LINE_DOTTED + !! + !! - LINE_SOLID rst = this%m_lineStyle end function ! -------------------- module subroutine pdt2d_set_line_style(this, x) + !! Sets the line style. class(plot_data_tri_2d), intent(inout) :: this + !! The plot_data_tri_2d object. integer(int32), intent(in) :: x + !! The line style. The line style must be one of the following + !! constants. + !! + !! - LINE_DASHED + !! + !! - LINE_DASH_DOTTED + !! + !! - LINE_DASH_DOT_DOT + !! + !! - LINE_DOTTED + !! + !! - LINE_SOLID if (x == LINE_DASHED .or. & x == LINE_DASH_DOTTED .or. & x == LINE_DASH_DOT_DOT .or. & @@ -199,4 +272,4 @@ module subroutine pdt2d_set_line_style(this, x) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_plot_object.f90 b/src/fplot_plot_object.f90 new file mode 100644 index 0000000..784795a --- /dev/null +++ b/src/fplot_plot_object.f90 @@ -0,0 +1,21 @@ +module fplot_plot_object + use iso_fortran_env + implicit none + + type, abstract :: plot_object + !! The base type for all plot objects. + contains + procedure(get_string_result), deferred, public :: get_command_string + end type + + interface + function get_string_result(this) result(x) + !! Returns a string from a plot_object. + import plot_object + class(plot_object), intent(in) :: this + !! The plot_object object. + character(len = :), allocatable :: x + !! The result string. + end function + end interface +end module \ No newline at end of file diff --git a/src/fplot_plot_polar.f90 b/src/fplot_plot_polar.f90 index 5aa80a5..47b3ebd 100644 --- a/src/fplot_plot_polar.f90 +++ b/src/fplot_plot_polar.f90 @@ -1,20 +1,80 @@ ! fplot_polar.f90 -submodule (fplot_core) fplot_plot_polar +module fplot_plot_polar + use iso_fortran_env + use fplot_plot + use fplot_terminal + use fplot_errors + use fplot_constants + use fplot_legend + use fplot_plot_data + use ferror + use strings + implicit none + private + public :: plot_polar + + type, extends(plot) :: plot_polar + private + !> @brief Allow the plot to autoscale? + logical :: m_autoscale = .true. + !> @brief The minimum radius value - only applicable if m_autoscale is + !! false. + real(real64) :: m_minrad = 0.0d0 + !> @brief The maximum radius value - only applicable if m_autoscale is + !! false. + real(real64) :: m_maxrad = 1.0d0 + !> @brief The location for theta = 0 + character(len = :), allocatable :: m_thetaStart + !> @brief The direction for theta + character(len = :), allocatable :: m_thetaDirection + contains + final :: plr_clean_up + procedure, public :: initialize => plr_init + procedure, public :: get_command_string => plr_get_cmd + procedure, public :: get_autoscale => plr_get_autoscale + procedure, public :: set_autoscale => plr_set_autoscale + procedure, public :: get_radial_limits => plr_get_limits + procedure, public :: set_radial_limits => plr_set_limits + procedure, public :: get_theta_start_position => plr_get_theta_start + procedure, public :: set_theta_start_position => plr_set_theta_start + procedure, public :: get_theta_direction => plr_get_theta_direction + procedure, public :: set_theta_direction => plr_set_theta_direction + end type + contains ! ------------------------------------------------------------------------------ - module subroutine plr_clean_up(this) + subroutine plr_clean_up(this) + !! Cleans up resources held by the plot_polar object. type(plot_polar), intent(inout) :: this + !! The plot_polar object. call this%free_resources() end subroutine ! ------------------------------------------------------------------------------ - module subroutine plr_init(this, term, fname, err) - ! Arguments + subroutine plr_init(this, term, fname, err) + !! Initializes the plot_polar object. class(plot_polar), intent(inout) :: this + !! The plot_polar object. integer(int32), intent(in), optional :: term + !! An optional input that is used to define the terminal. + !! The default terminal is a WXT terminal. The acceptable inputs + !! are: + !! + !! - GNUPLOT_TERMINAL_PNG + !! + !! - GNUPLOT_TERMINAL_QT + !! + !! - GNUPLOT_TERMINAL_WIN32 + !! + !! - GNUPLOT_TERMINAL_WXT + !! + !! - GNUPLOT_TERMINAL_LATEX character(len = *), intent(in), optional :: fname + !! A filename to pass to the terminal in the event the + !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables class(errors), pointer :: errmgr @@ -28,7 +88,8 @@ module subroutine plr_init(this, term, fname, err) end if ! Initialize the base class - call plt_init(this, term, fname, errmgr) + ! call plt_init(this, term, fname, errmgr) + call this%plot%initialize(term, fname, errmgr) if (errmgr%has_error_occurred()) return ! Initialize the rest of the object @@ -37,10 +98,12 @@ module subroutine plr_init(this, term, fname, err) end subroutine ! ------------------------------------------------------------------------------ - module function plr_get_cmd(this) result(x) - ! Arguments + function plr_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this plot_polar object. class(plot_polar), intent(in) :: this + !! The plot_polar object. character(len = :), allocatable :: x + !! The command string. ! Local Variables integer(int32) :: i, n @@ -155,45 +218,83 @@ module function plr_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - pure module function plr_get_autoscale(this) result(rst) + pure function plr_get_autoscale(this) result(rst) + !! Gets a logical value determining if the axis should be + !! automatically scaled to fit the data. class(plot_polar), intent(in) :: this + !! The plot_polar object. logical :: rst + !! Returns true if the plot will autoscale; else, false. rst = this%m_autoscale end function ! -------------------- - module subroutine plr_set_autoscale(this, x) + subroutine plr_set_autoscale(this, x) + !! Sets a logical value determining if the axis should be + !! automatically scaled to fit the data. class(plot_polar), intent(inout) :: this + !! The plot_polar object. logical, intent(in) :: x + !! Set to true if the plot will autoscale; else, false. this%m_autoscale = x end subroutine ! ------------------------------------------------------------------------------ - pure module function plr_get_limits(this) result(rst) + pure function plr_get_limits(this) result(rst) + !! Gets the radial axis limits if autoscaling is inactive. class(plot_polar), intent(in) :: this + !! The plot_polar object. real(real64) :: rst(2) + !! A 2-element array containing the minimum and maximum limit + !! values in that order. rst = [this%m_minrad, this%m_maxrad] end function ! -------------------- - module subroutine plr_set_limits(this, x) + subroutine plr_set_limits(this, x) + !! Sets the radial axis limits if autoscaling is inactive. class(plot_polar), intent(inout) :: this + !! The plot_polar object. real(real64), intent(in) :: x(2) + !! A 2-element array containing the minimum and maximum limit + !! values in that order. this%m_minrad = minval(x) this%m_maxrad = maxval(x) end subroutine ! ------------------------------------------------------------------------------ - pure module function plr_get_theta_start(this) result(rst) + pure function plr_get_theta_start(this) result(rst) + !! Gets the position for \(\theta = 0\). class(plot_polar), intent(in) :: this + !! The plot_polar object. character(len = :), allocatable :: rst + !! The starting position. It is one of the following flags. + !! + !! - POLAR_THETA_BOTTOM + !! + !! - POLAR_THETA_TOP + !! + !! - POLAR_THETA_RIGHT + !! + !! - POLAR_THETA_LEFT rst = this%m_thetaStart end function ! -------------------- - module subroutine plr_set_theta_start(this, x) + subroutine plr_set_theta_start(this, x) + !! Sets the position for \(\theta = 0\). class(plot_polar), intent(inout) :: this + !! The plot_polar object. character(len = *), intent(in) :: x + !! The starting position. It is one of the following flags. + !! + !! - POLAR_THETA_BOTTOM + !! + !! - POLAR_THETA_TOP + !! + !! - POLAR_THETA_RIGHT + !! + !! - POLAR_THETA_LEFT if (x /= POLAR_THETA_BOTTOM .and. & x /= POLAR_THETA_TOP .and. & x /= POLAR_THETA_LEFT .and. & @@ -207,16 +308,30 @@ module subroutine plr_set_theta_start(this, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function plr_get_theta_direction(this) result(rst) + pure function plr_get_theta_direction(this) result(rst) + !! Gets the \(\theta\) direction. class(plot_polar), intent(in) :: this + !! The plot_polar object. character(len = :), allocatable :: rst + !! The direction. It is one of the following flags. + !! + !! - POLAR_THETA_CCW + !! + !! - POLAR_THETA_CW rst = this%m_thetaDirection end function ! -------------------- - module subroutine plr_set_theta_direction(this, x) + subroutine plr_set_theta_direction(this, x) + !! Sets the \(\theta\) direction. class(plot_polar), intent(inout) :: this + !! The plot_polar object. character(len = *), intent(in) :: x + !! The direction. It is one of the following flags. + !! + !! - POLAR_THETA_CCW + !! + !! - POLAR_THETA_CW if (x /= POLAR_THETA_CCW .and. x /= POLAR_THETA_CW) then ! Reset to default this%m_thetaDirection = POLAR_THETA_CCW @@ -226,8 +341,4 @@ module subroutine plr_set_theta_direction(this, x) end subroutine ! ------------------------------------------------------------------------------ - -! -------------------- - -! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_png_terminal.f90 b/src/fplot_png_terminal.f90 index 4fbed73..9bb6083 100644 --- a/src/fplot_png_terminal.f90 +++ b/src/fplot_png_terminal.f90 @@ -1,15 +1,35 @@ ! fplot_png_terminal.f90 -submodule (fplot_core) fplot_png_terminal +module fplot_png_terminal + use iso_fortran_env + use strings + use fplot_terminal + use fplot_constants + implicit none + private + public :: png_terminal + + type, extends(terminal) :: png_terminal + !! Defines a terminal used for producing PNG outputs. + character(len = 3), private :: m_id = "png" + !! The terminal ID string + character(len = GNUPLOT_MAX_PATH_LENGTH), private :: m_fname = "default.png" + !! The filename of the PNG file to write. + contains + procedure, public :: get_filename => png_get_filename + procedure, public :: set_filename => png_set_filename + procedure, public :: get_id_string => png_get_term_string + procedure, public :: get_command_string => png_get_command_string + end type + contains ! ------------------------------------------------------------------------------ - !> @brief Retrieves a GNUPLOT terminal identifier string. - !! - !! @param[in] this The png_terminal object. - !! @return The string. - module function png_get_term_string(this) result(x) + function png_get_term_string(this) result(x) + !! Retrieves a GNUPLOT terminal identifier string. class(png_terminal), intent(in) :: this + !! The png_terminal object. character(len = :), allocatable :: x + !! The string. integer(int32) :: n n = len_trim(this%m_id) allocate(character(len = n) :: x) @@ -17,13 +37,12 @@ module function png_get_term_string(this) result(x) end function ! ------------------------------------------------------------------------------ - !> @brief Gets the filename for the output PNG file. - !! - !! @param[in] this The png_terminal object. - !! @return The filename, including the file extension (.png). - module function png_get_filename(this) result(txt) + function png_get_filename(this) result(txt) + !! Gets the filename for the output PNG file. class(png_terminal), intent(in) :: this + !! The png_terminal object. character(len = :), allocatable :: txt + !! The filename, including the file extension (.png). integer(int32) :: n n = len_trim(this%m_fname) allocate(character(len = n) :: txt) @@ -31,13 +50,12 @@ module function png_get_filename(this) result(txt) end function ! -------------------- - !> @brief Sets the filename for the output PNG file. - !! - !! @param[in,out] this The png_terminal object. - !! @param[in] The filename, including the file extension (.png). - module subroutine png_set_filename(this, txt) + subroutine png_set_filename(this, txt) + !!Sets the filename for the output PNG file. class(png_terminal), intent(inout) :: this + !! The png_terminal object. character(len = *), intent(in) :: txt + !! The filename, including the file extension (.png). integer(int32) :: n n = min(len_trim(txt), GNUPLOT_MAX_PATH_LENGTH) this%m_fname = "" @@ -49,15 +67,13 @@ module subroutine png_set_filename(this, txt) end subroutine ! ------------------------------------------------------------------------------ - !> @brief Returns the appropriate GNUPLOT command string to establish - !! appropriate parameters. - !! - !! @param[in] this The terminal object. - !! @return The GNUPLOT command string. - module function png_get_command_string(this) result(x) - ! Arguments + function png_get_command_string(this) result(x) + !! Returns the appropriate GNUPLOT command string to establish + !! appropriate parameters. class(png_terminal), intent(in) :: this + !! The png_terminal object. character(len = :), allocatable :: x + !! The GNUPLOT command string. ! Local Variables type(string_builder) :: str @@ -83,4 +99,4 @@ module function png_get_command_string(this) result(x) x = char(str%to_string()) end function -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_qt_terminal.f90 b/src/fplot_qt_terminal.f90 index aa9fbd0..34afb00 100644 --- a/src/fplot_qt_terminal.f90 +++ b/src/fplot_qt_terminal.f90 @@ -1,13 +1,30 @@ ! fplot_qt_terminal.f90 -submodule (fplot_core) fplot_qt_terminal +module fplot_qt_terminal + use iso_fortran_env + use fplot_terminal + implicit none + private + public :: qt_terminal + + type, extends(terminal) :: qt_terminal + !! Defines a terminal that utilizes QT. + character(len = 2), private :: m_id = "qt" + !! The terminal ID string + contains + procedure, public :: get_id_string => qt_get_term_string + end type + contains - module function qt_get_term_string(this) result(x) + function qt_get_term_string(this) result(x) + !! Retrieves a GNUPLOT terminal identifier string. class(qt_terminal), intent(in) :: this + !! The qt_terminal object. character(len = :), allocatable :: x + !! The string. integer(int32) :: n n = len_trim(this%m_id) allocate(character(len = n) :: x) x = this%m_id end function -end submodule +end module diff --git a/src/fplot_scatter_plot_data.f90 b/src/fplot_scatter_plot_data.f90 deleted file mode 100644 index 8588457..0000000 --- a/src/fplot_scatter_plot_data.f90 +++ /dev/null @@ -1,283 +0,0 @@ -! fplot_scatter_plot_data.f90 - -submodule (fplot_core) fplot_scatter_plot_data -contains -! ------------------------------------------------------------------------------ - module function spd_get_cmd(this) result(x) - ! Arguments - class(scatter_plot_data), intent(in) :: this - character(len = :), allocatable :: x - - ! Local Variables - type(string_builder) :: str - integer(int32) :: n - type(color) :: clr - - ! Initialization - call str%initialize() - - ! Title - n = len_trim(this%get_name()) - if (n > 0) then - call str%append(' "-" title "') - call str%append(this%get_name()) - call str%append('"') - else - call str%append(' "-" notitle') - end if - - ! Lines, points, or filled - if (this%get_fill_curve()) then - call str%append(" with filledcurves") - else - if (this%get_draw_line() .and. this%get_draw_markers()) then - call str%append(" with linespoints") - else if (.not.this%get_draw_line() .and. this%get_draw_markers()) then - call str%append(" with points") - else - call str%append(" with lines") - end if - end if - - ! Line Width - call str%append(" lw ") - call str%append(to_string(this%get_line_width())) - - ! Line Color - if (this%get_use_data_dependent_colors()) then - ! http://www.gnuplotting.org/using-a-palette-as-line-color/ - call str%append(" lc palette") - else - clr = this%get_line_color() - call str%append(' lc rgb "#') - call str%append(clr%to_hex_string()) - call str%append('"') - end if - - ! Define other properties specific to the lines and points - if (this%get_draw_line()) then - call str%append(" lt ") - call str%append(to_string(this%get_line_style())) - if (this%get_line_style() /= LINE_SOLID) then - call str%append(" dashtype ") - call str%append(to_string(this%get_line_style())) - end if - end if - if (this%get_draw_markers()) then - call str%append(" pi ") - call str%append(to_string(this%get_marker_frequency())) - call str%append(" pt ") - call str%append(to_string(this%get_marker_style())) - call str%append(" ps ") - if (this%get_use_variable_size_points()) then - call str%append("variable") - else - call str%append(to_string(this%get_marker_scaling())) - end if - end if - - ! Define the axes structure - call str%append(" ") - call str%append(this%get_axes_string()) - - ! End - x = char(str%to_string()) - end function - -! ------------------------------------------------------------------------------ - pure module function spd_get_line_width(this) result(x) - class(scatter_plot_data), intent(in) :: this - real(real32) :: x - x = this%m_lineWidth - end function - -! -------------------- - module subroutine spd_set_line_width(this, x) - class(scatter_plot_data), intent(inout) :: this - real(real32), intent(in) :: x - this%m_lineWidth = x - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_line_style(this) result(x) - class(scatter_plot_data), intent(in) :: this - integer(int32) :: x - x = this%m_lineStyle - end function - -! -------------------- - module subroutine spd_set_line_style(this, x) - class(scatter_plot_data), intent(inout) :: this - integer(int32), intent(in) :: x - if (x == LINE_DASHED .or. & - x == LINE_DASH_DOTTED .or. & - x == LINE_DASH_DOT_DOT .or. & - x == LINE_DOTTED .or. & - x == LINE_SOLID) then - ! Only reset the line style if it is a valid type. - this%m_lineStyle = x - end if - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_draw_line(this) result(x) - class(scatter_plot_data), intent(in) :: this - logical :: x - x = this%m_drawLine - end function - -! -------------------- - module subroutine spd_set_draw_line(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - this%m_drawLine = x - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_draw_markers(this) result(x) - class(scatter_plot_data), intent(in) :: this - logical :: x - x = this%m_drawMarkers - end function - -! -------------------- - module subroutine spd_set_draw_markers(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - this%m_drawMarkers = x - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_marker_style(this) result(x) - class(scatter_plot_data), intent(in) :: this - integer(int32) :: x - x = this%m_markerType - end function - -! -------------------- - module subroutine spd_set_marker_style(this, x) - class(scatter_plot_data), intent(inout) :: this - integer(int32), intent(in) :: x - if (x == MARKER_ASTERISK .or. & - x == MARKER_EMPTY_CIRCLE .or. & - x == MARKER_EMPTY_NABLA .or. & - x == MARKER_EMPTY_RHOMBUS .or. & - x == MARKER_EMPTY_SQUARE .or. & - x == MARKER_EMPTY_TRIANGLE .or. & - x == MARKER_FILLED_CIRCLE .or. & - x == MARKER_FILLED_NABLA .or. & - x == MARKER_FILLED_RHOMBUS .or. & - x == MARKER_FILLED_SQUARE .or. & - x == MARKER_FILLED_TRIANGLE .or. & - x == MARKER_PLUS .or. & - x == MARKER_X) then - - ! Only alter the value if the marker is a known type - this%m_markerType = x - end if - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_marker_scaling(this) result(x) - class(scatter_plot_data), intent(in) :: this - real(real32) :: x - x = this%m_markerSize - end function - -! -------------------- - module subroutine spd_set_marker_scaling(this, x) - class(scatter_plot_data), intent(inout) :: this - real(real32), intent(in) :: x - this%m_markerSize = x - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_marker_frequency(this) result(x) - class(scatter_plot_data), intent(in) :: this - integer(int32) :: x - x = this%m_markerFrequency - end function - -! -------------------- - module subroutine spd_set_marker_frequency(this, x) - class(scatter_plot_data), intent(inout) :: this - integer(int32), intent(in) :: x - this%m_markerFrequency = x - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_simplify_data(this) result(x) - class(scatter_plot_data), intent(in) :: this - logical :: x - x = this%m_simplifyData - end function - -! -------------------- - module subroutine spd_set_simplify_data(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - this%m_simplifyData = x - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_simplify_factor(this) result(x) - class(scatter_plot_data), intent(in) :: this - real(real64) :: x - x = this%m_simplifyFactor - end function - -! -------------------- - module subroutine spd_set_simplify_factor(this, x) - class(scatter_plot_data), intent(inout) :: this - real(real64), intent(in) :: x - this%m_simplifyFactor = x - end subroutine - -! ------------------------------------------------------------------------------ - pure module function spd_get_data_dependent_colors(this) result(rst) - class(scatter_plot_data), intent(in) :: this - logical :: rst - rst = this%m_dataDependentColors - end function - -! -------------------- - module subroutine spd_set_data_dependent_colors(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - this%m_dataDependentColors = x - end subroutine - -! ****************************************************************************** -! ADDED: JUNE 28, 2021 - JAC -! ------------------------------------------------------------------------------ - pure module function spd_get_filled(this) result(rst) - class(scatter_plot_data), intent(in) :: this - logical :: rst - rst = this%m_filledCurve - end function - -! -------------------- - module subroutine spd_set_filled(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - this%m_filledCurve = x - end subroutine - -! ****************************************************************************** -! ADDED: JAN 12, 2024 - JAC -! ------------------------------------------------------------------------------ - pure module function spd_get_use_var_point_size(this) result(rst) - class(scatter_plot_data), intent(in) :: this - logical :: rst - rst = this%m_useVariableSizePoints - end function - -! -------------------- - module subroutine spd_set_use_var_point_size(this, x) - class(scatter_plot_data), intent(inout) :: this - logical, intent(in) :: x - this%m_useVariableSizePoints = x - end subroutine - -! ------------------------------------------------------------------------------ -end submodule diff --git a/src/fplot_simplify.f90 b/src/fplot_simplify.f90 index 535ca4f..f2c03bf 100644 --- a/src/fplot_simplify.f90 +++ b/src/fplot_simplify.f90 @@ -4,19 +4,43 @@ ! - https://www.codeproject.com/Articles/114797/Polyline-Simplification ! - https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm -submodule (fplot_core) fplot_simplify +module fplot_simplify + use iso_fortran_env + use ferror + use fplot_errors + implicit none + private + public :: simplify_polyline + + interface simplify_polyline + module procedure :: simplify_polyline_2d1 + module procedure :: simplify_polyline_3d1 + module procedure :: simplify_polyline_mtx + end interface + contains - module function simplify_polyline_2d1(x, y, tol, err) result(ln) - ! Arguments - real(real64), intent(in), dimension(:) :: x, y + function simplify_polyline_2d1(x, y, tol, err) result(ln) + !! Simplifies a 2D polyline by removing points too close to + !! discern given a specified tolerance. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x-coordinates of the vertices + !! making up the polyline. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y-coordinates of the vertices + !! making up the polyline. real(real64), intent(in) :: tol + !! The distance tolerance to use when simplifying the polyline. + !! This value must be positive, and larger than machine epsilon. class(errors), intent(inout), optional, target :: err + !! An error handling object. real(real64), allocatable, dimension(:,:) :: ln + !! A matrix containing the simplified polyline vertices. The first + !! column of the matrix contains the x-coordinates, and the second + !! column contains the y-coordinates. ! Local Variables class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg integer(int32) :: n real(real64) :: eps @@ -31,11 +55,8 @@ module function simplify_polyline_2d1(x, y, tol, err) result(ln) ! Input Check if (size(y) /= n) then - write(errmsg, 100) "The array sizes did not match. " // & - "The x array contained ", size(x), & - " items, but the y array contained ", size(y), "." - call errmgr%report_error("simplify_polyline_2d1", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, & + "simplify_polyline_2d1", "y", n, size(y)) return end if @@ -48,22 +69,35 @@ module function simplify_polyline_2d1(x, y, tol, err) result(ln) ! Process ln = radial_distance_2d(x, y, tol, err) - -100 format(A, I0, A, I0, A) end function - module function simplify_polyline_3d1(x, y, z, tol, err) result(ln) - ! Arguments - real(real64), intent(in), dimension(:) :: x, y, z + function simplify_polyline_3d1(x, y, z, tol, err) result(ln) + !! Simplifies a 3D polyline by removing points too close to + !! discern given a specified tolerance. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x-coordinates of the vertices + !! making up the polyline. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y-coordinates of the vertices + !! making up the polyline. + real(real64), intent(in), dimension(:) :: z + !! An N-element array containing the z-coordinates of the vertices + !! making up the polyline. real(real64), intent(in) :: tol + !! The distance tolerance to use when simplifying the polyline. + !! This value must be positive, and larger than machine epsilon. class(errors), intent(inout), optional, target :: err + !! An error handling object. real(real64), allocatable, dimension(:,:) :: ln + !! A matrix containing the simplified polyline vertices. The first + !! column of the matrix contains the x-coordinates, the second + !! column contains the y-coordinates, and the third column contains + !! the z-coordinates. ! Local Variables class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg integer(int32) :: n real(real64) :: eps @@ -77,13 +111,15 @@ module function simplify_polyline_3d1(x, y, z, tol, err) result(ln) end if ! Input Check - if (size(y) /= n .or. size(z) /= n) then - write(errmsg, 100) "The array sizes did not match. " // & - "The x array contained ", size(x), & - " items, the y array contained ", size(y), & - ", and the z array contained ", size(z), "." - call errmgr%report_error("simplify_polyline_3d1", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + if (size(y) /= n) then + call report_array_size_mismatch_error(errmgr, & + "simplify_polyline_3d1", "y", n, size(y)) + return + end if + + if (size(z) /= n) then + call report_array_size_mismatch_error(errmgr, & + "simplify_polyline_3d1", "z", n, size(z)) return end if @@ -96,23 +132,29 @@ module function simplify_polyline_3d1(x, y, z, tol, err) result(ln) ! Process ln = radial_distance_3d(x, y, z, tol, errmgr) - -100 format(A, I0, A, I0, A, I0, A) end function - module function simplify_polyline_mtx(xy, tol, err) result(ln) - ! Arguments + function simplify_polyline_mtx(xy, tol, err) result(ln) + !! Simplifies a 2D or 3D polyline by removing points too close to + !! discern given a specified tolerance. real(real64), intent(in), dimension(:,:) :: xy + !! An N-by-2 or N-by-3 matrix containing the polyline vertex data. real(real64), intent(in) :: tol + !! The distance tolerance to use when simplifying the polyline. + !! This value must be positive, and larger than machine epsilon. class(errors), intent(inout), optional, target :: err + !! An error handling object. real(real64), allocatable, dimension(:,:) :: ln + !! A matrix containing the simplified polyline vertices. The first + !! column of the matrix contains the x-coordinates, the second + !! column contains the y-coordinates, and if necessary, the third + !! column contains the z-coordinates. ! Local Variables class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg ! Initialization if (present(err)) then @@ -123,10 +165,9 @@ module function simplify_polyline_mtx(xy, tol, err) result(ln) ! Ensure there are at least 2 columns of data in XY if (size(xy, 2) < 2) then - write(errmsg, 100) "The input matrix must have at " // & - "least 2 columns; however, only ", size(xy, 2), " was found." - call errmgr%report_error("simplify_polyline_mtx", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_matrix_size_mismatch_error(errmgr, & + "simplify_polyline_mtx", "xy", size(xy, 1), 2, size(xy, 1), & + size(xy, 2)) return end if @@ -136,8 +177,6 @@ module function simplify_polyline_mtx(xy, tol, err) result(ln) else ln = simplify_polyline_3d1(xy(:,1), xy(:,2), xy(:,3), tol, errmgr) end if - -100 format(A, I0, A) end function @@ -165,9 +204,7 @@ function radial_distance_2d(x, y, tol, err) result(pts) ! Local Memory Allocation allocate(valid(n), stat = flag) if (flag /= 0) then - call err%report_error("radial_distance_2d", & - "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(err, "radial_distance_2d", flag) return end if valid(1) = .true. @@ -194,9 +231,7 @@ function radial_distance_2d(x, y, tol, err) result(pts) ! Allocate space, and collect all valid points allocate(pts(nvalid, 2), stat = flag) if (flag /= 0) then - call err%report_error("radial_distance_2d", & - "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(err, "radial_distance_2d", flag) return end if j = 1 @@ -234,9 +269,7 @@ function radial_distance_3d(x, y, z, tol, err) result(pts) ! Local Memory Allocation allocate(valid(n), stat = flag) if (flag /= 0) then - call err%report_error("radial_distance_3d", & - "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(err, "radial_distance_3d", flag) return end if valid(1) = .true. @@ -264,9 +297,7 @@ function radial_distance_3d(x, y, z, tol, err) result(pts) ! Allocate space, and collect all valid points allocate(pts(nvalid, 3), stat = flag) if (flag /= 0) then - call err%report_error("radial_distance_3d", & - "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(err, "radial_distance_3d", flag) return end if j = 1 @@ -319,4 +350,4 @@ pure function pythag3(x, y, z, xo, yo, zo) result(r) end if end function -end submodule +end module diff --git a/src/fplot_surface_plot.f90 b/src/fplot_surface_plot.f90 index 8d6baa9..06d1f29 100644 --- a/src/fplot_surface_plot.f90 +++ b/src/fplot_surface_plot.f90 @@ -1,26 +1,75 @@ ! fplot_surface_plot.f90 -submodule (fplot_core) fplot_surface_plot -contains -! ------------------------------------------------------------------------------ - ! module subroutine surf_clean_up(this) - ! type(surface_plot), intent(inout) :: this - ! if (associated(this%m_colormap)) then - ! deallocate(this%m_colormap) - ! nullify(this%m_colormap) - ! end if - - ! ! No need to call the base class finalization routine as the compiler - ! ! takes care of that for us. - ! end subroutine +module fplot_surface_plot + use iso_fortran_env + use fplot_plot_3d + use fplot_errors + use fplot_legend + use ferror + use strings + implicit none + private + public :: surface_plot + + type, extends(plot_3d) :: surface_plot + logical, private :: m_showHidden = .false. + !! Show hidden lines? + logical, private :: m_smooth = .true. + !! Smooth the surface? + logical, private :: m_contour = .false. + !! Show a contour plot as well as the surface plot? + logical, private :: m_useLighting = .false. + !! Use lighting? + real(real32), private :: m_lightIntensity = 0.5 + !! Lighting intensity (0 - 1) - default is 0.5 + real(real32), private :: m_specular = 0.5 + !! Specular highlight intensity (0 - 1). + real(real32), private :: m_transparency = 1.0 + !! Defines the translucency value. Must exist on (0, 1]. + contains + procedure, public :: initialize => surf_init + procedure, public :: get_show_hidden => surf_get_show_hidden + procedure, public :: set_show_hidden => surf_set_show_hidden + procedure, public :: get_command_string => surf_get_cmd + procedure, public :: get_allow_smoothing => surf_get_smooth + procedure, public :: set_allow_smoothing => surf_set_smooth + procedure, public :: get_show_contours => surf_get_show_contours + procedure, public :: set_show_contours => surf_set_show_contours + procedure, public :: get_use_lighting => surf_get_use_lighting + procedure, public :: set_use_lighting => surf_set_use_lighting + procedure, public :: get_light_intensity => surf_get_light_intensity + procedure, public :: set_light_intensity => surf_set_light_intensity + procedure, public :: get_specular_intensity => surf_get_specular_intensity + procedure, public :: set_specular_intensity => surf_set_specular_intensity + procedure, public :: get_transparency => surf_get_transparency + procedure, public :: set_transparency => surf_set_transparency + end type +contains ! ------------------------------------------------------------------------------ - module subroutine surf_init(this, term, fname, err) - ! Arguments + subroutine surf_init(this, term, fname, err) + !! Initializes the surface_plot object. class(surface_plot), intent(inout) :: this + !! The surface_plot object. integer(int32), intent(in), optional :: term + !! An optional input that is used to define the terminal. + !! The default terminal is a WXT terminal. The acceptable inputs + !! are: + !! + !! - GNUPLOT_TERMINAL_PNG + !! + !! - GNUPLOT_TERMINAL_QT + !! + !! - GNUPLOT_TERMINAL_WIN32 + !! + !! - GNUPLOT_TERMINAL_WXT + !! + !! - GNUPLOT_TERMINAL_LATEX character(len = *), intent(in), optional :: fname + !! A filename to pass to the terminal in the event the + !! terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG). class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables type(legend), pointer :: lgnd @@ -31,30 +80,36 @@ module subroutine surf_init(this, term, fname, err) ! Do not display the legend lgnd => this%get_legend() call lgnd%set_is_visible(.false.) - - ! Nullify the colormap - ! nullify(this%m_colormap) end subroutine ! ------------------------------------------------------------------------------ - pure module function surf_get_show_hidden(this) result(x) + pure function surf_get_show_hidden(this) result(x) + !! Gets a value indicating if hidden lines should be shown. class(surface_plot), intent(in) :: this + !! The surface_plot object. logical :: x + !! Returns true if hidden lines should be shown; else, false. x = this%m_showHidden end function ! ------------------------------------------------------------------------------ - module subroutine surf_set_show_hidden(this, x) + subroutine surf_set_show_hidden(this, x) + !! Sets a value indicating if hidden lines should be shown. class(surface_plot), intent(inout) :: this + !! The surface_plot object. logical, intent(in) :: x + !! Set to true if hidden lines should be shown; else, false. this%m_showHidden = x end subroutine ! ------------------------------------------------------------------------------ - module function surf_get_cmd(this) result(x) - ! Arguments + function surf_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this plot_3d + !! object. class(surface_plot), intent(in) :: this + !! The surface_plot object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -160,30 +215,48 @@ module function surf_get_cmd(this) result(x) ! end subroutine ! ------------------------------------------------------------------------------ - pure module function surf_get_smooth(this) result(x) + pure function surf_get_smooth(this) result(x) + !! Gets a value determining if the plotted surfaces should be + !! smoothed. class(surface_plot), intent(in) :: this + !! The surface_plot object. logical :: x + !! Returns true if the surface should be smoothed; else, false. x = this%m_smooth end function ! -------------------- - module subroutine surf_set_smooth(this, x) + subroutine surf_set_smooth(this, x) + !! Sets a value determining if the plotted surfaces should be + !! smoothed. class(surface_plot), intent(inout) :: this + !! The surface_plot object. logical, intent(in) :: x + !! Set to true if the surface should be smoothed; else, false. this%m_smooth = x end subroutine ! ------------------------------------------------------------------------------ - pure module function surf_get_show_contours(this) result(x) + pure function surf_get_show_contours(this) result(x) + !! Gets a value determining if a contour plot should be drawn in + !! conjunction with the surface plot. class(surface_plot), intent(in) :: this + !! The surface_plot object. logical :: x + !! Returns true if the contour plot should be drawn; else, false to + !! only draw the surface. x = this%m_contour end function ! -------------------- - module subroutine surf_set_show_contours(this, x) + subroutine surf_set_show_contours(this, x) + !! Sets a value determining if a contour plot should be drawn in + !! conjunction with the surface plot. class(surface_plot), intent(inout) :: this + !! The surface_plot object. logical, intent(in) :: x + !! Set to true if the contour plot should be drawn; else, false to + !! only draw the surface. this%m_contour = x end subroutine @@ -202,30 +275,47 @@ module subroutine surf_set_show_contours(this, x) ! end subroutine ! ------------------------------------------------------------------------------ - pure module function surf_get_use_lighting(this) result(x) + pure function surf_get_use_lighting(this) result(x) + !! Gets a value indicating if lighting, beyond the ambient + !! light source, is to be used. class(surface_plot), intent(in) :: this + !! The surface_plot object. logical :: x + !! True if lighting should be used; else, false. x = this%m_useLighting end function ! -------------------- - module subroutine surf_set_use_lighting(this, x) + subroutine surf_set_use_lighting(this, x) + !! Sets a value indicating if lighting, beyond the ambient + !! light source, is to be used. class(surface_plot), intent(inout) :: this + !! The surface_plot object. logical, intent(in) :: x + !! True if lighting should be used; else, false. this%m_useLighting = x end subroutine ! ------------------------------------------------------------------------------ - pure module function surf_get_light_intensity(this) result(x) + pure function surf_get_light_intensity(this) result(x) + !! Gets the ratio of the strength of the light source relative + !! to the ambient light. class(surface_plot), intent(in) :: this + !! The surface_plot object. real(real32) :: x + !! The light intensity ratio. x = this%m_lightIntensity end function ! -------------------- - module subroutine surf_set_light_intensity(this, x) + subroutine surf_set_light_intensity(this, x) + !! Sets the ratio of the strength of the light source relative + !! to the ambient light. class(surface_plot), intent(inout) :: this + !! The surface_plot object. real(real32), intent(in) :: x + !! The light intensity ratio. The value must exist in the + !! set [0, 1]; else, it will be clipped to lie within the range. if (x < 0.0) then this%m_lightIntensity = 0.0 else if (x > 1.0) then @@ -236,16 +326,25 @@ module subroutine surf_set_light_intensity(this, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function surf_get_specular_intensity(this) result(x) + pure function surf_get_specular_intensity(this) result(x) + !! Gets the ratio of the strength of the specular light source + !! relative to the ambient light. class(surface_plot), intent(in) :: this + !! The surface_plot object. real(real32) :: x + !! The specular light intensity ratio. x = this%m_specular end function ! -------------------- - module subroutine surf_set_specular_intensity(this, x) + subroutine surf_set_specular_intensity(this, x) + !! Sets the ratio of the strength of the specular light source + !! relative to the ambient light. class(surface_plot), intent(inout) :: this + !! The surface_plot object. real(real32), intent(in) :: x + !! The specular light intensity ratio. The value must exist in the + !! set [0, 1]; else, it will be clipped to lie within the range. if (x < 0.0) then this%m_specular = 0.0 else if (x > 1.0) then @@ -256,16 +355,26 @@ module subroutine surf_set_specular_intensity(this, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function surf_get_transparency(this) result(x) + pure function surf_get_transparency(this) result(x) + !! Gets a factor defining the transparency of plotted surfaces. class(surface_plot), intent(in) :: this + !! The surface_plot object. real(real32) :: x + !! A value existing on the set (0 1] defining the level of + !! transparency. A value of 1 indicates a fully opaque surface. x = this%m_transparency end function ! -------------------- - module subroutine surf_set_transparency(this, x) + subroutine surf_set_transparency(this, x) + !! Sets a factor defining the transparency of plotted surfaces. class(surface_plot), intent(inout) :: this + !! The surface_plot object. real(real32), intent(in) :: x + !! A value existing on the set (0 1] defining the level of + !! transparency. A value of 1 indicates a fully opaque surface. + !! Any values supplied outside of the set are clipped to fit within + !! (0 1]. if (x > 1.0) then this%m_transparency = 1.0 else if (x <= 0.0) then @@ -275,4 +384,5 @@ module subroutine surf_set_transparency(this, x) end if end subroutine -end submodule \ No newline at end of file +! ------------------------------------------------------------------------------ +end module \ No newline at end of file diff --git a/src/fplot_surface_plot_data.f90 b/src/fplot_surface_plot_data.f90 index e3d3e5e..914cf60 100644 --- a/src/fplot_surface_plot_data.f90 +++ b/src/fplot_surface_plot_data.f90 @@ -1,216 +1,315 @@ -! fplot_surface_plot_data.f90 +module fplot_surface_plot_data + use iso_fortran_env + use fplot_plot_data + use ferror + use fplot_errors + use strings + implicit none + private + public :: surface_plot_data + + type, extends(plot_data) :: surface_plot_data + !! Provides a three-dimensional surface plot data set. + real(real64), private, allocatable, dimension(:,:) :: m_x + !! Stores the x-coordinate data + real(real64), private, allocatable, dimension(:,:) :: m_y + !! Stores the y-coordinate data + real(real64), private, allocatable, dimension(:,:) :: m_z + !! Stores the z-coordinate data + logical, private :: m_wireframe = .false. + !! Set to true to display a wireframe of the surface; else, just a + !! smooth surface will be drawn + contains + procedure, public :: get_size => surfd_get_size + procedure, public :: get_x => surfd_get_x + procedure, public :: set_x => surfd_set_x + procedure, public :: get_y => surfd_get_y + procedure, public :: set_y => surfd_set_y + procedure, public :: get_z => surfd_get_z + procedure, public :: set_z => surfd_set_z + procedure, public :: get_use_wireframe => surfd_get_wireframe + procedure, public :: set_use_wireframe => surfd_set_wireframe + procedure, public :: get_command_string => surfd_get_cmd + procedure, public :: get_data_string => surfd_get_data_cmd + procedure, public :: define_data => surfd_set_data_1 + end type -submodule (fplot_core) fplot_surface_plot_data contains ! ------------------------------------------------------------------------------ - pure module function surfd_get_size(this, dim) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: dim - integer(int32) :: x - if (allocated(this%m_x)) then - x = size(this%m_x, dim) - else - x = 0 - end if - end function +pure function surfd_get_size(this, dim) result(x) + !! Gets the size of the stored data set. + class(surface_plot_data), intent(in) :: this + !! The suface_plot_data object. + integer(int32), intent(in) :: dim + !! The dimension of interest. Notice, data is stored as a + !! 2D matrix (i.e. only 1 and 2 are valid inputs). + integer(int32) :: x + !! The size of the requested dimension. + if (allocated(this%m_x)) then + x = size(this%m_x, dim) + else + x = 0 + end if +end function ! ------------------------------------------------------------------------------ - pure module function surfd_get_x(this, i, j) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: i, j - real(real64) :: x - if (allocated(this%m_x)) then - x = this%m_x(i,j) - else - x = 0.0d0 - end if - end function +pure function surfd_get_x(this, i, j) result(x) + !! Gets the requested X data point. + class(surface_plot_data), intent(in) :: this + !! The suface_plot_data object. + integer(int32), intent(in) :: i + !! The row index. + integer(int32), intent(in) :: j + !! The column index. + real(real64) :: x + !! The value. + if (allocated(this%m_x)) then + x = this%m_x(i,j) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine surfd_set_x(this, i, j, x) - class(surface_plot_data), intent(inout) :: this - integer(int32), intent(in) :: i, j - real(real64), intent(in) :: x - if (allocated(this%m_x)) then - this%m_x(i,j) = x - end if - end subroutine +subroutine surfd_set_x(this, i, j, x) + !! Sets the requested X data point. + class(surface_plot_data), intent(inout) :: this + !! The suface_plot_data object. + integer(int32), intent(in) :: i + !! The row index. + integer(int32), intent(in) :: j + !! The column index. + real(real64), intent(in) :: x + !! The value. + if (allocated(this%m_x)) then + this%m_x(i,j) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - pure module function surfd_get_y(this, i, j) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: i, j - real(real64) :: x - if (allocated(this%m_y)) then - x = this%m_y(i,j) - else - x = 0.0d0 - end if - end function +pure function surfd_get_y(this, i, j) result(x) + !! Gets the requested Y data point. + class(surface_plot_data), intent(in) :: this + !! The suface_plot_data object. + integer(int32), intent(in) :: i + !! The row index. + integer(int32), intent(in) :: j + !! The column index. + real(real64) :: x + !! The value. + if (allocated(this%m_y)) then + x = this%m_y(i,j) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine surfd_set_y(this, i, j, x) - class(surface_plot_data), intent(inout) :: this - integer(int32), intent(in) :: i, j - real(real64), intent(in) :: x - if (allocated(this%m_y)) then - this%m_y(i,j) = x - end if - end subroutine +subroutine surfd_set_y(this, i, j, x) + !! Sets the requested Y data point. + class(surface_plot_data), intent(inout) :: this + !! The suface_plot_data object. + integer(int32), intent(in) :: i + !! The row index. + integer(int32), intent(in) :: j + !! The column index. + real(real64), intent(in) :: x + !! The value. + if (allocated(this%m_y)) then + this%m_y(i,j) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - pure module function surfd_get_z(this, i, j) result(x) - class(surface_plot_data), intent(in) :: this - integer(int32), intent(in) :: i, j - real(real64) :: x - if (allocated(this%m_z)) then - x = this%m_z(i,j) - else - x = 0.0d0 - end if - end function +pure function surfd_get_z(this, i, j) result(x) + !! Gets the requested Z data point. + class(surface_plot_data), intent(in) :: this + !! The suface_plot_data object. + integer(int32), intent(in) :: i + !! The row index. + integer(int32), intent(in) :: j + !! The column index. + real(real64) :: x + !! The value. + if (allocated(this%m_z)) then + x = this%m_z(i,j) + else + x = 0.0d0 + end if +end function ! -------------------- - module subroutine surfd_set_z(this, i, j, x) - class(surface_plot_data), intent(inout) :: this - integer(int32), intent(in) :: i, j - real(real64), intent(in) :: x - if (allocated(this%m_z)) then - this%m_z(i,j) = x - end if - end subroutine +subroutine surfd_set_z(this, i, j, x) + !! Sets the requested Z data point. + class(surface_plot_data), intent(inout) :: this + !! The suface_plot_data object. + integer(int32), intent(in) :: i + !! The row index. + integer(int32), intent(in) :: j + !! The column index. + real(real64), intent(in) :: x + !! The value. + if (allocated(this%m_z)) then + this%m_z(i,j) = x + end if +end subroutine ! ------------------------------------------------------------------------------ - pure module function surfd_get_wireframe(this) result(x) - class(surface_plot_data), intent(in) :: this - logical :: x - x = this%m_wireframe - end function +pure function surfd_get_wireframe(this) result(x) + !! Gets a value determining if a wireframe mesh should be displayed. + class(surface_plot_data), intent(in) :: this + !! The suface_plot_data object. + logical :: x + !! Returns true if a wireframe mesh should be displayed; else, + !! false to display a solid surface. + x = this%m_wireframe +end function ! -------------------- - module subroutine surfd_set_wireframe(this, x) - class(surface_plot_data), intent(inout) :: this - logical, intent(in) :: x - this%m_wireframe = x - end subroutine +subroutine surfd_set_wireframe(this, x) + !! Sets a value determining if a wireframe mesh should be displayed. + class(surface_plot_data), intent(inout) :: this + !! The suface_plot_data object. + logical, intent(in) :: x + !! Set to true if a wireframe mesh should be displayed; else, + !! false to display a solid surface. + this%m_wireframe = x +end subroutine ! ------------------------------------------------------------------------------ - module function surfd_get_cmd(this) result(x) - ! Arguments - class(surface_plot_data), intent(in) :: this - character(len = :), allocatable :: x - - ! Local Variables - type(string_builder) :: str - integer(int32) :: n - - ! Initialization - call str%initialize() - - ! Title - n = len_trim(this%get_name()) - if (n > 0) then - call str%append(' "-" title "') - call str%append(this%get_name()) - call str%append('"') - else - call str%append(' "-" notitle') - end if - - ! PM3D or wireframe? - if (this%get_use_wireframe()) then - call str%append(" with lines") - else - call str%append(" with pm3d") - end if - - ! End - x = char(str%to_string()) - end function +function surfd_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this surface_plot_data + !! object. + class(surface_plot_data), intent(in) :: this + !! The suface_plot_data object. + character(len = :), allocatable :: x + !! The command string. + + ! Local Variables + type(string_builder) :: str + integer(int32) :: n + + ! Initialization + call str%initialize() + + ! Title + n = len_trim(this%get_name()) + if (n > 0) then + call str%append(' "-" title "') + call str%append(this%get_name()) + call str%append('"') + else + call str%append(' "-" notitle') + end if + + ! PM3D or wireframe? + if (this%get_use_wireframe()) then + call str%append(" with lines") + else + call str%append(" with pm3d") + end if + + ! End + x = char(str%to_string()) +end function ! ------------------------------------------------------------------------------ - module function surfd_get_data_cmd(this) result(x) - ! Arguments - class(surface_plot_data), intent(in) :: this - character(len = :), allocatable :: x - - ! Local Variables - type(string_builder) :: str - integer(int32) :: i, j, m, n - character :: delimiter, nl - - ! Initialization - call str%initialize() - m = this%get_size(1) - n = this%get_size(2) - delimiter = achar(9) ! tab delimiter - nl = new_line(nl) - - ! Process - do j = 1, n - do i = 1, m - call str%append(to_string(this%get_x(i,j))) - call str%append(delimiter) - call str%append(to_string(this%get_y(i,j))) - call str%append(delimiter) - call str%append(to_string(this%get_z(i,j))) - call str%append(nl) - end do - if (j /= n) call str%append(nl) +function surfd_get_data_cmd(this) result(x) + !! Gets the GNUPLOT command string containing the actual data to plot. + class(surface_plot_data), intent(in) :: this + !! The suface_plot_data object. + character(len = :), allocatable :: x + !! The GNUPLOT command string. + + ! Local Variables + type(string_builder) :: str + integer(int32) :: i, j, m, n + character :: delimiter, nl + + ! Initialization + call str%initialize() + m = this%get_size(1) + n = this%get_size(2) + delimiter = achar(9) ! tab delimiter + nl = new_line(nl) + + ! Process + do j = 1, n + do i = 1, m + call str%append(to_string(this%get_x(i,j))) + call str%append(delimiter) + call str%append(to_string(this%get_y(i,j))) + call str%append(delimiter) + call str%append(to_string(this%get_z(i,j))) + call str%append(nl) end do + if (j /= n) call str%append(nl) + end do - ! End - x = char(str%to_string()) - end function + ! End + x = char(str%to_string()) +end function ! ------------------------------------------------------------------------------ - module subroutine surfd_set_data_1(this, x, y, z, err) - ! Arguments - class(surface_plot_data), intent(inout) :: this - real(real64), intent(in), dimension(:,:) :: x, y, z - class(errors), intent(inout), optional, target :: err - - ! Local Variables - integer(int32) :: i, j, m, n, flag - class(errors), pointer :: errmgr - type(errors), target :: deferr - - ! Initialization - m = size(x, 1) - n = size(x, 2) - if (present(err)) then - errmgr => err - else - errmgr => deferr - end if - - ! Input Check - if (size(y, 1) /= m .or. size(y, 2) /= n .or. size(z, 1) /= m .or. size(z, 2) /= n) then - call errmgr%report_error("surfd_set_data_1", & - "The input arrays are not the same size.", & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) - return - end if - - ! Process - if (allocated(this%m_x)) deallocate(this%m_x) - if (allocated(this%m_y)) deallocate(this%m_y) - if (allocated(this%m_z)) deallocate(this%m_z) - allocate(this%m_x(m, n), stat = flag) - if (flag == 0) allocate(this%m_y(m, n), stat = flag) - if (flag == 0) allocate(this%m_z(m, n), stat = flag) - if (flag /= 0) then - call errmgr%report_error("surfd_set_data_1", & - "Insufficient memory available.", PLOT_OUT_OF_MEMORY_ERROR) - return - end if - do concurrent (j = 1:n) - do i = 1, m - this%m_x(i, j) = x(i, j) - this%m_y(i, j) = y(i, j) - this%m_z(i, j) = z(i, j) - end do +subroutine surfd_set_data_1(this, x, y, z, err) + !! Defines the data set. + class(surface_plot_data), intent(inout) :: this + !! The suface_plot_data object. + real(real64), intent(in), dimension(:,:) :: x + !! An M-by-N matrix containing the x-coordinate data. + real(real64), intent(in), dimension(:,:) :: y + !! An M-by-N matrix containing the y-coordinate data. + real(real64), intent(in), dimension(:,:) :: z + !! An M-by-N matrix containing the z-coordinate data. + class(errors), intent(inout), optional, target :: err + !! An error handling object. + + ! Local Variables + integer(int32) :: i, j, m, n, flag + class(errors), pointer :: errmgr + type(errors), target :: deferr + + ! Initialization + m = size(x, 1) + n = size(x, 2) + if (present(err)) then + errmgr => err + else + errmgr => deferr + end if + + ! Input Check + if (size(y, 1) /= m .or. size(y, 2) /= n) then + call report_matrix_size_mismatch_error(errmgr, "surfd_set_data_1", & + "y", m, n, size(y, 1), size(y,2)) + return + end if + + if (size(z, 1) /= m .or. size(z, 2) /= n) then + call report_matrix_size_mismatch_error(errmgr, "surfd_set_data_1", & + "z", m, n, size(z, 1), size(z,2)) + return + end if + + ! Process + if (allocated(this%m_x)) deallocate(this%m_x) + if (allocated(this%m_y)) deallocate(this%m_y) + if (allocated(this%m_z)) deallocate(this%m_z) + allocate(this%m_x(m, n), stat = flag) + if (flag == 0) allocate(this%m_y(m, n), stat = flag) + if (flag == 0) allocate(this%m_z(m, n), stat = flag) + if (flag /= 0) then + call report_memory_error(errmgr, "surfd_set_data_1", flag) + return + end if + do concurrent (j = 1:n) + do i = 1, m + this%m_x(i, j) = x(i, j) + this%m_y(i, j) = y(i, j) + this%m_z(i, j) = z(i, j) end do - end subroutine + end do +end subroutine -end submodule +! ------------------------------------------------------------------------------ +end module \ No newline at end of file diff --git a/src/fplot_terminal.f90 b/src/fplot_terminal.f90 index d2192b5..7658f1e 100644 --- a/src/fplot_terminal.f90 +++ b/src/fplot_terminal.f90 @@ -1,18 +1,80 @@ ! fplot_terminal.f90 -submodule (fplot_core) fplot_terminal +module fplot_terminal + use iso_fortran_env + use fplot_plot_object + use fplot_constants + use strings + implicit none + private + public :: terminal + public :: term_get_string_result + + type, abstract, extends(plot_object) :: terminal + !! A GNUPLOT terminal object. + private + integer(int32) :: m_windowHeight = GNUPLOT_DEFAULT_WINDOW_HEIGHT + !! The window height, in pixels. + integer(int32) :: m_windowWidth = GNUPLOT_DEFAULT_WINDOW_WIDTH + !! The window width, in pixels. + integer(int32) :: m_termID = 0 + !! The terminal ID number. + character(len = GNUPLOT_MAX_LABEL_LENGTH) :: m_title = "" + !! The plot window title. + logical :: m_hasTitle = .false. + !! Determines if the plot title is defined. + character(len = GNUPLOT_MAX_LABEL_LENGTH) :: m_fontName = & + GNUPLOT_DEFAULT_FONTNAME + !! The font used by the graph. + integer(int32) :: m_fontSize = GNUPLOT_DEFAULT_FONT_SIZE + !! The size of the font used by the graph. + contains + procedure, public :: get_window_width => term_get_window_width + procedure, public :: set_window_width => term_set_window_width + procedure, public :: get_window_height => term_get_window_height + procedure, public :: set_window_height => term_set_window_height + procedure, public :: get_command_string => term_get_command_string + procedure, public :: get_plot_window_number => & + term_get_plot_window_number + procedure, public :: set_plot_window_number => & + term_set_plot_window_number + procedure, public :: get_title => term_get_title + procedure, public :: set_title => term_set_title + procedure, public :: get_font_name => term_get_font_name + procedure, public :: set_font_name => term_set_font_name + procedure, public :: get_font_size => term_get_font_size + procedure, public :: set_font_size => term_set_font_size + procedure(term_get_string_result), deferred, public :: get_id_string + end type + + interface + function term_get_string_result(this) result(x) + !! Retrieves a string from a terminal. + import terminal + class(terminal), intent(in) :: this + !! The terminal object. + character(len = :), allocatable :: x + !! The string. + end function + end interface contains ! ------------------------------------------------------------------------------ - pure module function term_get_window_width(this) result(x) + pure function term_get_window_width(this) result(x) + !! Gets the width of the plot window. class(terminal), intent(in) :: this + !! The terminal object. integer :: x + !! The width of the plot window. x = this%m_windowWidth end function ! -------------------- - module subroutine term_set_window_width(this, x) + subroutine term_set_window_width(this, x) + !! Sets the width of the plot window. class(terminal), intent(inout) :: this + !! The terminal object. integer, intent(in) :: x + !! The width of the plot window. if (x == 0) then this%m_windowWidth = GNUPLOT_DEFAULT_WINDOW_WIDTH else @@ -21,16 +83,22 @@ module subroutine term_set_window_width(this, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function term_get_window_height(this) result(x) + pure function term_get_window_height(this) result(x) + !! Gets the height of the plot window. class(terminal), intent(in) :: this + !! The terminal object. integer :: x + !! The height of the plot window. x = this%m_windowHeight end function ! -------------------- - module subroutine term_set_window_height(this, x) + subroutine term_set_window_height(this, x) + !! Sets the height of the plot window. class(terminal), intent(inout) :: this + !! The terminal object. integer, intent(in) :: x + !! The height of the plot window. if (x == 0) then this%m_windowHeight = GNUPLOT_DEFAULT_WINDOW_HEIGHT else @@ -39,23 +107,32 @@ module subroutine term_set_window_height(this, x) end subroutine ! ------------------------------------------------------------------------------ - pure module function term_get_plot_window_number(this) result(x) + pure function term_get_plot_window_number(this) result(x) + !! Gets the targeted plot window number. class(terminal), intent(in) :: this + !! The terminal object. integer(int32) :: x + !! The plot window number. x = this%m_termID end function ! -------------------- - module subroutine term_set_plot_window_number(this, x) + subroutine term_set_plot_window_number(this, x) + !! Sets the targeted plot window number. class(terminal), intent(inout) :: this + !! The terminal object. integer(int32), intent(in) :: x + !! The plot window number. this%m_termID = x end subroutine ! ------------------------------------------------------------------------------ - module function term_get_title(this) result(str) + function term_get_title(this) result(str) + !! Gets the plot window's title. class(terminal), intent(in) :: this + !! The terminal object. character(len = :), allocatable :: str + !! The title. integer(int32) :: n n = len_trim(str) allocate(character(len = n) :: str) @@ -63,9 +140,12 @@ module function term_get_title(this) result(str) end function ! -------------------- - module subroutine term_set_title(this, txt) + subroutine term_set_title(this, txt) + !! Sets the plot window's title. class(terminal), intent(inout) :: this + !! The terminal object. character(len = *), intent(in) :: txt + !! The title. integer(int32) :: n n = min(len_trim(txt), GNUPLOT_MAX_LABEL_LENGTH) this%m_title = "" @@ -78,9 +158,12 @@ module subroutine term_set_title(this, txt) end subroutine ! ------------------------------------------------------------------------------ - module function term_get_font_name(this) result(name) + function term_get_font_name(this) result(name) + !! Gets the name of the font used for text displayed by the graph. class(terminal), intent(in) :: this + !! The terminal object. character(len = :), allocatable :: name + !! The font name. integer(int32) :: n n = len_trim(this%m_fontName) allocate(character(len = n) :: name) @@ -88,9 +171,12 @@ module function term_get_font_name(this) result(name) end function ! -------------------- - module subroutine term_set_font_name(this, name) + subroutine term_set_font_name(this, name) + !! Sets the name of the font used for text displayed by the graph. class(terminal), intent(inout) :: this + !! The terminal object. character(len = *), intent(in) :: name + !! The font name. integer(int32) :: n n = min(len_trim(name), GNUPLOT_MAX_LABEL_LENGTH) this%m_fontName = "" @@ -102,16 +188,22 @@ module subroutine term_set_font_name(this, name) end subroutine ! ------------------------------------------------------------------------------ - pure module function term_get_font_size(this) result(sz) + pure function term_get_font_size(this) result(sz) + !! Gets the size of the font used by the graph. class(terminal), intent(in) :: this + !! The terminal object. integer(int32) :: sz + !! The font size, in points. sz = this%m_fontSize end function ! -------------------- - module subroutine term_set_font_size(this, sz) + subroutine term_set_font_size(this, sz) + !! Sets the size of the font used by the graph. class(terminal), intent(inout) :: this + !! The terminal object. integer(int32), intent(in) :: sz + !! The font size, in points. if (sz == 0) then this%m_fontSize = GNUPLOT_DEFAULT_FONT_SIZE else @@ -120,10 +212,13 @@ module subroutine term_set_font_size(this, sz) end subroutine ! ------------------------------------------------------------------------------ - module function term_get_command_string(this) result(x) - ! Arguments + function term_get_command_string(this) result(x) + !! Returns the appropriate GNUPLOT command string to establish + !! appropriate parameters. class(terminal), intent(in) :: this + !! The terminal object. character(len = :), allocatable :: x + !! The GNUPLOT command string. ! Local Variables type(string_builder) :: str @@ -153,4 +248,4 @@ module function term_get_command_string(this) result(x) end function ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_tri_surface_plot_data.f90 b/src/fplot_tri_surface_plot_data.f90 index bb4bf1d..3dcba63 100644 --- a/src/fplot_tri_surface_plot_data.f90 +++ b/src/fplot_tri_surface_plot_data.f90 @@ -1,14 +1,45 @@ ! fplot_tri_surface_plot_data.f90 -submodule (fplot_core) fplot_tri_surface_plot_data +module fplot_tri_surface_plot_data + use iso_fortran_env + use fplot_plot_data + use fplot_delaunay_tri_surface + use strings + implicit none + private + public :: tri_surface_plot_data + + type, extends(plot_data) :: tri_surface_plot_data + !! Provides a three-dimensional surface plot data set constructed of + !! triangulated points. + real(real64), private, allocatable, dimension(:) :: m_x + !! An array of the x-coordinates of each point. + real(real64), private, allocatable, dimension(:) :: m_y + !! An array of the y-coordinates of each point. + real(real64), private, allocatable, dimension(:) :: m_z + !! An array of the z-coordinates of each point. + integer(int32), private, allocatable, dimension(:,:) :: m_indices + !! A 3-column matrix containing the indices of each triangle's + !! vertex. + logical, private :: m_wireframe = .true. + !! Determines if the surface should be drawn as a wireframe. + contains + procedure, public :: get_data_string => tspd_get_data_cmd + procedure, public :: get_command_string => tspd_get_cmd + procedure, public :: get_use_wireframe => tspd_get_wireframe + procedure, public :: set_use_wireframe => tspd_set_wireframe + procedure, public :: define_data => tspd_define_data + end type + contains ! ------------------------------------------------------------------------------ - module function tspd_get_data_cmd(this) result(x) - ! Arguments + function tspd_get_data_cmd(this) result(x) + !! Gets the GNUPLOT command string for representing the data. class(tri_surface_plot_data), intent(in) :: this + !! The tri_surface_plot_data object. character(len = :), allocatable :: x + !! The command string. - ! Local Variables ! Local Variables type(string_builder) :: str integer(int32) :: i, j, n @@ -96,10 +127,12 @@ module function tspd_get_data_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module function tspd_get_cmd(this) result(x) - ! Arguments + function tspd_get_cmd(this) result(x) + !! Gets the GNUPLOT command string for the object. class(tri_surface_plot_data), intent(in) :: this + !! The tri_surface_plot_data object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -130,24 +163,34 @@ module function tspd_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - pure module function tspd_get_wireframe(this) result(rst) + pure function tspd_get_wireframe(this) result(rst) + !! Gets a value determining if a wireframe mesh should be displayed. class(tri_surface_plot_data), intent(in) :: this + !! The tri_surface_plot_data object. logical :: rst + !! Returns true if the plot is to be drawn as a wireframe; else, + !! false to draw as a surface. rst = this%m_wireframe end function ! ------------------------------------------------------------------------------ - module subroutine tspd_set_wireframe(this, x) + subroutine tspd_set_wireframe(this, x) + !! Sets a value determining if a wireframe mesh should be displayed. class(tri_surface_plot_data), intent(inout) :: this + !! The tri_surface_plot_data object. logical, intent(in) :: x + !! Set to true if the plot is to be drawn as a wireframe; else, + !! false to draw as a surface. this%m_wireframe = x end subroutine ! ------------------------------------------------------------------------------ - module subroutine tspd_define_data(this, tri) - ! Arguments + subroutine tspd_define_data(this, tri) + !! Defines the data to plot. class(tri_surface_plot_data), intent(inout) :: this + !! The tri_surface_plot_data object. class(delaunay_tri_surface), intent(in) :: tri + !! The triangulation to plot. ! Process if (allocated(this%m_x)) deallocate(this%m_x) @@ -162,4 +205,4 @@ module subroutine tspd_define_data(this, tri) end subroutine ! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_triangulations_delaunay_2d.f90 b/src/fplot_triangulations_delaunay_2d.f90 index ade40db..d008650 100644 --- a/src/fplot_triangulations_delaunay_2d.f90 +++ b/src/fplot_triangulations_delaunay_2d.f90 @@ -1,17 +1,50 @@ -submodule (fplot_core) fplot_triangulations_delaunay_2d +module fplot_triangulations_delaunay_2d + use iso_fortran_env use geompack + use ferror + use fplot_errors + implicit none + private + public :: delaunay_tri_2d + + type delaunay_tri_2d + !! Provides a container for a 2D Delaunay triangulation. + real(real64), private, allocatable, dimension(:) :: m_x + !! An array of the x-coordinates of each point. + real(real64), private, allocatable, dimension(:) :: m_y + !! An array of the y-coordinates of each point. + integer(int32), private, allocatable, dimension(:,:) :: m_indices + !! A 3-column matrix containing the indices of each triangle's + !! vertex. + contains + procedure, public :: create => d2d_init + procedure, public :: get_point_count => d2d_get_pt_count + procedure, public :: get_triangle_count => d2d_get_tri_count + procedure, public :: get_points_x => d2d_get_x_pts + procedure, public :: get_points_y => d2d_get_y_pts + procedure, public :: get_indices => d2d_get_tris + procedure, public :: find_triangle => d2d_get_tri_with_pt + end type + contains ! ------------------------------------------------------------------------------ - module subroutine d2d_init(this, x, y, err) - ! Arguments + subroutine d2d_init(this, x, y, err) + !! Creates an unconstrained 2D Delaunay triangulation given a + !! set of x-y points. class(delaunay_tri_2d), intent(inout) :: this - real(real64), intent(in), dimension(:) :: x, y + !! The delaunay_tri_2d object. + real(real64), intent(in), dimension(:) :: x + !! An N-element array containing the x-coordinates of each + !! data point. + real(real64), intent(in), dimension(:) :: y + !! An N-element array containing the y-coordinates of each + !! data point. class(errors), intent(inout), target, optional :: err + !! An error handling object. ! Local Variables class(errors), pointer :: errmgr type(errors), target :: deferr - character(len = 256) :: errmsg integer(int32) :: i, npts, ntri, flag real(real64), allocatable, dimension(:,:) :: nodexy integer(int32), allocatable, dimension(:,:) :: trinode, trinbr @@ -26,11 +59,8 @@ module subroutine d2d_init(this, x, y, err) ! Input Check if (size(y) /= npts) then - write(errmsg, 200) & - "Expected the y-coordinate array to have ", npts, & - " elements, but found ", size(y), " instead." - call errmgr%report_error("d2d_init", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) + call report_array_size_mismatch_error(errmgr, "d2d_init", "y", & + npts, size(y)) return end if @@ -73,17 +103,17 @@ module subroutine d2d_init(this, x, y, err) ! Memory Error Handler 100 continue - call errmgr%report_error("d2d_init", "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "d2d_init", flag) return - -200 format(A, I0, A, I0, A) end subroutine ! ------------------------------------------------------------------------------ - pure module function d2d_get_pt_count(this) result(rst) + pure function d2d_get_pt_count(this) result(rst) + !! Gets the number of points in the triangulation. class(delaunay_tri_2d), intent(in) :: this + !! The delaunay_tri_2d object. integer(int32) :: rst + !! The number of points in the triangulation. if (allocated(this%m_x)) then rst = size(this%m_x) else @@ -92,9 +122,12 @@ pure module function d2d_get_pt_count(this) result(rst) end function ! ------------------------------------------------------------------------------ - pure module function d2d_get_tri_count(this) result(rst) + pure function d2d_get_tri_count(this) result(rst) + !! Gets the number of triangles in the triangulation. class(delaunay_tri_2d), intent(in) :: this + !! The delaunay_tri_2d object. integer(int32) :: rst + !! The number of triangles in the triangulation. if (allocated(this%m_indices)) then rst = size(this%m_indices, 1) else @@ -103,9 +136,12 @@ pure module function d2d_get_tri_count(this) result(rst) end function ! ------------------------------------------------------------------------------ - pure module function d2d_get_x_pts(this) result(rst) + pure function d2d_get_x_pts(this) result(rst) + !! Gets the x-coordinates of each point. class(delaunay_tri_2d), intent(in) :: this + !! The delaunay_tri_2d object. real(real64), allocatable, dimension(:) :: rst + !! An array of the x-coordinates of each point. if (allocated(this%m_x)) then rst = this%m_x else @@ -114,9 +150,12 @@ pure module function d2d_get_x_pts(this) result(rst) end function ! ------------------------------------------------------------------------------ - pure module function d2d_get_y_pts(this) result(rst) + pure function d2d_get_y_pts(this) result(rst) + !! Gets the y-coordinates of each point. class(delaunay_tri_2d), intent(in) :: this + !! The delaunay_tri_2d object. real(real64), allocatable, dimension(:) :: rst + !! An array of the y-coordinates of each point. if (allocated(this%m_y)) then rst = this%m_y else @@ -125,9 +164,13 @@ pure module function d2d_get_y_pts(this) result(rst) end function ! ------------------------------------------------------------------------------ - pure module function d2d_get_tris(this) result(rst) + pure function d2d_get_tris(this) result(rst) + !! Gets a list of the indices of each triangle vertex. class(delaunay_tri_2d), intent(in) :: this + !! The delaunay_tri_2d object. integer(int32), allocatable, dimension(:,:) :: rst + !! An N-by-3 matrix with each column containing the index of the + !! vertex of each triangle where N is the number of triangles. if (allocated(this%m_indices)) then rst = this%m_indices else @@ -136,11 +179,18 @@ pure module function d2d_get_tris(this) result(rst) end function ! ------------------------------------------------------------------------------ - pure module function d2d_get_tri_with_pt(this, x, y) result(rst) - ! Arguments + pure function d2d_get_tri_with_pt(this, x, y) result(rst) + !! Finds the triangle that contains the specified point. class(delaunay_tri_2d), intent(in) :: this - real(real64), intent(in) :: x, y + !! The delaunay_tri_2d object. + real(real64), intent(in) :: x + !! The x-coordinate of the point. + real(real64), intent(in) :: y + !! The y-coordinate of the point. integer(int32) :: rst + !! Returns the index of the triangle containing the specified + !! point. If no triangle contains the specified point, a value of + !! -1 is returned. ! Local Variables integer(int32) :: i, j @@ -199,4 +249,4 @@ pure elemental function point_inside_triangle(x1, y1, x2, y2, x3, y3, & end function ! ------------------------------------------------------------------------------ -end submodule \ No newline at end of file +end module \ No newline at end of file diff --git a/src/fplot_vector_field_plot_data.f90 b/src/fplot_vector_field_plot_data.f90 index 9306e49..c4041e1 100644 --- a/src/fplot_vector_field_plot_data.f90 +++ b/src/fplot_vector_field_plot_data.f90 @@ -1,12 +1,50 @@ ! fplot_vector_field_plot_data.f90 +! REF: + ! http://www.gnuplotting.org/vector-field-from-data-file/ + ! http://gnuplot.sourceforge.net/demo_5.4/vector.html + ! http://www.gnuplot.info/docs_5.4/Gnuplot_5_4.pdf (pg 79) + +module fplot_vector_field_plot_data + use iso_fortran_env + use fplot_plot_data + use fplot_errors + use fplot_colors + use ferror + use strings + implicit none + private + public :: vector_field_plot_data + + type, extends(plot_data_colored) :: vector_field_plot_data + !! Defines a two-dimensional vector-field plot data set. + real(real64), private, allocatable, dimension(:,:,:) :: m_data + !! An M-by-N-by-4 array containing the x, y, dx, and dy plot + !! data points. Optionally, a 5th page can be added to define the + !! color for each arrow. + real(real64), private :: m_arrowSize = 1.0d0 + !! The vector size (scaling factor). + logical, private :: m_filledHeads = .false. + !! Fill the arrow heads? + contains + procedure, public :: get_data_string => vfpd_get_data_cmd + procedure, public :: get_command_string => vfpd_get_cmd + procedure, public :: define_data => vfpd_define_data + procedure, public :: get_arrow_size => vfpd_get_arrow_size + procedure, public :: set_arrow_size => vfpd_set_arrow_size + procedure, public :: get_fill_arrow => vfpd_get_fill_arrow + procedure, public :: set_fill_arrow => vfpd_set_fill_arrow + procedure, public :: get_use_data_dependent_colors => & + vfpd_get_use_data_dependent_colors + end type -submodule (fplot_core) fplot_vector_field_plot_data contains ! ------------------------------------------------------------------------------ - module function vfpd_get_data_cmd(this) result(x) - ! Arguments + function vfpd_get_data_cmd(this) result(x) + !! Gets the GNUPLOT command string containing the actual data to plot. class(vector_field_plot_data), intent(in) :: this + !! The vector_field_plot_data object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -64,10 +102,13 @@ module function vfpd_get_data_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module function vfpd_get_cmd(this) result(x) - ! Arguments + function vfpd_get_cmd(this) result(x) + !! Gets the GNUPLOT command string to represent this + !! vector_field_plot_data object. class(vector_field_plot_data), intent(in) :: this + !! The vector_field_plot_data object. character(len = :), allocatable :: x + !! The command string. ! Local Variables type(string_builder) :: str @@ -108,12 +149,25 @@ module function vfpd_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module subroutine vfpd_define_data(this, x, y, dx, dy, c, err) - ! Arguments + subroutine vfpd_define_data(this, x, y, dx, dy, c, err) + !! Defines the data set. class(vector_field_plot_data), intent(inout) :: this - real(real64), intent(in), dimension(:,:) :: x, y, dx, dy + !! The vector_field_plot_data object. + real(real64), intent(in), dimension(:,:) :: x + !! An M-by-N matrix containing the x-locations of each arrow's + !! origin. + real(real64), intent(in), dimension(:,:) :: y + !! An M-by-N matrix containing the y-locations of each arrow's + !! origin. + real(real64), intent(in), dimension(:,:) :: dx + !! An M-by-N matrix containing the x-direction of each arrow. + real(real64), intent(in), dimension(:,:) :: dy + !! An M-by-N matrix containing the y-direction of each arrow. real(real64), intent(in), dimension(:,:), optional :: c + !! An optional M-by-N matrix containing information on how to color + !! the arrows. The colors are determined by the active colormap. class(errors), intent(inout), optional, target :: err + !! An error handling object. ! Local Variables integer(int32) :: i, j, m, n, flag @@ -131,22 +185,26 @@ module subroutine vfpd_define_data(this, x, y, dx, dy, c, err) ! Input Checking m = size(x, 1) n = size(x, 2) - if (.not.check_size(y, m, n)) then - call write_errmsg("y", size(y, 1), size(y, 2), m, n, errmsg) - go to 100 + if (size(y, 1) /= m .or. size(y, 2) /= n) then + call report_matrix_size_mismatch_error(errmgr, "vfpd_define_data", & + "y", m, n, size(y, 1), size(y, 2)) + return end if - if (.not.check_size(dx, m, n)) then - call write_errmsg("dx", size(y, 1), size(y, 2), m, n, errmsg) - go to 100 + if (size(dx, 1) /= m .or. size(dx, 2) /= n) then + call report_matrix_size_mismatch_error(errmgr, "vfpd_define_data", & + "dx", m, n, size(dx, 1), size(dx, 2)) + return end if - if (.not.check_size(dy, m, n)) then - call write_errmsg("dy", size(y, 1), size(y, 2), m, n, errmsg) - go to 100 + if (size(dy, 1) /= m .or. size(dy, 2) /= n) then + call report_matrix_size_mismatch_error(errmgr, "vfpd_define_data", & + "dy", m, n, size(dy, 1), size(dy, 2)) + return end if if (present(c)) then - if (.not.check_size(c, m, n)) then - call write_errmsg("c", size(c, 1), size(c, 2), m, n, errmsg) - go to 100 + if (size(c, 1) /= m .or. size(c, 2) /= n) then + call report_matrix_size_mismatch_error(errmgr, & + "vfpd_define_data", "c", m, n, size(c, 1), size(c, 2)) + return end if end if @@ -158,9 +216,7 @@ module subroutine vfpd_define_data(this, x, y, dx, dy, c, err) allocate(this%m_data(m, n, 4), stat = flag) end if if (flag /= 0) then - call errmgr%report_error("vfpd_define_data", & - "Insufficient memory available.", & - PLOT_OUT_OF_MEMORY_ERROR) + call report_memory_error(errmgr, "vfpd_define_data", flag) return end if @@ -188,88 +244,62 @@ module subroutine vfpd_define_data(this, x, y, dx, dy, c, err) ! End return - - ! Error Handling - 100 continue - call errmgr%report_error("vfpd_define_data", trim(errmsg), & - PLOT_ARRAY_SIZE_MISMATCH_ERROR) - return - - contains - ! Checks the size of the supplied array (xc) vs the reference row (mref) - ! and column (nref) dimensions. - ! - ! Returns true if the array size matches the reference; else, false. - function check_size(xc, mref, nref) result(rst) - ! Arguments - real(real64), intent(in), dimension(:,:) :: xc - integer(int32), intent(in) :: mref, nref - logical :: rst - - ! Process - if (size(xc, 1) /= mref .or. size(xc, 2) /= nref) then - rst = .false. - else - rst = .true. - end if - end function - - ! Writes an error message regarding array size. - subroutine write_errmsg(name, mfound, nfound, mexpect, nexpect, msg) - ! Arguments - character(len = *), intent(in) :: name - integer(int32), intent(in) :: mfound, nfound, mexpect, nexpect - character(len = *), intent(out) :: msg - - ! Process - write(msg, 200) "Input " // name // & - " is not sized correctly. Expected a ", mexpect, "-by-", & - nexpect, " matrix, but found a ", mfound, "-by-", nfound, & - " matrix." -200 format(A, I0, A, I0, A, I0, A, I0, A) - end subroutine end subroutine ! ------------------------------------------------------------------------------ - pure module function vfpd_get_arrow_size(this) result(rst) + pure function vfpd_get_arrow_size(this) result(rst) + !! Gets the scaling factor used to determine the arrow size. class(vector_field_plot_data), intent(in) :: this + !! The vector_field_plot_data object. real(real64) :: rst + !! The scaling factor. rst = this%m_arrowSize end function ! -------------------- - module subroutine vfpd_set_arrow_size(this, x) + subroutine vfpd_set_arrow_size(this, x) + !! Sets the scaling factor used to determine the arrow size. class(vector_field_plot_data), intent(inout) :: this + !! The vector_field_plot_data object. real(real64), intent(in) :: x + !! The scaling factor. this%m_arrowSize = x end subroutine ! ------------------------------------------------------------------------------ - pure module function vfpd_get_fill_arrow(this) result(rst) + pure function vfpd_get_fill_arrow(this) result(rst) + !! Gets a value determining if the arrow heads should be filled. class(vector_field_plot_data), intent(in) :: this + !! The vector_field_plot_data object. logical :: rst + !! True if the arrow heads should be filled; else, false. rst = this%m_filledHeads end function ! -------------------- - module subroutine vfpd_set_fill_arrow(this, x) + subroutine vfpd_set_fill_arrow(this, x) + !! Sets a value determining if the arrow heads should be filled. class(vector_field_plot_data), intent(inout) :: this + !! The vector_field_plot_data object. logical, intent(in) :: x + !! True if the arrow heads should be filled; else, false. this%m_filledHeads = x end subroutine ! ------------------------------------------------------------------------------ - pure module function vfpd_get_use_data_dependent_colors(this) result(rst) + pure function vfpd_get_use_data_dependent_colors(this) result(rst) + !! Gets a value indicating if data-dependent coloring should be + !! used. This is defined by supplying information on how to scale the + !! coloring when calling define_data. class(vector_field_plot_data), intent(in) :: this + !! The vector_field_plot_data object. logical :: rst + !! Returns true if data-dependent coloring is being used; else, + !! false. rst = .false. if (.not.allocated(this%m_data)) return rst = size(this%m_data, 3) >= 5 end function ! ------------------------------------------------------------------------------ - -! ------------------------------------------------------------------------------ - -! ------------------------------------------------------------------------------ -end submodule +end module diff --git a/src/fplot_windows_terminal.f90 b/src/fplot_windows_terminal.f90 index 078485c..52bc79b 100644 --- a/src/fplot_windows_terminal.f90 +++ b/src/fplot_windows_terminal.f90 @@ -1,15 +1,32 @@ ! fplot_windows_terminal.f90 -submodule (fplot_core) fplot_windows_terminal +module fplot_windows_terminal + use iso_fortran_env + use fplot_terminal + implicit none + private + public :: windows_terminal + + type, extends(terminal) :: windows_terminal + !! A Windows-specific terminal. + character(len = 3), private :: m_id = "win" + !! The terminal ID string + contains + procedure, public :: get_id_string => wt_get_term_string + end type + contains - module function wt_get_term_string(this) result(x) + function wt_get_term_string(this) result(x) + !! Retrieves a GNUPLOT terminal identifier string. class(windows_terminal), intent(in) :: this + !! The windows_terminal object. character(len = :), allocatable :: x + !! The string. integer(int32) :: n n = len_trim(this%m_id) allocate(character(len = n) :: x) x = this%m_id end function -end submodule +end module diff --git a/src/fplot_wxt_terminal.f90 b/src/fplot_wxt_terminal.f90 index 0cfebf2..055cf8a 100644 --- a/src/fplot_wxt_terminal.f90 +++ b/src/fplot_wxt_terminal.f90 @@ -1,13 +1,30 @@ ! fplot_wxt_terminal.f90 -submodule (fplot_core) fplot_wxt_terminal +module fplot_wxt_terminal + use iso_fortran_env + use fplot_terminal + implicit none + private + public :: wxt_terminal + + type, extends(terminal) :: wxt_terminal + !! A WXT terminal. + character(len = 3), private :: m_id = "wxt" + !! The terminal ID string + contains + procedure, public :: get_id_string => wxt_get_term_string + end type + contains - module function wxt_get_term_string(this) result(x) + function wxt_get_term_string(this) result(x) + !! Retrieves a GNUPLOT terminal identifier string. class(wxt_terminal), intent(in) :: this + !! The wxt_terminal object. character(len = :), allocatable :: x + !! The string. integer(int32) :: n n = len_trim(this%m_id) allocate(character(len = n) :: x) x = this%m_id end function -end submodule +end module From 70ab4f8448cefef0c12bde2d0e6183d519ee3425 Mon Sep 17 00:00:00 2001 From: jchristopherson Date: Thu, 27 Mar 2025 20:00:05 -0500 Subject: [PATCH 3/8] Clean up --- src/fplot_core.f90 | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/fplot_core.f90 b/src/fplot_core.f90 index 7643321..51c3863 100644 --- a/src/fplot_core.f90 +++ b/src/fplot_core.f90 @@ -247,21 +247,4 @@ module fplot_core ! FPLOT_PLOT_POLAR.F90 public :: plot_polar - - ! public :: assignment(=) - - - - - - -! ****************************************************************************** -! OPERATORS -! ------------------------------------------------------------------------------ - ! interface assignment(=) - ! ! module procedure :: clr_assign - ! ! module procedure :: lbl_assign - ! ! module procedure :: par_assign - ! end interface - end module From 7226629e279f5a0a73a6db22d1d3b62213889680 Mon Sep 17 00:00:00 2001 From: jchristopherson Date: Thu, 27 Mar 2025 20:01:33 -0500 Subject: [PATCH 4/8] Clean up --- src/fplot_core.f90 | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/fplot_core.f90 b/src/fplot_core.f90 index 51c3863..12d590a 100644 --- a/src/fplot_core.f90 +++ b/src/fplot_core.f90 @@ -1,17 +1,10 @@ -! fplot_core.f90 - -!> @brief \b fplot_core -!! -!! @par Purpose -!! FPLOT is a Fortran library providing a means of interacting with -!! [Gnuplot](http://www.gnuplot.info/) from a Fortran program. The library is -!! designed in an object-oriented manner, and as such utilizes language features -!! that require a compiler that supports the 2003 and 2008 standards. Additionally, -!! it is expected that Gnuplot is installed on the system path. For full -!! functionallity, a minimum of Gnuplot v5.2 is expected. -!! -!! @image html example_surface_plot_lighting_2.png module fplot_core + !! FPLOT is a Fortran library providing a means of interacting with + !! [GNUPLOT](http://www.gnuplot.info/) from a Fortran program. The library + !! is designed in an object-oriented manner, and as such utilizes language + !! features that require a compiler that supports the 2003 standard. + !! Additionally, it is expected that Gnuplot is installed on the system + !! path. For full functionallity, a minimum of GNUPLOT v5.2 is expected. use fplot_constants use fplot_core_routines use fplot_colors From e142b7494b08df3933b083e9cf9bea32ba90362f Mon Sep 17 00:00:00 2001 From: jchristopherson Date: Fri, 28 Mar 2025 05:47:12 -0500 Subject: [PATCH 5/8] Update documentation --- doc/css/bootstrap.css | 6013 ++++++++++++++++ doc/css/bootstrap.min.css | 10 + doc/css/font-awesome.css | 1672 +++++ doc/css/font-awesome.min.css | 4 + doc/css/local.css | 284 + doc/css/pygments.css | 61 + doc/favicon.png | Bin 0 -> 803 bytes doc/fonts/FontAwesome.otf | Bin 0 -> 85908 bytes doc/fonts/fontawesome-webfont.eot | Bin 0 -> 56006 bytes doc/fonts/fontawesome-webfont.svg | 520 ++ doc/fonts/fontawesome-webfont.ttf | Bin 0 -> 112160 bytes doc/fonts/fontawesome-webfont.woff | Bin 0 -> 65452 bytes doc/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes doc/fonts/glyphicons-halflings-regular.svg | 229 + doc/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes doc/fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes doc/index.html | 201 + doc/interface/cm_get_string_result.html | 245 + doc/interface/get_string_result.html | 245 + doc/interface/operator(==).html | 316 + doc/interface/operator(SLASH=).html | 316 + doc/interface/pa_get_string_result.html | 245 + doc/interface/pd_get_string_result.html | 245 + doc/interface/simplify_polyline.html | 547 ++ doc/interface/spd_get_int_value.html | 245 + doc/interface/spd_get_string_result.html | 245 + doc/interface/spd_get_value.html | 260 + doc/interface/spd_set_value.html | 273 + doc/interface/term_get_string_result.html | 245 + doc/js/MathJax-config/.gitignore | 0 doc/js/bootstrap.js | 2320 +++++++ doc/js/bootstrap.min.js | 7 + doc/js/ie10-viewport-bug-workaround.js | 22 + doc/js/jquery-2.1.3.min.js | 4 + doc/js/svg-pan-zoom.min.js | 3 + doc/lists/files.html | 181 + doc/lists/modules.html | 186 + doc/lists/procedures.html | 162 + doc/lists/types.html | 192 + doc/module/fplot_arrow.html | 579 ++ doc/module/fplot_colormap.html | 1395 ++++ doc/module/fplot_colors.html | 937 +++ doc/module/fplot_constants.html | 1321 ++++ doc/module/fplot_core.html | 295 + doc/module/fplot_core_routines.html | 497 ++ doc/module/fplot_delaunay_tri_surface.html | 409 ++ doc/module/fplot_errors.html | 809 +++ doc/module/fplot_filled_plot_data.html | 430 ++ doc/module/fplot_label.html | 398 ++ doc/module/fplot_latex_terminal.html | 468 ++ doc/module/fplot_legend.html | 458 ++ doc/module/fplot_multiplot.html | 528 ++ doc/module/fplot_plot.html | 763 ++ doc/module/fplot_plot_2d.html | 831 +++ doc/module/fplot_plot_3d.html | 892 +++ doc/module/fplot_plot_axis.html | 1437 ++++ doc/module/fplot_plot_bar.html | 837 +++ doc/module/fplot_plot_data.html | 1180 ++++ doc/module/fplot_plot_data_2d.html | 776 +++ doc/module/fplot_plot_data_3d.html | 770 +++ doc/module/fplot_plot_data_bar.html | 590 ++ doc/module/fplot_plot_data_error_bars.html | 528 ++ doc/module/fplot_plot_data_histogram.html | 649 ++ doc/module/fplot_plot_data_tri_2d.html | 440 ++ doc/module/fplot_plot_object.html | 394 ++ doc/module/fplot_plot_polar.html | 842 +++ doc/module/fplot_png_terminal.html | 468 ++ doc/module/fplot_qt_terminal.html | 446 ++ doc/module/fplot_simplify.html | 577 ++ doc/module/fplot_surface_plot.html | 1020 +++ doc/module/fplot_surface_plot_data.html | 449 ++ doc/module/fplot_terminal.html | 527 ++ doc/module/fplot_tri_surface_plot_data.html | 379 + .../fplot_triangulations_delaunay_2d.html | 378 + doc/module/fplot_vector_field_plot_data.html | 450 ++ doc/module/fplot_windows_terminal.html | 446 ++ doc/module/fplot_wxt_terminal.html | 446 ++ doc/proc/linspace.html | 313 + doc/proc/logspace.html | 313 + doc/proc/meshgrid.html | 299 + .../report_array_size_mismatch_error.html | 394 ++ doc/proc/report_file_create_error.html | 379 + .../report_matrix_size_mismatch_error.html | 424 ++ doc/proc/report_memory_error.html | 364 + doc/search.html | 156 + doc/sourcefile/fplot_arrow.f90.html | 839 +++ doc/sourcefile/fplot_colormap.f90.html | 758 ++ doc/sourcefile/fplot_colors.f90.html | 450 ++ doc/sourcefile/fplot_constants.f90.html | 420 ++ doc/sourcefile/fplot_core.f90.html | 511 ++ doc/sourcefile/fplot_core_routines.f90.html | 357 + .../fplot_delaunay_tri_surface.f90.html | 503 ++ doc/sourcefile/fplot_errors.f90.html | 393 ++ .../fplot_filled_plot_data.f90.html | 472 ++ doc/sourcefile/fplot_label.f90.html | 436 ++ doc/sourcefile/fplot_latex_terminal.f90.html | 370 + doc/sourcefile/fplot_legend.f90.html | 538 ++ doc/sourcefile/fplot_multiplot.f90.html | 749 ++ doc/sourcefile/fplot_plot.f90.html | 1131 +++ doc/sourcefile/fplot_plot_2d.f90.html | 621 ++ doc/sourcefile/fplot_plot_3d.f90.html | 720 ++ doc/sourcefile/fplot_plot_axis.f90.html | 713 ++ doc/sourcefile/fplot_plot_bar.f90.html | 350 + doc/sourcefile/fplot_plot_data.f90.html | 947 +++ doc/sourcefile/fplot_plot_data_2d.f90.html | 725 ++ doc/sourcefile/fplot_plot_data_3d.f90.html | 706 ++ doc/sourcefile/fplot_plot_data_bar.f90.html | 842 +++ .../fplot_plot_data_error_bars.f90.html | 959 +++ .../fplot_plot_data_histogram.f90.html | 552 ++ .../fplot_plot_data_tri_2d.f90.html | 543 ++ doc/sourcefile/fplot_plot_object.f90.html | 289 + doc/sourcefile/fplot_plot_polar.f90.html | 612 ++ doc/sourcefile/fplot_png_terminal.f90.html | 370 + doc/sourcefile/fplot_qt_terminal.f90.html | 298 + doc/sourcefile/fplot_simplify.f90.html | 621 ++ doc/sourcefile/fplot_surface_plot.f90.html | 656 ++ .../fplot_surface_plot_data.f90.html | 583 ++ doc/sourcefile/fplot_terminal.f90.html | 519 ++ .../fplot_tri_surface_plot_data.f90.html | 476 ++ .../fplot_triangulations_delaunay_2d.f90.html | 520 ++ .../fplot_vector_field_plot_data.f90.html | 573 ++ .../fplot_windows_terminal.f90.html | 300 + doc/sourcefile/fplot_wxt_terminal.f90.html | 298 + doc/src/fplot_arrow.f90 | 571 ++ doc/src/fplot_colormap.f90 | 490 ++ doc/src/fplot_colors.f90 | 182 + doc/src/fplot_constants.f90 | 152 + doc/src/fplot_core.f90 | 243 + doc/src/fplot_core_routines.f90 | 89 + doc/src/fplot_delaunay_tri_surface.f90 | 235 + doc/src/fplot_errors.f90 | 125 + doc/src/fplot_filled_plot_data.f90 | 204 + doc/src/fplot_label.f90 | 168 + doc/src/fplot_latex_terminal.f90 | 102 + doc/src/fplot_legend.f90 | 270 + doc/src/fplot_multiplot.f90 | 481 ++ doc/src/fplot_plot.f90 | 863 +++ doc/src/fplot_plot_2d.f90 | 353 + doc/src/fplot_plot_3d.f90 | 452 ++ doc/src/fplot_plot_axis.f90 | 445 ++ doc/src/fplot_plot_bar.f90 | 82 + doc/src/fplot_plot_data.f90 | 679 ++ doc/src/fplot_plot_data_2d.f90 | 457 ++ doc/src/fplot_plot_data_3d.f90 | 438 ++ doc/src/fplot_plot_data_bar.f90 | 574 ++ doc/src/fplot_plot_data_error_bars.f90 | 691 ++ doc/src/fplot_plot_data_histogram.f90 | 284 + doc/src/fplot_plot_data_tri_2d.f90 | 275 + doc/src/fplot_plot_object.f90 | 21 + doc/src/fplot_plot_polar.f90 | 344 + doc/src/fplot_png_terminal.f90 | 102 + doc/src/fplot_qt_terminal.f90 | 30 + doc/src/fplot_simplify.f90 | 353 + doc/src/fplot_surface_plot.f90 | 388 ++ doc/src/fplot_surface_plot_data.f90 | 315 + doc/src/fplot_terminal.f90 | 251 + doc/src/fplot_tri_surface_plot_data.f90 | 208 + doc/src/fplot_triangulations_delaunay_2d.f90 | 252 + doc/src/fplot_vector_field_plot_data.f90 | 305 + doc/src/fplot_windows_terminal.f90 | 32 + doc/src/fplot_wxt_terminal.f90 | 30 + doc/tipuesearch/.DS_Store | Bin 0 -> 12292 bytes doc/tipuesearch/img/.DS_Store | Bin 0 -> 6148 bytes doc/tipuesearch/img/loader.gif | Bin 0 -> 4178 bytes doc/tipuesearch/img/search.png | Bin 0 -> 368 bytes doc/tipuesearch/tipuesearch.css | 158 + doc/tipuesearch/tipuesearch.js | 452 ++ doc/tipuesearch/tipuesearch.min.js | 14 + doc/tipuesearch/tipuesearch_content.js | 1 + doc/tipuesearch/tipuesearch_set.js | 23 + doc/type/color.html | 470 ++ doc/type/colormap.html | 816 +++ doc/type/cool_colormap.html | 816 +++ doc/type/custom_colormap.html | 1026 +++ doc/type/delaunay_tri_2d.html | 695 ++ doc/type/delaunay_tri_surface.html | 983 +++ doc/type/earth_colormap.html | 816 +++ doc/type/filled_plot_data.html | 976 +++ doc/type/grey_colormap.html | 816 +++ doc/type/hot_colormap.html | 816 +++ doc/type/latex_terminal.html | 1149 ++++ doc/type/legend.html | 1107 +++ doc/type/multiplot.html | 1494 ++++ doc/type/parula_colormap.html | 816 +++ doc/type/plot.html | 2896 ++++++++ doc/type/plot_2d.html | 3358 +++++++++ doc/type/plot_3d.html | 3716 ++++++++++ doc/type/plot_arrow.html | 2121 ++++++ doc/type/plot_axis.html | 1344 ++++ doc/type/plot_bar.html | 3392 +++++++++ doc/type/plot_data.html | 476 ++ doc/type/plot_data_2d.html | 3266 +++++++++ doc/type/plot_data_3d.html | 3090 +++++++++ doc/type/plot_data_bar.html | 2211 ++++++ doc/type/plot_data_colored.html | 700 ++ doc/type/plot_data_error_bars.html | 2466 +++++++ doc/type/plot_data_histogram.html | 2569 +++++++ doc/type/plot_data_tri_2d.html | 1021 +++ doc/type/plot_label.html | 763 ++ doc/type/plot_object.html | 313 + doc/type/plot_polar.html | 3471 ++++++++++ doc/type/png_terminal.html | 1149 ++++ doc/type/qt_terminal.html | 1037 +++ doc/type/rainbow_colormap.html | 816 +++ doc/type/scatter_plot_data.html | 2555 +++++++ doc/type/surface_plot.html | 4440 ++++++++++++ doc/type/surface_plot_data.html | 1280 ++++ doc/type/terminal.html | 1037 +++ doc/type/tri_surface_plot_data.html | 652 ++ doc/type/vector_field_plot_data.html | 1118 +++ doc/type/windows_terminal.html | 1037 +++ doc/type/wxt_terminal.html | 1037 +++ doc/type/x_axis.html | 1344 ++++ doc/type/y2_axis.html | 1344 ++++ doc/type/y_axis.html | 1344 ++++ doc/type/z_axis.html | 1344 ++++ docs.md | 15 + docs/Doxyfile | 2886 -------- docs/Doxyfile.bak | 2766 -------- docs/html/annotated.html | 171 - docs/html/annotated_dup.js | 64 - docs/html/arrowdown.png | Bin 246 -> 0 bytes docs/html/arrowright.png | Bin 229 -> 0 bytes docs/html/bc_s.png | Bin 676 -> 0 bytes docs/html/bc_sd.png | Bin 635 -> 0 bytes docs/html/bdwn.png | Bin 147 -> 0 bytes docs/html/classes.html | 170 - docs/html/clipboard.js | 61 - docs/html/closed.png | Bin 132 -> 0 bytes docs/html/cookie.js | 58 - docs/html/default_2d_example.png | Bin 20979 -> 0 bytes docs/html/delaunay_8c_source.html | 1069 --- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 188 - .../dir_68267d1309a1af8e8297ef4c3efbcdba.js | 41 - docs/html/doc.png | Bin 746 -> 0 bytes docs/html/doc.svg | 12 - docs/html/docd.png | Bin 756 -> 0 bytes docs/html/docd.svg | 12 - docs/html/doxygen.css | 2225 ------ docs/html/doxygen.png | Bin 3779 -> 0 bytes docs/html/doxygen.svg | 28 - docs/html/doxygen_crawl.html | 214 - docs/html/dynsections.js | 201 - docs/html/example_data_depend_color_2d.png | Bin 50247 -> 0 bytes docs/html/example_data_depend_color_3d.png | Bin 98816 -> 0 bytes docs/html/example_delaunay_2d_1.png | Bin 119852 -> 0 bytes docs/html/example_delaunay_2d_2a.png | Bin 122995 -> 0 bytes docs/html/example_delaunay_2d_2b.png | Bin 42811 -> 0 bytes docs/html/example_label_plot.png | Bin 29677 -> 0 bytes docs/html/example_multiplot_1.png | Bin 46256 -> 0 bytes docs/html/example_multiplot_2.png | Bin 48531 -> 0 bytes docs/html/example_multiplot_log_scaled.png | Bin 21651 -> 0 bytes docs/html/example_plot.png | Bin 7030 -> 0 bytes docs/html/example_plot_2d_1.png | Bin 35156 -> 0 bytes docs/html/example_plot_2d_2.png | Bin 38083 -> 0 bytes docs/html/example_plot_2d_3.png | Bin 41289 -> 0 bytes docs/html/example_plot_3d_1.png | Bin 57851 -> 0 bytes docs/html/example_plot_3d_offset_1.png | Bin 57174 -> 0 bytes docs/html/example_plot_from_file.png | Bin 26951 -> 0 bytes docs/html/example_plot_legend_out.png | Bin 6984 -> 0 bytes docs/html/example_plot_with_label_1.png | Bin 29677 -> 0 bytes docs/html/example_plot_y2_axis_1.png | Bin 46205 -> 0 bytes docs/html/example_surface_plot.png | Bin 83691 -> 0 bytes docs/html/example_surface_plot_2.png | Bin 127831 -> 0 bytes docs/html/example_surface_plot_cool.png | Bin 85713 -> 0 bytes docs/html/example_surface_plot_default.png | Bin 94833 -> 0 bytes docs/html/example_surface_plot_earth.png | Bin 91768 -> 0 bytes docs/html/example_surface_plot_grey.png | Bin 56148 -> 0 bytes docs/html/example_surface_plot_horizontal.png | Bin 56826 -> 0 bytes docs/html/example_surface_plot_hot.png | Bin 71283 -> 0 bytes docs/html/example_surface_plot_lighting_1.png | Bin 92883 -> 0 bytes docs/html/example_surface_plot_lighting_2.png | Bin 142170 -> 0 bytes docs/html/example_surface_plot_no_border.png | Bin 85469 -> 0 bytes docs/html/example_surface_plot_no_tics.png | Bin 84991 -> 0 bytes docs/html/example_surface_plot_parula.png | Bin 92329 -> 0 bytes .../example_surface_plot_with_contour_1.png | Bin 85525 -> 0 bytes docs/html/example_tri_surf_1.png | Bin 84857 -> 0 bytes docs/html/example_wireframe_surface_plot.png | Bin 138026 -> 0 bytes docs/html/example_x_errorbars_1.png | Bin 25652 -> 0 bytes docs/html/example_xy_errorbars_1.png | Bin 21674 -> 0 bytes docs/html/example_xy_errorbox_1.png | Bin 18150 -> 0 bytes docs/html/example_y_errorbars_1.png | Bin 21629 -> 0 bytes docs/html/files.html | 150 - docs/html/files.js | 4 - docs/html/files_dup.js | 4 - docs/html/filled_example_1.png | Bin 27297 -> 0 bytes docs/html/filled_example_2.png | Bin 24806 -> 0 bytes docs/html/folderclosed.png | Bin 616 -> 0 bytes docs/html/folderclosed.svg | 11 - docs/html/folderclosedd.svg | 11 - docs/html/folderopen.png | Bin 597 -> 0 bytes docs/html/folderopen.svg | 17 - docs/html/folderopend.svg | 12 - docs/html/fplot__arrow_8f90_source.html | 469 -- docs/html/fplot__axis_8f90_source.html | 155 - docs/html/fplot__colormap_8f90_source.html | 435 -- docs/html/fplot__colors_8f90_source.html | 199 - docs/html/fplot__core_8f90_source.html | 3873 ----------- .../fplot__core__routines_8f90_source.html | 181 - docs/html/fplot__delaunay_8f90_source.html | 304 - ...t__delaunay__tri__surface_8f90_source.html | 312 - docs/html/fplot__errors_8f90_source.html | 115 - ...fplot__filled__plot__data_8f90_source.html | 276 - docs/html/fplot__label_8f90_source.html | 225 - .../fplot__latex__terminal_8f90_source.html | 183 - docs/html/fplot__legend_8f90_source.html | 288 - docs/html/fplot__multiplot_8f90_source.html | 480 -- docs/html/fplot__plot_8f90_source.html | 742 -- docs/html/fplot__plot__2d_8f90_source.html | 383 -- docs/html/fplot__plot__3d_8f90_source.html | 438 -- docs/html/fplot__plot__axis_8f90_source.html | 339 - docs/html/fplot__plot__bar_8f90_source.html | 169 - docs/html/fplot__plot__data_8f90_source.html | 138 - .../fplot__plot__data__2d_8f90_source.html | 486 -- .../fplot__plot__data__3d_8f90_source.html | 461 -- .../fplot__plot__data__bar_8f90_source.html | 552 -- ...plot__plot__data__colored_8f90_source.html | 153 - ...__plot__data__error__bars_8f90_source.html | 604 -- ...ot__plot__data__histogram_8f90_source.html | 342 - ...plot__plot__data__tri__2d_8f90_source.html | 316 - docs/html/fplot__plot__polar_8f90_source.html | 347 - .../fplot__png__terminal_8f90_source.html | 183 - .../html/fplot__qt__terminal_8f90_source.html | 127 - ...plot__scatter__plot__data_8f90_source.html | 397 -- docs/html/fplot__simplify_8f90_source.html | 436 -- .../fplot__string__builder_8f90_source.html | 178 - ...__builder__implementation_8f90_source.html | 232 - .../fplot__surface__plot_8f90_source.html | 392 -- ...plot__surface__plot__data_8f90_source.html | 330 - docs/html/fplot__terminal_8f90_source.html | 270 - ..._tri__surface__plot__data_8f90_source.html | 279 - ...angulations__delaunay__2d_8f90_source.html | 316 - ...vector__field__plot__data_8f90_source.html | 389 -- .../fplot__windows__terminal_8f90_source.html | 129 - .../fplot__wxt__terminal_8f90_source.html | 127 - docs/html/functions.html | 109 - docs/html/functions_b.html | 107 - docs/html/functions_c.html | 113 - docs/html/functions_d.html | 114 - docs/html/functions_dup.js | 15 - docs/html/functions_e.html | 109 - docs/html/functions_f.html | 110 - docs/html/functions_func.html | 113 - docs/html/functions_func.js | 12 - docs/html/functions_func_c.html | 111 - docs/html/functions_func_d.html | 114 - docs/html/functions_func_e.html | 109 - docs/html/functions_func_f.html | 110 - docs/html/functions_func_g.html | 223 - docs/html/functions_func_i.html | 110 - docs/html/functions_func_p.html | 116 - docs/html/functions_func_s.html | 192 - docs/html/functions_func_t.html | 109 - docs/html/functions_g.html | 224 - docs/html/functions_i.html | 110 - docs/html/functions_m.html | 208 - docs/html/functions_p.html | 116 - docs/html/functions_r.html | 109 - docs/html/functions_s.html | 192 - docs/html/functions_t.html | 109 - docs/html/functions_vars.html | 223 - docs/html/geompack_8f_source.html | 4561 ------------ docs/html/hierarchy.html | 170 - docs/html/hierarchy.js | 74 - docs/html/histogram_example_1.png | Bin 9174 -> 0 bytes docs/html/index.html | 108 - ...__core_1_1assignment_07_0a_08-members.html | 113 - ...acefplot__core_1_1assignment_07_0a_08.html | 130 - ...re_1_1cm__get__string__result-members.html | 111 - ...plot__core_1_1cm__get__string__result.html | 154 - ...efplot__core_1_1cm__get__string__result.js | 4 - ...__core_1_1get__string__result-members.html | 111 - ...acefplot__core_1_1get__string__result.html | 154 - ...rfacefplot__core_1_1get__string__result.js | 4 - ..._core_1_1operator_07_0a_0a_08-members.html | 111 - ...cefplot__core_1_1operator_07_0a_0a_08.html | 124 - ...__core_1_1operator_07_2_0a_08-members.html | 111 - ...acefplot__core_1_1operator_07_2_0a_08.html | 124 - ...re_1_1pa__get__string__result-members.html | 111 - ...plot__core_1_1pa__get__string__result.html | 154 - ...efplot__core_1_1pa__get__string__result.js | 4 - ...re_1_1pd__get__string__result-members.html | 111 - ...plot__core_1_1pd__get__string__result.html | 154 - ...efplot__core_1_1pd__get__string__result.js | 4 - ...t__core_1_1simplify__polyline-members.html | 113 - ...facefplot__core_1_1simplify__polyline.html | 182 - ..._core_1_1spd__get__int__value-members.html | 111 - ...cefplot__core_1_1spd__get__int__value.html | 154 - ...facefplot__core_1_1spd__get__int__value.js | 4 - ...e_1_1spd__get__string__result-members.html | 111 - ...lot__core_1_1spd__get__string__result.html | 154 - ...fplot__core_1_1spd__get__string__result.js | 4 - ...plot__core_1_1spd__get__value-members.html | 111 - ...terfacefplot__core_1_1spd__get__value.html | 159 - ...interfacefplot__core_1_1spd__get__value.js | 4 - ...plot__core_1_1spd__set__value-members.html | 111 - ...terfacefplot__core_1_1spd__set__value.html | 164 - ...interfacefplot__core_1_1spd__set__value.js | 4 - ..._1_1term__get__string__result-members.html | 111 - ...ot__core_1_1term__get__string__result.html | 154 - ...plot__core_1_1term__get__string__result.js | 4 - ...implify_1_1simplify__polyline-members.html | 107 - ...fplot__simplify_1_1simplify__polyline.html | 330 - ...cefplot__simplify_1_1simplify__polyline.js | 6 - ...string__builder_1_1to__string-members.html | 111 - ...efplot__string__builder_1_1to__string.html | 144 - docs/html/jquery.js | 34 - docs/html/menu.js | 134 - docs/html/menudata.js | 78 - docs/html/minus.svg | 8 - docs/html/minusd.svg | 8 - docs/html/namespacefplot__core.html | 1972 ------ docs/html/namespacefplot__core.js | 138 - docs/html/namespacefplot__errors.html | 134 - .../html/namespacefplot__string__builder.html | 123 - docs/html/namespacefplot__string__builder.js | 5 - docs/html/namespacemembers.html | 204 - docs/html/namespacemembers_dup.js | 16 - docs/html/namespacemembers_func.html | 115 - docs/html/namespacemembers_g.html | 135 - docs/html/namespacemembers_h.html | 108 - docs/html/namespacemembers_l.html | 168 - docs/html/namespacemembers_m.html | 144 - docs/html/namespacemembers_p.html | 381 - docs/html/namespacemembers_q.html | 108 - docs/html/namespacemembers_r.html | 108 - docs/html/namespacemembers_s.html | 237 - docs/html/namespacemembers_vars.html | 204 - docs/html/namespacemembers_w.html | 108 - docs/html/namespacemembers_x.html | 108 - docs/html/namespacemembers_y.html | 111 - docs/html/namespacemembers_z.html | 108 - docs/html/namespaces.html | 171 - docs/html/namespaces.js | 5 - docs/html/namespaces_dup.js | 4 - docs/html/nav_f.png | Bin 153 -> 0 bytes docs/html/nav_fd.png | Bin 169 -> 0 bytes docs/html/nav_g.png | Bin 95 -> 0 bytes docs/html/nav_h.png | Bin 98 -> 0 bytes docs/html/nav_hd.png | Bin 114 -> 0 bytes docs/html/navtree.css | 149 - docs/html/navtree.js | 482 -- docs/html/navtreedata.js | 62 - docs/html/navtreeindex0.js | 253 - docs/html/navtreeindex1.js | 253 - docs/html/navtreeindex2.js | 253 - docs/html/navtreeindex3.js | 253 - docs/html/navtreeindex4.js | 253 - docs/html/navtreeindex5.js | 52 - docs/html/open.png | Bin 123 -> 0 bytes docs/html/plus.svg | 9 - docs/html/plusd.svg | 9 - docs/html/polar_example_1.png | Bin 31020 -> 0 bytes docs/html/polar_example_2.png | Bin 29828 -> 0 bytes docs/html/resize.js | 109 - docs/html/search/all_0.html | 30 - docs/html/search/all_0.js | 12 - docs/html/search/all_1.html | 30 - docs/html/search/all_1.js | 4 - docs/html/search/all_10.html | 30 - docs/html/search/all_10.js | 7 - docs/html/search/all_11.html | 30 - docs/html/search/all_11.js | 4 - docs/html/search/all_12.html | 30 - docs/html/search/all_12.js | 5 - docs/html/search/all_13.html | 30 - docs/html/search/all_13.js | 4 - docs/html/search/all_14.js | 5 - docs/html/search/all_15.js | 4 - docs/html/search/all_2.html | 30 - docs/html/search/all_2.js | 33 - docs/html/search/all_3.html | 30 - docs/html/search/all_3.js | 11 - docs/html/search/all_4.html | 30 - docs/html/search/all_4.js | 5 - docs/html/search/all_5.html | 30 - docs/html/search/all_5.js | 7 - docs/html/search/all_6.html | 30 - docs/html/search/all_6.js | 132 - docs/html/search/all_7.html | 30 - docs/html/search/all_7.js | 4 - docs/html/search/all_8.html | 30 - docs/html/search/all_8.js | 5 - docs/html/search/all_9.html | 30 - docs/html/search/all_9.js | 17 - docs/html/search/all_a.html | 30 - docs/html/search/all_a.js | 117 - docs/html/search/all_b.html | 30 - docs/html/search/all_b.js | 5 - docs/html/search/all_c.html | 30 - docs/html/search/all_c.js | 44 - docs/html/search/all_d.html | 30 - docs/html/search/all_d.js | 4 - docs/html/search/all_e.html | 30 - docs/html/search/all_e.js | 5 - docs/html/search/all_f.html | 30 - docs/html/search/all_f.js | 95 - docs/html/search/classes_0.html | 30 - docs/html/search/classes_0.js | 4 - docs/html/search/classes_1.html | 30 - docs/html/search/classes_1.js | 8 - docs/html/search/classes_10.html | 30 - docs/html/search/classes_10.js | 5 - docs/html/search/classes_11.html | 30 - docs/html/search/classes_11.js | 4 - docs/html/search/classes_12.js | 5 - docs/html/search/classes_13.js | 4 - docs/html/search/classes_2.html | 30 - docs/html/search/classes_2.js | 5 - docs/html/search/classes_3.html | 30 - docs/html/search/classes_3.js | 4 - docs/html/search/classes_4.html | 30 - docs/html/search/classes_4.js | 4 - docs/html/search/classes_5.html | 30 - docs/html/search/classes_5.js | 5 - docs/html/search/classes_6.html | 30 - docs/html/search/classes_6.js | 4 - docs/html/search/classes_7.html | 30 - docs/html/search/classes_7.js | 5 - docs/html/search/classes_8.html | 30 - docs/html/search/classes_8.js | 4 - docs/html/search/classes_9.html | 30 - docs/html/search/classes_9.js | 5 - docs/html/search/classes_a.html | 30 - docs/html/search/classes_a.js | 24 - docs/html/search/classes_b.html | 30 - docs/html/search/classes_b.js | 4 - docs/html/search/classes_c.html | 30 - docs/html/search/classes_c.js | 4 - docs/html/search/classes_d.html | 30 - docs/html/search/classes_d.js | 11 - docs/html/search/classes_e.html | 30 - docs/html/search/classes_e.js | 6 - docs/html/search/classes_f.html | 30 - docs/html/search/classes_f.js | 4 - docs/html/search/close.png | Bin 273 -> 0 bytes docs/html/search/close.svg | 18 - docs/html/search/functions_0.html | 30 - docs/html/search/functions_0.js | 8 - docs/html/search/functions_1.html | 30 - docs/html/search/functions_1.js | 9 - docs/html/search/functions_2.html | 30 - docs/html/search/functions_2.js | 4 - docs/html/search/functions_3.html | 30 - docs/html/search/functions_3.js | 5 - docs/html/search/functions_4.html | 30 - docs/html/search/functions_4.js | 118 - docs/html/search/functions_5.html | 30 - docs/html/search/functions_5.js | 5 - docs/html/search/functions_6.html | 30 - docs/html/search/functions_6.js | 11 - docs/html/search/functions_7.html | 30 - docs/html/search/functions_7.js | 87 - docs/html/search/functions_8.html | 30 - docs/html/search/functions_8.js | 4 - docs/html/search/functions_9.html | 30 - docs/html/search/functions_9.js | 5 - docs/html/search/functions_a.html | 30 - docs/html/search/functions_a.js | 4 - docs/html/search/functions_b.html | 26 - docs/html/search/functions_b.js | 5 - docs/html/search/functions_c.html | 26 - docs/html/search/functions_c.js | 4 - docs/html/search/functions_d.html | 26 - docs/html/search/functions_d.js | 4 - docs/html/search/functions_e.html | 30 - docs/html/search/functions_e.js | 5 - docs/html/search/functions_f.html | 30 - docs/html/search/functions_f.js | 4 - docs/html/search/mag.svg | 24 - docs/html/search/mag_d.svg | 24 - docs/html/search/mag_sel.png | Bin 465 -> 0 bytes docs/html/search/mag_sel.svg | 31 - docs/html/search/mag_seld.svg | 31 - docs/html/search/namespaces_0.html | 30 - docs/html/search/namespaces_0.js | 4 - docs/html/search/nomatches.html | 12 - docs/html/search/search.css | 291 - docs/html/search/search.js | 694 -- docs/html/search/search_l.png | Bin 567 -> 0 bytes docs/html/search/search_m.png | Bin 158 -> 0 bytes docs/html/search/search_r.png | Bin 553 -> 0 bytes docs/html/search/searchdata.js | 27 - docs/html/search/variables_0.html | 30 - docs/html/search/variables_0.js | 11 - docs/html/search/variables_1.html | 30 - docs/html/search/variables_1.js | 4 - docs/html/search/variables_2.html | 30 - docs/html/search/variables_2.js | 23 - docs/html/search/variables_3.html | 30 - docs/html/search/variables_3.js | 15 - docs/html/search/variables_4.html | 30 - docs/html/search/variables_4.js | 15 - docs/html/search/variables_5.html | 30 - docs/html/search/variables_5.js | 116 - docs/html/search/variables_6.html | 30 - docs/html/search/variables_6.js | 15 - docs/html/search/variables_7.js | 4 - docs/html/splitbar.png | Bin 314 -> 0 bytes docs/html/splitbard.png | Bin 282 -> 0 bytes docs/html/square_2d_example.png | Bin 18274 -> 0 bytes docs/html/structdelaunay__s-members.html | 115 - docs/html/structdelaunay__s.html | 140 - docs/html/structdelaunay__s.js | 10 - docs/html/structface__s-members.html | 110 - docs/html/structface__s.html | 125 - docs/html/structface__s.js | 5 - .../structfplot__core_1_1color-members.html | 115 - docs/html/structfplot__core_1_1color.html | 283 - docs/html/structfplot__core_1_1color.js | 8 - ...structfplot__core_1_1colormap-members.html | 124 - docs/html/structfplot__core_1_1colormap.html | 564 -- docs/html/structfplot__core_1_1colormap.js | 17 - docs/html/structfplot__core_1_1colormap.png | Bin 2736 -> 0 bytes ...fplot__core_1_1cool__colormap-members.html | 124 - .../structfplot__core_1_1cool__colormap.html | 217 - .../structfplot__core_1_1cool__colormap.js | 4 - .../structfplot__core_1_1cool__colormap.png | Bin 904 -> 0 bytes ...lot__core_1_1custom__colormap-members.html | 128 - ...structfplot__core_1_1custom__colormap.html | 337 - .../structfplot__core_1_1custom__colormap.js | 6 - .../structfplot__core_1_1custom__colormap.png | Bin 963 -> 0 bytes ...ot__core_1_1delaunay__tri__2d-members.html | 120 - ...tructfplot__core_1_1delaunay__tri__2d.html | 434 -- .../structfplot__core_1_1delaunay__tri__2d.js | 13 - ...structfplot__core_1_1delaunay__tri__2d.png | Bin 781 -> 0 bytes ...ore_1_1delaunay__tri__surface-members.html | 127 - ...fplot__core_1_1delaunay__tri__surface.html | 367 - ...ctfplot__core_1_1delaunay__tri__surface.js | 8 - ...tfplot__core_1_1delaunay__tri__surface.png | Bin 775 -> 0 bytes ...plot__core_1_1earth__colormap-members.html | 124 - .../structfplot__core_1_1earth__colormap.html | 217 - .../structfplot__core_1_1earth__colormap.js | 4 - .../structfplot__core_1_1earth__colormap.png | Bin 936 -> 0 bytes ...t__core_1_1filled__plot__data-members.html | 128 - ...ructfplot__core_1_1filled__plot__data.html | 424 -- ...structfplot__core_1_1filled__plot__data.js | 11 - ...tructfplot__core_1_1filled__plot__data.png | Bin 1225 -> 0 bytes ...fplot__core_1_1grey__colormap-members.html | 124 - .../structfplot__core_1_1grey__colormap.html | 217 - .../structfplot__core_1_1grey__colormap.js | 4 - .../structfplot__core_1_1grey__colormap.png | Bin 940 -> 0 bytes ...tfplot__core_1_1hot__colormap-members.html | 124 - .../structfplot__core_1_1hot__colormap.html | 217 - .../structfplot__core_1_1hot__colormap.js | 4 - .../structfplot__core_1_1hot__colormap.png | Bin 896 -> 0 bytes ...plot__core_1_1latex__terminal-members.html | 135 - .../structfplot__core_1_1latex__terminal.html | 394 -- .../structfplot__core_1_1latex__terminal.js | 9 - .../structfplot__core_1_1latex__terminal.png | Bin 928 -> 0 bytes .../structfplot__core_1_1legend-members.html | 132 - docs/html/structfplot__core_1_1legend.html | 759 -- docs/html/structfplot__core_1_1legend.js | 25 - docs/html/structfplot__core_1_1legend.png | Bin 596 -> 0 bytes ...tructfplot__core_1_1multiplot-members.html | 134 - docs/html/structfplot__core_1_1multiplot.html | 825 --- docs/html/structfplot__core_1_1multiplot.js | 26 - docs/html/structfplot__core_1_1multiplot.png | Bin 592 -> 0 bytes ...lot__core_1_1parula__colormap-members.html | 124 - ...structfplot__core_1_1parula__colormap.html | 217 - .../structfplot__core_1_1parula__colormap.js | 4 - .../structfplot__core_1_1parula__colormap.png | Bin 960 -> 0 bytes .../structfplot__core_1_1plot-members.html | 168 - docs/html/structfplot__core_1_1plot.html | 1811 ----- docs/html/structfplot__core_1_1plot.js | 61 - docs/html/structfplot__core_1_1plot.png | Bin 1998 -> 0 bytes ...structfplot__core_1_1plot__2d-members.html | 181 - docs/html/structfplot__core_1_1plot__2d.html | 761 -- docs/html/structfplot__core_1_1plot__2d.js | 18 - docs/html/structfplot__core_1_1plot__2d.png | Bin 1053 -> 0 bytes ...structfplot__core_1_1plot__3d-members.html | 190 - docs/html/structfplot__core_1_1plot__3d.html | 1012 --- docs/html/structfplot__core_1_1plot__3d.js | 27 - docs/html/structfplot__core_1_1plot__3d.png | Bin 1115 -> 0 bytes ...uctfplot__core_1_1plot__arrow-members.html | 160 - .../structfplot__core_1_1plot__arrow.html | 1643 ----- docs/html/structfplot__core_1_1plot__arrow.js | 34 - .../html/structfplot__core_1_1plot__arrow.png | Bin 590 -> 0 bytes ...ructfplot__core_1_1plot__axis-members.html | 138 - .../html/structfplot__core_1_1plot__axis.html | 927 --- docs/html/structfplot__core_1_1plot__axis.js | 31 - docs/html/structfplot__core_1_1plot__axis.png | Bin 1710 -> 0 bytes ...tructfplot__core_1_1plot__bar-members.html | 184 - docs/html/structfplot__core_1_1plot__bar.html | 461 -- docs/html/structfplot__core_1_1plot__bar.js | 5 - docs/html/structfplot__core_1_1plot__bar.png | Bin 1049 -> 0 bytes ...ructfplot__core_1_1plot__data-members.html | 115 - .../html/structfplot__core_1_1plot__data.html | 276 - docs/html/structfplot__core_1_1plot__data.js | 7 - docs/html/structfplot__core_1_1plot__data.png | Bin 4787 -> 0 bytes ...fplot__core_1_1plot__data__2d-members.html | 176 - .../structfplot__core_1_1plot__data__2d.html | 966 --- .../structfplot__core_1_1plot__data__2d.js | 20 - .../structfplot__core_1_1plot__data__2d.png | Bin 1536 -> 0 bytes ...fplot__core_1_1plot__data__3d-members.html | 173 - .../structfplot__core_1_1plot__data__3d.html | 839 --- .../structfplot__core_1_1plot__data__3d.js | 19 - .../structfplot__core_1_1plot__data__3d.png | Bin 1532 -> 0 bytes ...plot__core_1_1plot__data__bar-members.html | 153 - .../structfplot__core_1_1plot__data__bar.html | 814 --- .../structfplot__core_1_1plot__data__bar.js | 11 - .../structfplot__core_1_1plot__data__bar.png | Bin 1582 -> 0 bytes ...__core_1_1plot__data__colored-members.html | 122 - ...uctfplot__core_1_1plot__data__colored.html | 355 - ...tructfplot__core_1_1plot__data__colored.js | 8 - ...ructfplot__core_1_1plot__data__colored.png | Bin 4380 -> 0 bytes ...re_1_1plot__data__error__bars-members.html | 145 - ...plot__core_1_1plot__data__error__bars.html | 870 --- ...tfplot__core_1_1plot__data__error__bars.js | 22 - ...fplot__core_1_1plot__data__error__bars.png | Bin 1278 -> 0 bytes ...core_1_1plot__data__histogram-members.html | 161 - ...tfplot__core_1_1plot__data__histogram.html | 453 -- ...uctfplot__core_1_1plot__data__histogram.js | 5 - ...ctfplot__core_1_1plot__data__histogram.png | Bin 1577 -> 0 bytes ...__core_1_1plot__data__tri__2d-members.html | 132 - ...uctfplot__core_1_1plot__data__tri__2d.html | 493 -- ...tructfplot__core_1_1plot__data__tri__2d.js | 15 - ...ructfplot__core_1_1plot__data__tri__2d.png | Bin 1235 -> 0 bytes ...uctfplot__core_1_1plot__label-members.html | 123 - .../structfplot__core_1_1plot__label.html | 516 -- docs/html/structfplot__core_1_1plot__label.js | 16 - .../html/structfplot__core_1_1plot__label.png | Bin 589 -> 0 bytes ...ctfplot__core_1_1plot__object-members.html | 111 - .../structfplot__core_1_1plot__object.html | 174 - .../html/structfplot__core_1_1plot__object.js | 4 - .../structfplot__core_1_1plot__object.png | Bin 3533 -> 0 bytes ...uctfplot__core_1_1plot__polar-members.html | 182 - .../structfplot__core_1_1plot__polar.html | 795 --- docs/html/structfplot__core_1_1plot__polar.js | 18 - .../html/structfplot__core_1_1plot__polar.png | Bin 817 -> 0 bytes ...tfplot__core_1_1png__terminal-members.html | 135 - .../structfplot__core_1_1png__terminal.html | 394 -- .../structfplot__core_1_1png__terminal.js | 9 - .../structfplot__core_1_1png__terminal.png | Bin 920 -> 0 bytes ...ctfplot__core_1_1qt__terminal-members.html | 132 - .../structfplot__core_1_1qt__terminal.html | 272 - .../html/structfplot__core_1_1qt__terminal.js | 5 - .../structfplot__core_1_1qt__terminal.png | Bin 888 -> 0 bytes ...ot__core_1_1rainbow__colormap-members.html | 124 - ...tructfplot__core_1_1rainbow__colormap.html | 217 - .../structfplot__core_1_1rainbow__colormap.js | 4 - ...structfplot__core_1_1rainbow__colormap.png | Bin 967 -> 0 bytes ...__core_1_1scatter__plot__data-members.html | 164 - ...uctfplot__core_1_1scatter__plot__data.html | 1422 ---- ...tructfplot__core_1_1scatter__plot__data.js | 46 - ...ructfplot__core_1_1scatter__plot__data.png | Bin 2107 -> 0 bytes ...tfplot__core_1_1surface__plot-members.html | 211 - .../structfplot__core_1_1surface__plot.html | 1050 --- .../structfplot__core_1_1surface__plot.js | 26 - .../structfplot__core_1_1surface__plot.png | Bin 1107 -> 0 bytes ...__core_1_1surface__plot__data-members.html | 129 - ...uctfplot__core_1_1surface__plot__data.html | 644 -- ...tructfplot__core_1_1surface__plot__data.js | 19 - ...ructfplot__core_1_1surface__plot__data.png | Bin 949 -> 0 bytes ...structfplot__core_1_1terminal-members.html | 131 - docs/html/structfplot__core_1_1terminal.html | 735 -- docs/html/structfplot__core_1_1terminal.js | 24 - docs/html/structfplot__core_1_1terminal.png | Bin 2227 -> 0 bytes ...e_1_1tri__surface__plot__data-members.html | 123 - ...lot__core_1_1tri__surface__plot__data.html | 417 -- ...fplot__core_1_1tri__surface__plot__data.js | 13 - ...plot__core_1_1tri__surface__plot__data.png | Bin 978 -> 0 bytes ..._1_1vector__field__plot__data-members.html | 131 - ...ot__core_1_1vector__field__plot__data.html | 506 -- ...plot__core_1_1vector__field__plot__data.js | 14 - ...lot__core_1_1vector__field__plot__data.png | Bin 1287 -> 0 bytes ...ot__core_1_1windows__terminal-members.html | 132 - ...tructfplot__core_1_1windows__terminal.html | 272 - .../structfplot__core_1_1windows__terminal.js | 5 - ...structfplot__core_1_1windows__terminal.png | Bin 979 -> 0 bytes ...tfplot__core_1_1wxt__terminal-members.html | 132 - .../structfplot__core_1_1wxt__terminal.html | 272 - .../structfplot__core_1_1wxt__terminal.js | 5 - .../structfplot__core_1_1wxt__terminal.png | Bin 908 -> 0 bytes .../structfplot__core_1_1x__axis-members.html | 139 - docs/html/structfplot__core_1_1x__axis.html | 282 - docs/html/structfplot__core_1_1x__axis.js | 5 - docs/html/structfplot__core_1_1x__axis.png | Bin 849 -> 0 bytes ...structfplot__core_1_1y2__axis-members.html | 139 - docs/html/structfplot__core_1_1y2__axis.html | 282 - docs/html/structfplot__core_1_1y2__axis.js | 5 - docs/html/structfplot__core_1_1y2__axis.png | Bin 857 -> 0 bytes .../structfplot__core_1_1y__axis-members.html | 139 - docs/html/structfplot__core_1_1y__axis.html | 282 - docs/html/structfplot__core_1_1y__axis.js | 5 - docs/html/structfplot__core_1_1y__axis.png | Bin 853 -> 0 bytes .../structfplot__core_1_1z__axis-members.html | 139 - docs/html/structfplot__core_1_1z__axis.html | 282 - docs/html/structfplot__core_1_1z__axis.js | 5 - docs/html/structfplot__core_1_1z__axis.png | Bin 851 -> 0 bytes ...g__builder_1_1string__builder-members.html | 115 - ...t__string__builder_1_1string__builder.html | 325 - ...lot__string__builder_1_1string__builder.js | 8 - docs/html/structhalfedge__s-members.html | 113 - docs/html/structhalfedge__s.html | 134 - docs/html/structhalfedge__s.js | 8 - docs/html/structpoint2d__s-members.html | 112 - docs/html/structpoint2d__s.html | 131 - docs/html/structpoint2d__s.js | 7 - docs/html/structworking__set__s-members.html | 116 - docs/html/structworking__set__s.html | 143 - docs/html/structworking__set__s.js | 11 - docs/html/surface_example_w_cb_label.png | Bin 84411 -> 0 bytes docs/html/surface_plot_hidden_lines_1.png | Bin 159875 -> 0 bytes docs/html/sync_off.png | Bin 853 -> 0 bytes docs/html/sync_on.png | Bin 845 -> 0 bytes docs/html/tab_a.png | Bin 142 -> 0 bytes docs/html/tab_ad.png | Bin 135 -> 0 bytes docs/html/tab_b.png | Bin 169 -> 0 bytes docs/html/tab_bd.png | Bin 173 -> 0 bytes docs/html/tab_h.png | Bin 177 -> 0 bytes docs/html/tab_hd.png | Bin 180 -> 0 bytes docs/html/tab_s.png | Bin 184 -> 0 bytes docs/html/tab_sd.png | Bin 188 -> 0 bytes docs/html/tabs.css | 1 - docs/html/tripack_8f_source.html | 6112 ----------------- .../typefplot__core_1_1color-members.html | 133 - .../typefplot__core_1_1colormap-members.html | 130 - ...fplot__core_1_1cool__colormap-members.html | 130 - ...efplot__core_1_1hot__colormap-members.html | 130 - ...plot__core_1_1latex__terminal-members.html | 146 - .../typefplot__core_1_1legend-members.html | 144 - .../html/typefplot__core_1_1plot-members.html | 169 - .../typefplot__core_1_1plot__2d-members.html | 170 - .../typefplot__core_1_1plot__3d-members.html | 176 - ...typefplot__core_1_1plot__axis-members.html | 150 - ...typefplot__core_1_1plot__data-members.html | 133 - ...fplot__core_1_1plot__data__2d-members.html | 163 - ...fplot__core_1_1plot__data__3d-members.html | 160 - ...ypefplot__core_1_1plot__label-members.html | 141 - ...pefplot__core_1_1plot__object-members.html | 129 - ...efplot__core_1_1png__terminal-members.html | 146 - ...pefplot__core_1_1qt__terminal-members.html | 143 - ...ot__core_1_1rainbow__colormap-members.html | 130 - ...__core_1_1scatter__plot__data-members.html | 165 - ...efplot__core_1_1surface__plot-members.html | 194 - ...__core_1_1surface__plot__data-members.html | 146 - .../typefplot__core_1_1terminal-members.html | 149 - ...ot__core_1_1windows__terminal-members.html | 143 - ...efplot__core_1_1wxt__terminal-members.html | 143 - .../typefplot__core_1_1x__axis-members.html | 144 - .../typefplot__core_1_1y2__axis-members.html | 144 - .../typefplot__core_1_1y__axis-members.html | 144 - .../typefplot__core_1_1z__axis-members.html | 144 - docs/html/vector_plot_1.png | Bin 92789 -> 0 bytes docs/html/vector_plot_2.png | Bin 119005 -> 0 bytes 846 files changed, 148601 insertions(+), 95996 deletions(-) create mode 100644 doc/css/bootstrap.css create mode 100644 doc/css/bootstrap.min.css create mode 100644 doc/css/font-awesome.css create mode 100644 doc/css/font-awesome.min.css create mode 100644 doc/css/local.css create mode 100644 doc/css/pygments.css create mode 100644 doc/favicon.png create mode 100644 doc/fonts/FontAwesome.otf create mode 100644 doc/fonts/fontawesome-webfont.eot create mode 100644 doc/fonts/fontawesome-webfont.svg create mode 100644 doc/fonts/fontawesome-webfont.ttf create mode 100644 doc/fonts/fontawesome-webfont.woff create mode 100644 doc/fonts/glyphicons-halflings-regular.eot create mode 100644 doc/fonts/glyphicons-halflings-regular.svg create mode 100644 doc/fonts/glyphicons-halflings-regular.ttf create mode 100644 doc/fonts/glyphicons-halflings-regular.woff create mode 100644 doc/index.html create mode 100644 doc/interface/cm_get_string_result.html create mode 100644 doc/interface/get_string_result.html create mode 100644 doc/interface/operator(==).html create mode 100644 doc/interface/operator(SLASH=).html create mode 100644 doc/interface/pa_get_string_result.html create mode 100644 doc/interface/pd_get_string_result.html create mode 100644 doc/interface/simplify_polyline.html create mode 100644 doc/interface/spd_get_int_value.html create mode 100644 doc/interface/spd_get_string_result.html create mode 100644 doc/interface/spd_get_value.html create mode 100644 doc/interface/spd_set_value.html create mode 100644 doc/interface/term_get_string_result.html create mode 100644 doc/js/MathJax-config/.gitignore create mode 100644 doc/js/bootstrap.js create mode 100644 doc/js/bootstrap.min.js create mode 100644 doc/js/ie10-viewport-bug-workaround.js create mode 100644 doc/js/jquery-2.1.3.min.js create mode 100644 doc/js/svg-pan-zoom.min.js create mode 100644 doc/lists/files.html create mode 100644 doc/lists/modules.html create mode 100644 doc/lists/procedures.html create mode 100644 doc/lists/types.html create mode 100644 doc/module/fplot_arrow.html create mode 100644 doc/module/fplot_colormap.html create mode 100644 doc/module/fplot_colors.html create mode 100644 doc/module/fplot_constants.html create mode 100644 doc/module/fplot_core.html create mode 100644 doc/module/fplot_core_routines.html create mode 100644 doc/module/fplot_delaunay_tri_surface.html create mode 100644 doc/module/fplot_errors.html create mode 100644 doc/module/fplot_filled_plot_data.html create mode 100644 doc/module/fplot_label.html create mode 100644 doc/module/fplot_latex_terminal.html create mode 100644 doc/module/fplot_legend.html create mode 100644 doc/module/fplot_multiplot.html create mode 100644 doc/module/fplot_plot.html create mode 100644 doc/module/fplot_plot_2d.html create mode 100644 doc/module/fplot_plot_3d.html create mode 100644 doc/module/fplot_plot_axis.html create mode 100644 doc/module/fplot_plot_bar.html create mode 100644 doc/module/fplot_plot_data.html create mode 100644 doc/module/fplot_plot_data_2d.html create mode 100644 doc/module/fplot_plot_data_3d.html create mode 100644 doc/module/fplot_plot_data_bar.html create mode 100644 doc/module/fplot_plot_data_error_bars.html create mode 100644 doc/module/fplot_plot_data_histogram.html create mode 100644 doc/module/fplot_plot_data_tri_2d.html create mode 100644 doc/module/fplot_plot_object.html create mode 100644 doc/module/fplot_plot_polar.html create mode 100644 doc/module/fplot_png_terminal.html create mode 100644 doc/module/fplot_qt_terminal.html create mode 100644 doc/module/fplot_simplify.html create mode 100644 doc/module/fplot_surface_plot.html create mode 100644 doc/module/fplot_surface_plot_data.html create mode 100644 doc/module/fplot_terminal.html create mode 100644 doc/module/fplot_tri_surface_plot_data.html create mode 100644 doc/module/fplot_triangulations_delaunay_2d.html create mode 100644 doc/module/fplot_vector_field_plot_data.html create mode 100644 doc/module/fplot_windows_terminal.html create mode 100644 doc/module/fplot_wxt_terminal.html create mode 100644 doc/proc/linspace.html create mode 100644 doc/proc/logspace.html create mode 100644 doc/proc/meshgrid.html create mode 100644 doc/proc/report_array_size_mismatch_error.html create mode 100644 doc/proc/report_file_create_error.html create mode 100644 doc/proc/report_matrix_size_mismatch_error.html create mode 100644 doc/proc/report_memory_error.html create mode 100644 doc/search.html create mode 100644 doc/sourcefile/fplot_arrow.f90.html create mode 100644 doc/sourcefile/fplot_colormap.f90.html create mode 100644 doc/sourcefile/fplot_colors.f90.html create mode 100644 doc/sourcefile/fplot_constants.f90.html create mode 100644 doc/sourcefile/fplot_core.f90.html create mode 100644 doc/sourcefile/fplot_core_routines.f90.html create mode 100644 doc/sourcefile/fplot_delaunay_tri_surface.f90.html create mode 100644 doc/sourcefile/fplot_errors.f90.html create mode 100644 doc/sourcefile/fplot_filled_plot_data.f90.html create mode 100644 doc/sourcefile/fplot_label.f90.html create mode 100644 doc/sourcefile/fplot_latex_terminal.f90.html create mode 100644 doc/sourcefile/fplot_legend.f90.html create mode 100644 doc/sourcefile/fplot_multiplot.f90.html create mode 100644 doc/sourcefile/fplot_plot.f90.html create mode 100644 doc/sourcefile/fplot_plot_2d.f90.html create mode 100644 doc/sourcefile/fplot_plot_3d.f90.html create mode 100644 doc/sourcefile/fplot_plot_axis.f90.html create mode 100644 doc/sourcefile/fplot_plot_bar.f90.html create mode 100644 doc/sourcefile/fplot_plot_data.f90.html create mode 100644 doc/sourcefile/fplot_plot_data_2d.f90.html create mode 100644 doc/sourcefile/fplot_plot_data_3d.f90.html create mode 100644 doc/sourcefile/fplot_plot_data_bar.f90.html create mode 100644 doc/sourcefile/fplot_plot_data_error_bars.f90.html create mode 100644 doc/sourcefile/fplot_plot_data_histogram.f90.html create mode 100644 doc/sourcefile/fplot_plot_data_tri_2d.f90.html create mode 100644 doc/sourcefile/fplot_plot_object.f90.html create mode 100644 doc/sourcefile/fplot_plot_polar.f90.html create mode 100644 doc/sourcefile/fplot_png_terminal.f90.html create mode 100644 doc/sourcefile/fplot_qt_terminal.f90.html create mode 100644 doc/sourcefile/fplot_simplify.f90.html create mode 100644 doc/sourcefile/fplot_surface_plot.f90.html create mode 100644 doc/sourcefile/fplot_surface_plot_data.f90.html create mode 100644 doc/sourcefile/fplot_terminal.f90.html create mode 100644 doc/sourcefile/fplot_tri_surface_plot_data.f90.html create mode 100644 doc/sourcefile/fplot_triangulations_delaunay_2d.f90.html create mode 100644 doc/sourcefile/fplot_vector_field_plot_data.f90.html create mode 100644 doc/sourcefile/fplot_windows_terminal.f90.html create mode 100644 doc/sourcefile/fplot_wxt_terminal.f90.html create mode 100644 doc/src/fplot_arrow.f90 create mode 100644 doc/src/fplot_colormap.f90 create mode 100644 doc/src/fplot_colors.f90 create mode 100644 doc/src/fplot_constants.f90 create mode 100644 doc/src/fplot_core.f90 create mode 100644 doc/src/fplot_core_routines.f90 create mode 100644 doc/src/fplot_delaunay_tri_surface.f90 create mode 100644 doc/src/fplot_errors.f90 create mode 100644 doc/src/fplot_filled_plot_data.f90 create mode 100644 doc/src/fplot_label.f90 create mode 100644 doc/src/fplot_latex_terminal.f90 create mode 100644 doc/src/fplot_legend.f90 create mode 100644 doc/src/fplot_multiplot.f90 create mode 100644 doc/src/fplot_plot.f90 create mode 100644 doc/src/fplot_plot_2d.f90 create mode 100644 doc/src/fplot_plot_3d.f90 create mode 100644 doc/src/fplot_plot_axis.f90 create mode 100644 doc/src/fplot_plot_bar.f90 create mode 100644 doc/src/fplot_plot_data.f90 create mode 100644 doc/src/fplot_plot_data_2d.f90 create mode 100644 doc/src/fplot_plot_data_3d.f90 create mode 100644 doc/src/fplot_plot_data_bar.f90 create mode 100644 doc/src/fplot_plot_data_error_bars.f90 create mode 100644 doc/src/fplot_plot_data_histogram.f90 create mode 100644 doc/src/fplot_plot_data_tri_2d.f90 create mode 100644 doc/src/fplot_plot_object.f90 create mode 100644 doc/src/fplot_plot_polar.f90 create mode 100644 doc/src/fplot_png_terminal.f90 create mode 100644 doc/src/fplot_qt_terminal.f90 create mode 100644 doc/src/fplot_simplify.f90 create mode 100644 doc/src/fplot_surface_plot.f90 create mode 100644 doc/src/fplot_surface_plot_data.f90 create mode 100644 doc/src/fplot_terminal.f90 create mode 100644 doc/src/fplot_tri_surface_plot_data.f90 create mode 100644 doc/src/fplot_triangulations_delaunay_2d.f90 create mode 100644 doc/src/fplot_vector_field_plot_data.f90 create mode 100644 doc/src/fplot_windows_terminal.f90 create mode 100644 doc/src/fplot_wxt_terminal.f90 create mode 100644 doc/tipuesearch/.DS_Store create mode 100644 doc/tipuesearch/img/.DS_Store create mode 100644 doc/tipuesearch/img/loader.gif create mode 100644 doc/tipuesearch/img/search.png create mode 100644 doc/tipuesearch/tipuesearch.css create mode 100644 doc/tipuesearch/tipuesearch.js create mode 100644 doc/tipuesearch/tipuesearch.min.js create mode 100644 doc/tipuesearch/tipuesearch_content.js create mode 100644 doc/tipuesearch/tipuesearch_set.js create mode 100644 doc/type/color.html create mode 100644 doc/type/colormap.html create mode 100644 doc/type/cool_colormap.html create mode 100644 doc/type/custom_colormap.html create mode 100644 doc/type/delaunay_tri_2d.html create mode 100644 doc/type/delaunay_tri_surface.html create mode 100644 doc/type/earth_colormap.html create mode 100644 doc/type/filled_plot_data.html create mode 100644 doc/type/grey_colormap.html create mode 100644 doc/type/hot_colormap.html create mode 100644 doc/type/latex_terminal.html create mode 100644 doc/type/legend.html create mode 100644 doc/type/multiplot.html create mode 100644 doc/type/parula_colormap.html create mode 100644 doc/type/plot.html create mode 100644 doc/type/plot_2d.html create mode 100644 doc/type/plot_3d.html create mode 100644 doc/type/plot_arrow.html create mode 100644 doc/type/plot_axis.html create mode 100644 doc/type/plot_bar.html create mode 100644 doc/type/plot_data.html create mode 100644 doc/type/plot_data_2d.html create mode 100644 doc/type/plot_data_3d.html create mode 100644 doc/type/plot_data_bar.html create mode 100644 doc/type/plot_data_colored.html create mode 100644 doc/type/plot_data_error_bars.html create mode 100644 doc/type/plot_data_histogram.html create mode 100644 doc/type/plot_data_tri_2d.html create mode 100644 doc/type/plot_label.html create mode 100644 doc/type/plot_object.html create mode 100644 doc/type/plot_polar.html create mode 100644 doc/type/png_terminal.html create mode 100644 doc/type/qt_terminal.html create mode 100644 doc/type/rainbow_colormap.html create mode 100644 doc/type/scatter_plot_data.html create mode 100644 doc/type/surface_plot.html create mode 100644 doc/type/surface_plot_data.html create mode 100644 doc/type/terminal.html create mode 100644 doc/type/tri_surface_plot_data.html create mode 100644 doc/type/vector_field_plot_data.html create mode 100644 doc/type/windows_terminal.html create mode 100644 doc/type/wxt_terminal.html create mode 100644 doc/type/x_axis.html create mode 100644 doc/type/y2_axis.html create mode 100644 doc/type/y_axis.html create mode 100644 doc/type/z_axis.html create mode 100644 docs.md delete mode 100644 docs/Doxyfile delete mode 100644 docs/Doxyfile.bak delete mode 100644 docs/html/annotated.html delete mode 100644 docs/html/annotated_dup.js delete mode 100644 docs/html/arrowdown.png delete mode 100644 docs/html/arrowright.png delete mode 100644 docs/html/bc_s.png delete mode 100644 docs/html/bc_sd.png delete mode 100644 docs/html/bdwn.png delete mode 100644 docs/html/classes.html delete mode 100644 docs/html/clipboard.js delete mode 100644 docs/html/closed.png delete mode 100644 docs/html/cookie.js delete mode 100644 docs/html/default_2d_example.png delete mode 100644 docs/html/delaunay_8c_source.html delete mode 100644 docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html delete mode 100644 docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js delete mode 100644 docs/html/doc.png delete mode 100644 docs/html/doc.svg delete mode 100644 docs/html/docd.png delete mode 100644 docs/html/docd.svg delete mode 100644 docs/html/doxygen.css delete mode 100644 docs/html/doxygen.png delete mode 100644 docs/html/doxygen.svg delete mode 100644 docs/html/doxygen_crawl.html delete mode 100644 docs/html/dynsections.js delete mode 100644 docs/html/example_data_depend_color_2d.png delete mode 100644 docs/html/example_data_depend_color_3d.png delete mode 100644 docs/html/example_delaunay_2d_1.png delete mode 100644 docs/html/example_delaunay_2d_2a.png delete mode 100644 docs/html/example_delaunay_2d_2b.png delete mode 100644 docs/html/example_label_plot.png delete mode 100644 docs/html/example_multiplot_1.png delete mode 100644 docs/html/example_multiplot_2.png delete mode 100644 docs/html/example_multiplot_log_scaled.png delete mode 100644 docs/html/example_plot.png delete mode 100644 docs/html/example_plot_2d_1.png delete mode 100644 docs/html/example_plot_2d_2.png delete mode 100644 docs/html/example_plot_2d_3.png delete mode 100644 docs/html/example_plot_3d_1.png delete mode 100644 docs/html/example_plot_3d_offset_1.png delete mode 100644 docs/html/example_plot_from_file.png delete mode 100644 docs/html/example_plot_legend_out.png delete mode 100644 docs/html/example_plot_with_label_1.png delete mode 100644 docs/html/example_plot_y2_axis_1.png delete mode 100644 docs/html/example_surface_plot.png delete mode 100644 docs/html/example_surface_plot_2.png delete mode 100644 docs/html/example_surface_plot_cool.png delete mode 100644 docs/html/example_surface_plot_default.png delete mode 100644 docs/html/example_surface_plot_earth.png delete mode 100644 docs/html/example_surface_plot_grey.png delete mode 100644 docs/html/example_surface_plot_horizontal.png delete mode 100644 docs/html/example_surface_plot_hot.png delete mode 100644 docs/html/example_surface_plot_lighting_1.png delete mode 100644 docs/html/example_surface_plot_lighting_2.png delete mode 100644 docs/html/example_surface_plot_no_border.png delete mode 100644 docs/html/example_surface_plot_no_tics.png delete mode 100644 docs/html/example_surface_plot_parula.png delete mode 100644 docs/html/example_surface_plot_with_contour_1.png delete mode 100644 docs/html/example_tri_surf_1.png delete mode 100644 docs/html/example_wireframe_surface_plot.png delete mode 100644 docs/html/example_x_errorbars_1.png delete mode 100644 docs/html/example_xy_errorbars_1.png delete mode 100644 docs/html/example_xy_errorbox_1.png delete mode 100644 docs/html/example_y_errorbars_1.png delete mode 100644 docs/html/files.html delete mode 100644 docs/html/files.js delete mode 100644 docs/html/files_dup.js delete mode 100644 docs/html/filled_example_1.png delete mode 100644 docs/html/filled_example_2.png delete mode 100644 docs/html/folderclosed.png delete mode 100644 docs/html/folderclosed.svg delete mode 100644 docs/html/folderclosedd.svg delete mode 100644 docs/html/folderopen.png delete mode 100644 docs/html/folderopen.svg delete mode 100644 docs/html/folderopend.svg delete mode 100644 docs/html/fplot__arrow_8f90_source.html delete mode 100644 docs/html/fplot__axis_8f90_source.html delete mode 100644 docs/html/fplot__colormap_8f90_source.html delete mode 100644 docs/html/fplot__colors_8f90_source.html delete mode 100644 docs/html/fplot__core_8f90_source.html delete mode 100644 docs/html/fplot__core__routines_8f90_source.html delete mode 100644 docs/html/fplot__delaunay_8f90_source.html delete mode 100644 docs/html/fplot__delaunay__tri__surface_8f90_source.html delete mode 100644 docs/html/fplot__errors_8f90_source.html delete mode 100644 docs/html/fplot__filled__plot__data_8f90_source.html delete mode 100644 docs/html/fplot__label_8f90_source.html delete mode 100644 docs/html/fplot__latex__terminal_8f90_source.html delete mode 100644 docs/html/fplot__legend_8f90_source.html delete mode 100644 docs/html/fplot__multiplot_8f90_source.html delete mode 100644 docs/html/fplot__plot_8f90_source.html delete mode 100644 docs/html/fplot__plot__2d_8f90_source.html delete mode 100644 docs/html/fplot__plot__3d_8f90_source.html delete mode 100644 docs/html/fplot__plot__axis_8f90_source.html delete mode 100644 docs/html/fplot__plot__bar_8f90_source.html delete mode 100644 docs/html/fplot__plot__data_8f90_source.html delete mode 100644 docs/html/fplot__plot__data__2d_8f90_source.html delete mode 100644 docs/html/fplot__plot__data__3d_8f90_source.html delete mode 100644 docs/html/fplot__plot__data__bar_8f90_source.html delete mode 100644 docs/html/fplot__plot__data__colored_8f90_source.html delete mode 100644 docs/html/fplot__plot__data__error__bars_8f90_source.html delete mode 100644 docs/html/fplot__plot__data__histogram_8f90_source.html delete mode 100644 docs/html/fplot__plot__data__tri__2d_8f90_source.html delete mode 100644 docs/html/fplot__plot__polar_8f90_source.html delete mode 100644 docs/html/fplot__png__terminal_8f90_source.html delete mode 100644 docs/html/fplot__qt__terminal_8f90_source.html delete mode 100644 docs/html/fplot__scatter__plot__data_8f90_source.html delete mode 100644 docs/html/fplot__simplify_8f90_source.html delete mode 100644 docs/html/fplot__string__builder_8f90_source.html delete mode 100644 docs/html/fplot__string__builder__implementation_8f90_source.html delete mode 100644 docs/html/fplot__surface__plot_8f90_source.html delete mode 100644 docs/html/fplot__surface__plot__data_8f90_source.html delete mode 100644 docs/html/fplot__terminal_8f90_source.html delete mode 100644 docs/html/fplot__tri__surface__plot__data_8f90_source.html delete mode 100644 docs/html/fplot__triangulations__delaunay__2d_8f90_source.html delete mode 100644 docs/html/fplot__vector__field__plot__data_8f90_source.html delete mode 100644 docs/html/fplot__windows__terminal_8f90_source.html delete mode 100644 docs/html/fplot__wxt__terminal_8f90_source.html delete mode 100644 docs/html/functions.html delete mode 100644 docs/html/functions_b.html delete mode 100644 docs/html/functions_c.html delete mode 100644 docs/html/functions_d.html delete mode 100644 docs/html/functions_dup.js delete mode 100644 docs/html/functions_e.html delete mode 100644 docs/html/functions_f.html delete mode 100644 docs/html/functions_func.html delete mode 100644 docs/html/functions_func.js delete mode 100644 docs/html/functions_func_c.html delete mode 100644 docs/html/functions_func_d.html delete mode 100644 docs/html/functions_func_e.html delete mode 100644 docs/html/functions_func_f.html delete mode 100644 docs/html/functions_func_g.html delete mode 100644 docs/html/functions_func_i.html delete mode 100644 docs/html/functions_func_p.html delete mode 100644 docs/html/functions_func_s.html delete mode 100644 docs/html/functions_func_t.html delete mode 100644 docs/html/functions_g.html delete mode 100644 docs/html/functions_i.html delete mode 100644 docs/html/functions_m.html delete mode 100644 docs/html/functions_p.html delete mode 100644 docs/html/functions_r.html delete mode 100644 docs/html/functions_s.html delete mode 100644 docs/html/functions_t.html delete mode 100644 docs/html/functions_vars.html delete mode 100644 docs/html/geompack_8f_source.html delete mode 100644 docs/html/hierarchy.html delete mode 100644 docs/html/hierarchy.js delete mode 100644 docs/html/histogram_example_1.png delete mode 100644 docs/html/index.html delete mode 100644 docs/html/interfacefplot__core_1_1assignment_07_0a_08-members.html delete mode 100644 docs/html/interfacefplot__core_1_1assignment_07_0a_08.html delete mode 100644 docs/html/interfacefplot__core_1_1cm__get__string__result-members.html delete mode 100644 docs/html/interfacefplot__core_1_1cm__get__string__result.html delete mode 100644 docs/html/interfacefplot__core_1_1cm__get__string__result.js delete mode 100644 docs/html/interfacefplot__core_1_1get__string__result-members.html delete mode 100644 docs/html/interfacefplot__core_1_1get__string__result.html delete mode 100644 docs/html/interfacefplot__core_1_1get__string__result.js delete mode 100644 docs/html/interfacefplot__core_1_1operator_07_0a_0a_08-members.html delete mode 100644 docs/html/interfacefplot__core_1_1operator_07_0a_0a_08.html delete mode 100644 docs/html/interfacefplot__core_1_1operator_07_2_0a_08-members.html delete mode 100644 docs/html/interfacefplot__core_1_1operator_07_2_0a_08.html delete mode 100644 docs/html/interfacefplot__core_1_1pa__get__string__result-members.html delete mode 100644 docs/html/interfacefplot__core_1_1pa__get__string__result.html delete mode 100644 docs/html/interfacefplot__core_1_1pa__get__string__result.js delete mode 100644 docs/html/interfacefplot__core_1_1pd__get__string__result-members.html delete mode 100644 docs/html/interfacefplot__core_1_1pd__get__string__result.html delete mode 100644 docs/html/interfacefplot__core_1_1pd__get__string__result.js delete mode 100644 docs/html/interfacefplot__core_1_1simplify__polyline-members.html delete mode 100644 docs/html/interfacefplot__core_1_1simplify__polyline.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__int__value-members.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__int__value.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__int__value.js delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__string__result-members.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__string__result.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__string__result.js delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__value-members.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__value.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__get__value.js delete mode 100644 docs/html/interfacefplot__core_1_1spd__set__value-members.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__set__value.html delete mode 100644 docs/html/interfacefplot__core_1_1spd__set__value.js delete mode 100644 docs/html/interfacefplot__core_1_1term__get__string__result-members.html delete mode 100644 docs/html/interfacefplot__core_1_1term__get__string__result.html delete mode 100644 docs/html/interfacefplot__core_1_1term__get__string__result.js delete mode 100644 docs/html/interfacefplot__simplify_1_1simplify__polyline-members.html delete mode 100644 docs/html/interfacefplot__simplify_1_1simplify__polyline.html delete mode 100644 docs/html/interfacefplot__simplify_1_1simplify__polyline.js delete mode 100644 docs/html/interfacefplot__string__builder_1_1to__string-members.html delete mode 100644 docs/html/interfacefplot__string__builder_1_1to__string.html delete mode 100644 docs/html/jquery.js delete mode 100644 docs/html/menu.js delete mode 100644 docs/html/menudata.js delete mode 100644 docs/html/minus.svg delete mode 100644 docs/html/minusd.svg delete mode 100644 docs/html/namespacefplot__core.html delete mode 100644 docs/html/namespacefplot__core.js delete mode 100644 docs/html/namespacefplot__errors.html delete mode 100644 docs/html/namespacefplot__string__builder.html delete mode 100644 docs/html/namespacefplot__string__builder.js delete mode 100644 docs/html/namespacemembers.html delete mode 100644 docs/html/namespacemembers_dup.js delete mode 100644 docs/html/namespacemembers_func.html delete mode 100644 docs/html/namespacemembers_g.html delete mode 100644 docs/html/namespacemembers_h.html delete mode 100644 docs/html/namespacemembers_l.html delete mode 100644 docs/html/namespacemembers_m.html delete mode 100644 docs/html/namespacemembers_p.html delete mode 100644 docs/html/namespacemembers_q.html delete mode 100644 docs/html/namespacemembers_r.html delete mode 100644 docs/html/namespacemembers_s.html delete mode 100644 docs/html/namespacemembers_vars.html delete mode 100644 docs/html/namespacemembers_w.html delete mode 100644 docs/html/namespacemembers_x.html delete mode 100644 docs/html/namespacemembers_y.html delete mode 100644 docs/html/namespacemembers_z.html delete mode 100644 docs/html/namespaces.html delete mode 100644 docs/html/namespaces.js delete mode 100644 docs/html/namespaces_dup.js delete mode 100644 docs/html/nav_f.png delete mode 100644 docs/html/nav_fd.png delete mode 100644 docs/html/nav_g.png delete mode 100644 docs/html/nav_h.png delete mode 100644 docs/html/nav_hd.png delete mode 100644 docs/html/navtree.css delete mode 100644 docs/html/navtree.js delete mode 100644 docs/html/navtreedata.js delete mode 100644 docs/html/navtreeindex0.js delete mode 100644 docs/html/navtreeindex1.js delete mode 100644 docs/html/navtreeindex2.js delete mode 100644 docs/html/navtreeindex3.js delete mode 100644 docs/html/navtreeindex4.js delete mode 100644 docs/html/navtreeindex5.js delete mode 100644 docs/html/open.png delete mode 100644 docs/html/plus.svg delete mode 100644 docs/html/plusd.svg delete mode 100644 docs/html/polar_example_1.png delete mode 100644 docs/html/polar_example_2.png delete mode 100644 docs/html/resize.js delete mode 100644 docs/html/search/all_0.html delete mode 100644 docs/html/search/all_0.js delete mode 100644 docs/html/search/all_1.html delete mode 100644 docs/html/search/all_1.js delete mode 100644 docs/html/search/all_10.html delete mode 100644 docs/html/search/all_10.js delete mode 100644 docs/html/search/all_11.html delete mode 100644 docs/html/search/all_11.js delete mode 100644 docs/html/search/all_12.html delete mode 100644 docs/html/search/all_12.js delete mode 100644 docs/html/search/all_13.html delete mode 100644 docs/html/search/all_13.js delete mode 100644 docs/html/search/all_14.js delete mode 100644 docs/html/search/all_15.js delete mode 100644 docs/html/search/all_2.html delete mode 100644 docs/html/search/all_2.js delete mode 100644 docs/html/search/all_3.html delete mode 100644 docs/html/search/all_3.js delete mode 100644 docs/html/search/all_4.html delete mode 100644 docs/html/search/all_4.js delete mode 100644 docs/html/search/all_5.html delete mode 100644 docs/html/search/all_5.js delete mode 100644 docs/html/search/all_6.html delete mode 100644 docs/html/search/all_6.js delete mode 100644 docs/html/search/all_7.html delete mode 100644 docs/html/search/all_7.js delete mode 100644 docs/html/search/all_8.html delete mode 100644 docs/html/search/all_8.js delete mode 100644 docs/html/search/all_9.html delete mode 100644 docs/html/search/all_9.js delete mode 100644 docs/html/search/all_a.html delete mode 100644 docs/html/search/all_a.js delete mode 100644 docs/html/search/all_b.html delete mode 100644 docs/html/search/all_b.js delete mode 100644 docs/html/search/all_c.html delete mode 100644 docs/html/search/all_c.js delete mode 100644 docs/html/search/all_d.html delete mode 100644 docs/html/search/all_d.js delete mode 100644 docs/html/search/all_e.html delete mode 100644 docs/html/search/all_e.js delete mode 100644 docs/html/search/all_f.html delete mode 100644 docs/html/search/all_f.js delete mode 100644 docs/html/search/classes_0.html delete mode 100644 docs/html/search/classes_0.js delete mode 100644 docs/html/search/classes_1.html delete mode 100644 docs/html/search/classes_1.js delete mode 100644 docs/html/search/classes_10.html delete mode 100644 docs/html/search/classes_10.js delete mode 100644 docs/html/search/classes_11.html delete mode 100644 docs/html/search/classes_11.js delete mode 100644 docs/html/search/classes_12.js delete mode 100644 docs/html/search/classes_13.js delete mode 100644 docs/html/search/classes_2.html delete mode 100644 docs/html/search/classes_2.js delete mode 100644 docs/html/search/classes_3.html delete mode 100644 docs/html/search/classes_3.js delete mode 100644 docs/html/search/classes_4.html delete mode 100644 docs/html/search/classes_4.js delete mode 100644 docs/html/search/classes_5.html delete mode 100644 docs/html/search/classes_5.js delete mode 100644 docs/html/search/classes_6.html delete mode 100644 docs/html/search/classes_6.js delete mode 100644 docs/html/search/classes_7.html delete mode 100644 docs/html/search/classes_7.js delete mode 100644 docs/html/search/classes_8.html delete mode 100644 docs/html/search/classes_8.js delete mode 100644 docs/html/search/classes_9.html delete mode 100644 docs/html/search/classes_9.js delete mode 100644 docs/html/search/classes_a.html delete mode 100644 docs/html/search/classes_a.js delete mode 100644 docs/html/search/classes_b.html delete mode 100644 docs/html/search/classes_b.js delete mode 100644 docs/html/search/classes_c.html delete mode 100644 docs/html/search/classes_c.js delete mode 100644 docs/html/search/classes_d.html delete mode 100644 docs/html/search/classes_d.js delete mode 100644 docs/html/search/classes_e.html delete mode 100644 docs/html/search/classes_e.js delete mode 100644 docs/html/search/classes_f.html delete mode 100644 docs/html/search/classes_f.js delete mode 100644 docs/html/search/close.png delete mode 100644 docs/html/search/close.svg delete mode 100644 docs/html/search/functions_0.html delete mode 100644 docs/html/search/functions_0.js delete mode 100644 docs/html/search/functions_1.html delete mode 100644 docs/html/search/functions_1.js delete mode 100644 docs/html/search/functions_2.html delete mode 100644 docs/html/search/functions_2.js delete mode 100644 docs/html/search/functions_3.html delete mode 100644 docs/html/search/functions_3.js delete mode 100644 docs/html/search/functions_4.html delete mode 100644 docs/html/search/functions_4.js delete mode 100644 docs/html/search/functions_5.html delete mode 100644 docs/html/search/functions_5.js delete mode 100644 docs/html/search/functions_6.html delete mode 100644 docs/html/search/functions_6.js delete mode 100644 docs/html/search/functions_7.html delete mode 100644 docs/html/search/functions_7.js delete mode 100644 docs/html/search/functions_8.html delete mode 100644 docs/html/search/functions_8.js delete mode 100644 docs/html/search/functions_9.html delete mode 100644 docs/html/search/functions_9.js delete mode 100644 docs/html/search/functions_a.html delete mode 100644 docs/html/search/functions_a.js delete mode 100644 docs/html/search/functions_b.html delete mode 100644 docs/html/search/functions_b.js delete mode 100644 docs/html/search/functions_c.html delete mode 100644 docs/html/search/functions_c.js delete mode 100644 docs/html/search/functions_d.html delete mode 100644 docs/html/search/functions_d.js delete mode 100644 docs/html/search/functions_e.html delete mode 100644 docs/html/search/functions_e.js delete mode 100644 docs/html/search/functions_f.html delete mode 100644 docs/html/search/functions_f.js delete mode 100644 docs/html/search/mag.svg delete mode 100644 docs/html/search/mag_d.svg delete mode 100644 docs/html/search/mag_sel.png delete mode 100644 docs/html/search/mag_sel.svg delete mode 100644 docs/html/search/mag_seld.svg delete mode 100644 docs/html/search/namespaces_0.html delete mode 100644 docs/html/search/namespaces_0.js delete mode 100644 docs/html/search/nomatches.html delete mode 100644 docs/html/search/search.css delete mode 100644 docs/html/search/search.js delete mode 100644 docs/html/search/search_l.png delete mode 100644 docs/html/search/search_m.png delete mode 100644 docs/html/search/search_r.png delete mode 100644 docs/html/search/searchdata.js delete mode 100644 docs/html/search/variables_0.html delete mode 100644 docs/html/search/variables_0.js delete mode 100644 docs/html/search/variables_1.html delete mode 100644 docs/html/search/variables_1.js delete mode 100644 docs/html/search/variables_2.html delete mode 100644 docs/html/search/variables_2.js delete mode 100644 docs/html/search/variables_3.html delete mode 100644 docs/html/search/variables_3.js delete mode 100644 docs/html/search/variables_4.html delete mode 100644 docs/html/search/variables_4.js delete mode 100644 docs/html/search/variables_5.html delete mode 100644 docs/html/search/variables_5.js delete mode 100644 docs/html/search/variables_6.html delete mode 100644 docs/html/search/variables_6.js delete mode 100644 docs/html/search/variables_7.js delete mode 100644 docs/html/splitbar.png delete mode 100644 docs/html/splitbard.png delete mode 100644 docs/html/square_2d_example.png delete mode 100644 docs/html/structdelaunay__s-members.html delete mode 100644 docs/html/structdelaunay__s.html delete mode 100644 docs/html/structdelaunay__s.js delete mode 100644 docs/html/structface__s-members.html delete mode 100644 docs/html/structface__s.html delete mode 100644 docs/html/structface__s.js delete mode 100644 docs/html/structfplot__core_1_1color-members.html delete mode 100644 docs/html/structfplot__core_1_1color.html delete mode 100644 docs/html/structfplot__core_1_1color.js delete mode 100644 docs/html/structfplot__core_1_1colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1colormap.html delete mode 100644 docs/html/structfplot__core_1_1colormap.js delete mode 100644 docs/html/structfplot__core_1_1colormap.png delete mode 100644 docs/html/structfplot__core_1_1cool__colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1cool__colormap.html delete mode 100644 docs/html/structfplot__core_1_1cool__colormap.js delete mode 100644 docs/html/structfplot__core_1_1cool__colormap.png delete mode 100644 docs/html/structfplot__core_1_1custom__colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1custom__colormap.html delete mode 100644 docs/html/structfplot__core_1_1custom__colormap.js delete mode 100644 docs/html/structfplot__core_1_1custom__colormap.png delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__2d-members.html delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__2d.html delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__2d.js delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__2d.png delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__surface-members.html delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__surface.html delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__surface.js delete mode 100644 docs/html/structfplot__core_1_1delaunay__tri__surface.png delete mode 100644 docs/html/structfplot__core_1_1earth__colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1earth__colormap.html delete mode 100644 docs/html/structfplot__core_1_1earth__colormap.js delete mode 100644 docs/html/structfplot__core_1_1earth__colormap.png delete mode 100644 docs/html/structfplot__core_1_1filled__plot__data-members.html delete mode 100644 docs/html/structfplot__core_1_1filled__plot__data.html delete mode 100644 docs/html/structfplot__core_1_1filled__plot__data.js delete mode 100644 docs/html/structfplot__core_1_1filled__plot__data.png delete mode 100644 docs/html/structfplot__core_1_1grey__colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1grey__colormap.html delete mode 100644 docs/html/structfplot__core_1_1grey__colormap.js delete mode 100644 docs/html/structfplot__core_1_1grey__colormap.png delete mode 100644 docs/html/structfplot__core_1_1hot__colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1hot__colormap.html delete mode 100644 docs/html/structfplot__core_1_1hot__colormap.js delete mode 100644 docs/html/structfplot__core_1_1hot__colormap.png delete mode 100644 docs/html/structfplot__core_1_1latex__terminal-members.html delete mode 100644 docs/html/structfplot__core_1_1latex__terminal.html delete mode 100644 docs/html/structfplot__core_1_1latex__terminal.js delete mode 100644 docs/html/structfplot__core_1_1latex__terminal.png delete mode 100644 docs/html/structfplot__core_1_1legend-members.html delete mode 100644 docs/html/structfplot__core_1_1legend.html delete mode 100644 docs/html/structfplot__core_1_1legend.js delete mode 100644 docs/html/structfplot__core_1_1legend.png delete mode 100644 docs/html/structfplot__core_1_1multiplot-members.html delete mode 100644 docs/html/structfplot__core_1_1multiplot.html delete mode 100644 docs/html/structfplot__core_1_1multiplot.js delete mode 100644 docs/html/structfplot__core_1_1multiplot.png delete mode 100644 docs/html/structfplot__core_1_1parula__colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1parula__colormap.html delete mode 100644 docs/html/structfplot__core_1_1parula__colormap.js delete mode 100644 docs/html/structfplot__core_1_1parula__colormap.png delete mode 100644 docs/html/structfplot__core_1_1plot-members.html delete mode 100644 docs/html/structfplot__core_1_1plot.html delete mode 100644 docs/html/structfplot__core_1_1plot.js delete mode 100644 docs/html/structfplot__core_1_1plot.png delete mode 100644 docs/html/structfplot__core_1_1plot__2d-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__2d.html delete mode 100644 docs/html/structfplot__core_1_1plot__2d.js delete mode 100644 docs/html/structfplot__core_1_1plot__2d.png delete mode 100644 docs/html/structfplot__core_1_1plot__3d-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__3d.html delete mode 100644 docs/html/structfplot__core_1_1plot__3d.js delete mode 100644 docs/html/structfplot__core_1_1plot__3d.png delete mode 100644 docs/html/structfplot__core_1_1plot__arrow-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__arrow.html delete mode 100644 docs/html/structfplot__core_1_1plot__arrow.js delete mode 100644 docs/html/structfplot__core_1_1plot__arrow.png delete mode 100644 docs/html/structfplot__core_1_1plot__axis-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__axis.html delete mode 100644 docs/html/structfplot__core_1_1plot__axis.js delete mode 100644 docs/html/structfplot__core_1_1plot__axis.png delete mode 100644 docs/html/structfplot__core_1_1plot__bar-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__bar.html delete mode 100644 docs/html/structfplot__core_1_1plot__bar.js delete mode 100644 docs/html/structfplot__core_1_1plot__bar.png delete mode 100644 docs/html/structfplot__core_1_1plot__data-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data.html delete mode 100644 docs/html/structfplot__core_1_1plot__data.js delete mode 100644 docs/html/structfplot__core_1_1plot__data.png delete mode 100644 docs/html/structfplot__core_1_1plot__data__2d-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__2d.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__2d.js delete mode 100644 docs/html/structfplot__core_1_1plot__data__2d.png delete mode 100644 docs/html/structfplot__core_1_1plot__data__3d-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__3d.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__3d.js delete mode 100644 docs/html/structfplot__core_1_1plot__data__3d.png delete mode 100644 docs/html/structfplot__core_1_1plot__data__bar-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__bar.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__bar.js delete mode 100644 docs/html/structfplot__core_1_1plot__data__bar.png delete mode 100644 docs/html/structfplot__core_1_1plot__data__colored-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__colored.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__colored.js delete mode 100644 docs/html/structfplot__core_1_1plot__data__colored.png delete mode 100644 docs/html/structfplot__core_1_1plot__data__error__bars-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__error__bars.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__error__bars.js delete mode 100644 docs/html/structfplot__core_1_1plot__data__error__bars.png delete mode 100644 docs/html/structfplot__core_1_1plot__data__histogram-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__histogram.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__histogram.js delete mode 100644 docs/html/structfplot__core_1_1plot__data__histogram.png delete mode 100644 docs/html/structfplot__core_1_1plot__data__tri__2d-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__tri__2d.html delete mode 100644 docs/html/structfplot__core_1_1plot__data__tri__2d.js delete mode 100644 docs/html/structfplot__core_1_1plot__data__tri__2d.png delete mode 100644 docs/html/structfplot__core_1_1plot__label-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__label.html delete mode 100644 docs/html/structfplot__core_1_1plot__label.js delete mode 100644 docs/html/structfplot__core_1_1plot__label.png delete mode 100644 docs/html/structfplot__core_1_1plot__object-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__object.html delete mode 100644 docs/html/structfplot__core_1_1plot__object.js delete mode 100644 docs/html/structfplot__core_1_1plot__object.png delete mode 100644 docs/html/structfplot__core_1_1plot__polar-members.html delete mode 100644 docs/html/structfplot__core_1_1plot__polar.html delete mode 100644 docs/html/structfplot__core_1_1plot__polar.js delete mode 100644 docs/html/structfplot__core_1_1plot__polar.png delete mode 100644 docs/html/structfplot__core_1_1png__terminal-members.html delete mode 100644 docs/html/structfplot__core_1_1png__terminal.html delete mode 100644 docs/html/structfplot__core_1_1png__terminal.js delete mode 100644 docs/html/structfplot__core_1_1png__terminal.png delete mode 100644 docs/html/structfplot__core_1_1qt__terminal-members.html delete mode 100644 docs/html/structfplot__core_1_1qt__terminal.html delete mode 100644 docs/html/structfplot__core_1_1qt__terminal.js delete mode 100644 docs/html/structfplot__core_1_1qt__terminal.png delete mode 100644 docs/html/structfplot__core_1_1rainbow__colormap-members.html delete mode 100644 docs/html/structfplot__core_1_1rainbow__colormap.html delete mode 100644 docs/html/structfplot__core_1_1rainbow__colormap.js delete mode 100644 docs/html/structfplot__core_1_1rainbow__colormap.png delete mode 100644 docs/html/structfplot__core_1_1scatter__plot__data-members.html delete mode 100644 docs/html/structfplot__core_1_1scatter__plot__data.html delete mode 100644 docs/html/structfplot__core_1_1scatter__plot__data.js delete mode 100644 docs/html/structfplot__core_1_1scatter__plot__data.png delete mode 100644 docs/html/structfplot__core_1_1surface__plot-members.html delete mode 100644 docs/html/structfplot__core_1_1surface__plot.html delete mode 100644 docs/html/structfplot__core_1_1surface__plot.js delete mode 100644 docs/html/structfplot__core_1_1surface__plot.png delete mode 100644 docs/html/structfplot__core_1_1surface__plot__data-members.html delete mode 100644 docs/html/structfplot__core_1_1surface__plot__data.html delete mode 100644 docs/html/structfplot__core_1_1surface__plot__data.js delete mode 100644 docs/html/structfplot__core_1_1surface__plot__data.png delete mode 100644 docs/html/structfplot__core_1_1terminal-members.html delete mode 100644 docs/html/structfplot__core_1_1terminal.html delete mode 100644 docs/html/structfplot__core_1_1terminal.js delete mode 100644 docs/html/structfplot__core_1_1terminal.png delete mode 100644 docs/html/structfplot__core_1_1tri__surface__plot__data-members.html delete mode 100644 docs/html/structfplot__core_1_1tri__surface__plot__data.html delete mode 100644 docs/html/structfplot__core_1_1tri__surface__plot__data.js delete mode 100644 docs/html/structfplot__core_1_1tri__surface__plot__data.png delete mode 100644 docs/html/structfplot__core_1_1vector__field__plot__data-members.html delete mode 100644 docs/html/structfplot__core_1_1vector__field__plot__data.html delete mode 100644 docs/html/structfplot__core_1_1vector__field__plot__data.js delete mode 100644 docs/html/structfplot__core_1_1vector__field__plot__data.png delete mode 100644 docs/html/structfplot__core_1_1windows__terminal-members.html delete mode 100644 docs/html/structfplot__core_1_1windows__terminal.html delete mode 100644 docs/html/structfplot__core_1_1windows__terminal.js delete mode 100644 docs/html/structfplot__core_1_1windows__terminal.png delete mode 100644 docs/html/structfplot__core_1_1wxt__terminal-members.html delete mode 100644 docs/html/structfplot__core_1_1wxt__terminal.html delete mode 100644 docs/html/structfplot__core_1_1wxt__terminal.js delete mode 100644 docs/html/structfplot__core_1_1wxt__terminal.png delete mode 100644 docs/html/structfplot__core_1_1x__axis-members.html delete mode 100644 docs/html/structfplot__core_1_1x__axis.html delete mode 100644 docs/html/structfplot__core_1_1x__axis.js delete mode 100644 docs/html/structfplot__core_1_1x__axis.png delete mode 100644 docs/html/structfplot__core_1_1y2__axis-members.html delete mode 100644 docs/html/structfplot__core_1_1y2__axis.html delete mode 100644 docs/html/structfplot__core_1_1y2__axis.js delete mode 100644 docs/html/structfplot__core_1_1y2__axis.png delete mode 100644 docs/html/structfplot__core_1_1y__axis-members.html delete mode 100644 docs/html/structfplot__core_1_1y__axis.html delete mode 100644 docs/html/structfplot__core_1_1y__axis.js delete mode 100644 docs/html/structfplot__core_1_1y__axis.png delete mode 100644 docs/html/structfplot__core_1_1z__axis-members.html delete mode 100644 docs/html/structfplot__core_1_1z__axis.html delete mode 100644 docs/html/structfplot__core_1_1z__axis.js delete mode 100644 docs/html/structfplot__core_1_1z__axis.png delete mode 100644 docs/html/structfplot__string__builder_1_1string__builder-members.html delete mode 100644 docs/html/structfplot__string__builder_1_1string__builder.html delete mode 100644 docs/html/structfplot__string__builder_1_1string__builder.js delete mode 100644 docs/html/structhalfedge__s-members.html delete mode 100644 docs/html/structhalfedge__s.html delete mode 100644 docs/html/structhalfedge__s.js delete mode 100644 docs/html/structpoint2d__s-members.html delete mode 100644 docs/html/structpoint2d__s.html delete mode 100644 docs/html/structpoint2d__s.js delete mode 100644 docs/html/structworking__set__s-members.html delete mode 100644 docs/html/structworking__set__s.html delete mode 100644 docs/html/structworking__set__s.js delete mode 100644 docs/html/surface_example_w_cb_label.png delete mode 100644 docs/html/surface_plot_hidden_lines_1.png delete mode 100644 docs/html/sync_off.png delete mode 100644 docs/html/sync_on.png delete mode 100644 docs/html/tab_a.png delete mode 100644 docs/html/tab_ad.png delete mode 100644 docs/html/tab_b.png delete mode 100644 docs/html/tab_bd.png delete mode 100644 docs/html/tab_h.png delete mode 100644 docs/html/tab_hd.png delete mode 100644 docs/html/tab_s.png delete mode 100644 docs/html/tab_sd.png delete mode 100644 docs/html/tabs.css delete mode 100644 docs/html/tripack_8f_source.html delete mode 100644 docs/html/typefplot__core_1_1color-members.html delete mode 100644 docs/html/typefplot__core_1_1colormap-members.html delete mode 100644 docs/html/typefplot__core_1_1cool__colormap-members.html delete mode 100644 docs/html/typefplot__core_1_1hot__colormap-members.html delete mode 100644 docs/html/typefplot__core_1_1latex__terminal-members.html delete mode 100644 docs/html/typefplot__core_1_1legend-members.html delete mode 100644 docs/html/typefplot__core_1_1plot-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__2d-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__3d-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__axis-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__data-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__data__2d-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__data__3d-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__label-members.html delete mode 100644 docs/html/typefplot__core_1_1plot__object-members.html delete mode 100644 docs/html/typefplot__core_1_1png__terminal-members.html delete mode 100644 docs/html/typefplot__core_1_1qt__terminal-members.html delete mode 100644 docs/html/typefplot__core_1_1rainbow__colormap-members.html delete mode 100644 docs/html/typefplot__core_1_1scatter__plot__data-members.html delete mode 100644 docs/html/typefplot__core_1_1surface__plot-members.html delete mode 100644 docs/html/typefplot__core_1_1surface__plot__data-members.html delete mode 100644 docs/html/typefplot__core_1_1terminal-members.html delete mode 100644 docs/html/typefplot__core_1_1windows__terminal-members.html delete mode 100644 docs/html/typefplot__core_1_1wxt__terminal-members.html delete mode 100644 docs/html/typefplot__core_1_1x__axis-members.html delete mode 100644 docs/html/typefplot__core_1_1y2__axis-members.html delete mode 100644 docs/html/typefplot__core_1_1y__axis-members.html delete mode 100644 docs/html/typefplot__core_1_1z__axis-members.html delete mode 100644 docs/html/vector_plot_1.png delete mode 100644 docs/html/vector_plot_2.png diff --git a/doc/css/bootstrap.css b/doc/css/bootstrap.css new file mode 100644 index 0000000..5784645 --- /dev/null +++ b/doc/css/bootstrap.css @@ -0,0 +1,6013 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f8210fe4edf87d7604a7) + * Config saved to config.json and https://gist.github.com/f8210fe4edf87d7604a7 + */ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +mark { + background: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333333; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #dddddd; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555555; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999999; +} +.form-control::-webkit-input-placeholder { + color: #999999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; +} +.input-lg, +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg, +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333333; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} +.btn-default .badge { + color: #ffffff; + background-color: #333333; +} +.btn-primary { + color: #ffffff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; +} +.btn-link { + color: #337ab7; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; + visibility: hidden; +} +.collapse.in { + display: block; + visibility: visible; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #337ab7; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li.disabled > a { + color: #777777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dddddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dddddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dddddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; + visibility: hidden; +} +.tab-content > .active { + display: block; + visibility: visible; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + visibility: visible !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; + height: 50px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777777; +} +.navbar-default .navbar-nav > li > a { + color: #777777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #dddddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555555; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777777; +} +.navbar-default .navbar-link:hover { + color: #333333; +} +.navbar-default .btn-link { + color: #777777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #cccccc; +} +.breadcrumb > .active { + color: #777777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #337ab7; + background-color: #ffffff; + border: 1px solid #dddddd; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #23527c; + background-color: #eeeeee; + border-color: #dddddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + background-color: #ffffff; + border-color: #dddddd; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #ffffff; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #ffffff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #ffffff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px 15px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding: 48px 0; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item { + color: #555555; +} +a.list-group-item .list-group-item-heading { + color: #333333; +} +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + color: #555555; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #eeeeee; + color: #777777; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #dddddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #dddddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} +.panel-default { + border-color: #dddddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #dddddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #dddddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + background-color: #ffffff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/doc/css/bootstrap.min.css b/doc/css/bootstrap.min.css new file mode 100644 index 0000000..a40d943 --- /dev/null +++ b/doc/css/bootstrap.min.css @@ -0,0 +1,10 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=f8210fe4edf87d7604a7) + * Config saved to config.json and https://gist.github.com/f8210fe4edf87d7604a7 + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:normal;line-height:1.42857143;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/doc/css/font-awesome.css b/doc/css/font-awesome.css new file mode 100644 index 0000000..4040b3c --- /dev/null +++ b/doc/css/font-awesome.css @@ -0,0 +1,1672 @@ +/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.2.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} diff --git a/doc/css/font-awesome.min.css b/doc/css/font-awesome.min.css new file mode 100644 index 0000000..ec53d4d --- /dev/null +++ b/doc/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file diff --git a/doc/css/local.css b/doc/css/local.css new file mode 100644 index 0000000..11dd941 --- /dev/null +++ b/doc/css/local.css @@ -0,0 +1,284 @@ +body { + padding-top: 70px; + } + table.nostretch { + width=100% + } + .nostretch td { + class='block' + } + .nostretch tr td{ + width:1%; + white-space:nowrap; + } + + html { + scroll-padding-top: 70px; + } + + ol.hierarchy { + min-height: 40px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + } + + .smallcaps { + font-variant: small-caps; + } + .well .sidebar { + padding: 8px 0 + } + .sidebar a { + padding: 0px,0px,0px,0px + } + .varlist>tbody>tr>td { + padding-left: 3px; + padding-right: 3px; + } + .varlist>tbody>tr>td:first-child, .varlist>thead>tr>td:first-child { + padding-left: 8px; + } + .varlist>tbody>td>td:last-child, .varlist>thead>tr>td:last-child { + padding-right: 8px; + } + + .highlight pre { + overflow-x: auto; + overflow-wrap: normal; + white-space: pre + } + + /* .hl is for when line numbers are included, .highlight is for all + other cases. */ + .hl pre { + counter-reset: line-numbering; + overflow-x: auto; + overflow-wrap: normal; + white-space: pre; + padding: 0; + padding-right: 9.5px; + overflow-y: hidden; + padding-bottom: 9.5px; + } + + .hl pre a::before { + content: counter(line-numbering); + counter-increment: line-numbering; + padding-right: 0.7em; /* space after numbers */ + margin-top: 4.5em; + width: 60px; + text-align: right; + opacity: 0.7; + display: inline-block; + color: #aaa; + background: #eee; + margin-right: 10px; + border-right: 1px solid #ccc; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + .hl pre a:first-of-type::before { + padding-top: 9.5px; + } + + .hl pre a:last-of-type::before { + padding-bottom: 9.5px; + } + + .hl pre a:only-of-type::before { + padding: 9.5px; + } + + .hl pre a { + display: inline-block; + height: 4.5em; + margin: -4.5em 0 0; + } + .codesum h3 { + margin-top: 2px; + margin-bottom: 2px; + } + + h1.inline, h2.inline, h3.inline { + display: inline; + } + + .depwarn { + float: right; + } + + .anchor { + position: absolute; + margin: -4.5em; + visibility:hidden; + } + + .alert { + margin-left: 5px; + margin-right: 5px; + margin-top: 5px; + } + + div.toc { + font-size: 14.73px; + padding-left: 0px; + padding-right: 0px; + } + + div.toc a { + padding-left: 20px; + padding-right: 20px; + margin-right: 15px; + padding-top: 5px; + padding-bottom: 5px; + } + + div.toc li { + font-size: 0.95em; + padding-left: 15px; + } + + div.toc li.title { + font-size: 1em; + } + + div.toc hr { + margin-top: 12px; + margin-bottom: 10px; + } + + .in-well { + padding: 0px 0px; + margin-bottom: 0px; + float:right; + } + + table tr.submod>td { + border-top: none; + font-size: 13.5px; + } + + .graph-help { + font-size: 10px; + } + + .depgraph { + width: 100%; + max-width: 1140px; + } + + #sidebar a { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .highlighttable { + width: auto; + table-layout: fixed; + } + + ul.checklist { + list-style-type: none; + } + + ul.checklist input[type="checkbox"] { + margin-left: -20.8px; + margin-right: 4.55px; + } + + .gitter-chat-embed { + z-index: 100000; + } + +table.graph { + text-align: center; +} + + +.graph td.root { + border:2px solid black; + padding:10px; +} + +.graph td.triangle-right:after { + content: ""; + display: block; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-left: 7px solid black; +} + +.graph td.triangle-left:after { + content: ""; + display: block; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-right: 7px solid black; +} + +.graph td.node { + color: white; + padding:10px; + border-style: solid; + border-width: 3px 0px 3px 0px; + border-color: white; +} + +.graph td.node a{ + color: white; +} + +.graph td.dashedText, +.graph td.solidText { + padding: 0px 10px 0px 10px; + min-width: 40px; + color: black; + border-color: black; +} + +.graph td.dashedText { + border-bottom-style: dashed; +} + +.graph td.solidText { + border-bottom-style: solid; +} + +.graph td.dashedBottom, +.graph td.dashedTop, +.graph td.solidTop, +.graph td.solidBottom { + min-width: 40px; + color: transparent; + border-color: black; +} + +.graph td.dashedBottom { + border-bottom-style: dashed; +} + +.graph td.dashedTop { + border-top-style: dashed; +} + +.graph td.solidBottom { + border-bottom-style: solid; +} + +.graph td.solidTop { + border-top-style: solid; +} + +/* Ensure tables in Pages don't collapse horizontally */ +td, th { + padding-right: 10px; +} diff --git a/doc/css/pygments.css b/doc/css/pygments.css new file mode 100644 index 0000000..4a3a8d8 --- /dev/null +++ b/doc/css/pygments.css @@ -0,0 +1,61 @@ +pre .hll { background-color: #ffffcc } +pre .c { color: #408080; font-style: italic } /* Comment */ +pre .err { border: 1px solid #FF0000 } /* Error */ +pre .k { color: #008000; font-weight: bold } /* Keyword */ +pre .o { color: #666666 } /* Operator */ +pre .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +pre .cp { color: #BC7A00 } /* Comment.Preproc */ +pre .c1 { color: #408080; font-style: italic } /* Comment.Single */ +pre .cs { color: #408080; font-style: italic } /* Comment.Special */ +pre .gd { color: #A00000 } /* Generic.Deleted */ +pre .ge { font-style: italic } /* Generic.Emph */ +pre .gr { color: #FF0000 } /* Generic.Error */ +pre .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +pre .gi { color: #00A000 } /* Generic.Inserted */ +pre .go { color: #888888 } /* Generic.Output */ +pre .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +pre .gs { font-weight: bold } /* Generic.Strong */ +pre .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +pre .gt { color: #0044DD } /* Generic.Traceback */ +pre .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +pre .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +pre .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +pre .kp { color: #008000 } /* Keyword.Pseudo */ +pre .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +pre .kt { color: #B00040 } /* Keyword.Type */ +pre .m { color: #666666 } /* Literal.Number */ +pre .s { color: #BA2121 } /* Literal.String */ +pre .na { color: #7D9029 } /* Name.Attribute */ +pre .nb { color: #008000 } /* Name.Builtin */ +pre .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +pre .no { color: #880000 } /* Name.Constant */ +pre .nd { color: #AA22FF } /* Name.Decorator */ +pre .ni { color: #999999; font-weight: bold } /* Name.Entity */ +pre .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +pre .nf { color: #0000FF } /* Name.Function */ +pre .nl { color: #A0A000 } /* Name.Label */ +pre .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +pre .nt { color: #008000; font-weight: bold } /* Name.Tag */ +pre .nv { color: #19177C } /* Name.Variable */ +pre .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +pre .w { color: #bbbbbb } /* Text.Whitespace */ +pre .mf { color: #666666 } /* Literal.Number.Float */ +pre .mh { color: #666666 } /* Literal.Number.Hex */ +pre .mi { color: #666666 } /* Literal.Number.Integer */ +pre .mo { color: #666666 } /* Literal.Number.Oct */ +pre .sb { color: #BA2121 } /* Literal.String.Backtick */ +pre .sc { color: #BA2121 } /* Literal.String.Char */ +pre .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +pre .s2 { color: #BA2121 } /* Literal.String.Double */ +pre .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +pre .sh { color: #BA2121 } /* Literal.String.Heredoc */ +pre .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +pre .sx { color: #008000 } /* Literal.String.Other */ +pre .sr { color: #BB6688 } /* Literal.String.Regex */ +pre .s1 { color: #BA2121 } /* Literal.String.Single */ +pre .ss { color: #19177C } /* Literal.String.Symbol */ +pre .bp { color: #008000 } /* Name.Builtin.Pseudo */ +pre .vc { color: #19177C } /* Name.Variable.Class */ +pre .vg { color: #19177C } /* Name.Variable.Global */ +pre .vi { color: #19177C } /* Name.Variable.Instance */ +pre .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/doc/favicon.png b/doc/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6ad16ba65b1beac980db083f951c124ed54d7e GIT binary patch literal 803 zcmV+;1Kj+HP)I0lE3INd7Tp1k&#_l#EBR!4jk3OBm zxMLco>QdAh_c3@V6e52KPaY{|1qXm*#x4MWPFu*rEuHtt5|D^RXgaT9VV5r3LDK;M zfYa$=jkVd>1O)%<12fY$4wjK`!h(}x`nS3aSfm5c89K@ShO6a?9L&E+vw{PFR&V|5 z8eu7rnj*vGxH)X1shdudF`~eaAZBJ=OJ^?;L7v1_V0O-h-!HmMw(_5AMtldFFI3<} zWpP-$CH58wg#zB-*6X9Od5k1t{*!CJ_8>L{8fy0Q;_mO>*bq2#yo7^Y?Rkh`Fcf_P zQVGBOS2{*wlaNTIVqVi@-El^|$6cuD*YN8ddo|)0na+JXnq+%%Z(phu2?x-hQ7bLG) zh5l|MVScb_cOq zf@4JY`s|;gfx+kS h`e=}Df_RtbKLOh6;d+20-|GMX002ovPDHLkV1f_|W~%@I literal 0 HcmV?d00001 diff --git a/doc/fonts/FontAwesome.otf b/doc/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..81c9ad949b47f64afeca5642ee2494b6e3147f44 GIT binary patch literal 85908 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 uQr82 literal 0 HcmV?d00001 diff --git a/doc/fonts/fontawesome-webfont.eot b/doc/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..84677bc0c5f37f1fac9d87548c4554b5c91717cf GIT binary patch literal 56006 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�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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/fonts/fontawesome-webfont.ttf b/doc/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96a3639cdde5e8ab459c6380e3b9524ee81641dc GIT binary patch literal 112160 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 zÄ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 V*eEM;|ho{trTA6=?tf literal 0 HcmV?d00001 diff --git a/doc/fonts/fontawesome-webfont.woff b/doc/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..628b6a52a87e62c6f22426e17c01f6a303aa194e GIT binary patch literal 65452 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 q%u^)w#YX9ZIvhtu?9Cy6YRi6f6G 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 literal 0 HcmV?d00001 diff --git a/doc/fonts/glyphicons-halflings-regular.eot b/doc/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

!oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/doc/fonts/glyphicons-halflings-regular.svg b/doc/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..25691af --- /dev/null +++ b/doc/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/fonts/glyphicons-halflings-regular.ttf b/doc/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/doc/fonts/glyphicons-halflings-regular.woff b/doc/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 mX4Rts + + + + + + + + + + FPLOT + + + + + + + + + + + + + + + + + + +

+ + +
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/cm_get_string_result.html b/doc/interface/cm_get_string_result.html new file mode 100644 index 0000000..636c497 --- /dev/null +++ b/doc/interface/cm_get_string_result.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + cm_get_string_result – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

cm_get_string_result + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public function cm_get_string_result(this) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(colormap), + intent(in) + + ::this +

The colormap object.

+
+ +

Return Value character(len=:),allocatable

+

The string.

+

Description

+

Retrieves a string result from a colormap object.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/get_string_result.html b/doc/interface/get_string_result.html new file mode 100644 index 0000000..58b23b8 --- /dev/null +++ b/doc/interface/get_string_result.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + get_string_result – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

get_string_result + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public function get_string_result(this) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(plot_object), + intent(in) + + ::this +

The plot_object object.

+
+ +

Return Value character(len=:),allocatable

+

The result string.

+

Description

+

Returns a string from a plot_object.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/operator(==).html b/doc/interface/operator(==).html new file mode 100644 index 0000000..0cf2dd2 --- /dev/null +++ b/doc/interface/operator(==).html @@ -0,0 +1,316 @@ + + + + + + + + + + + operator(==) – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

operator(==) + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

public interface operator(==)

+ + +
+

Contents

+ + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+
+ + + +

Module Procedures

+
+

private pure function clr_equals(x, y) result(rst) +

+
+ + +

Arguments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + type(color), + intent(in) + + ::x + +
+ + type(color), + intent(in) + + ::y + +
+ +

+ Return Value + logical +

+ + +
+
+ +
+
+
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/operator(SLASH=).html b/doc/interface/operator(SLASH=).html new file mode 100644 index 0000000..5d67f08 --- /dev/null +++ b/doc/interface/operator(SLASH=).html @@ -0,0 +1,316 @@ + + + + + + + + + + + operator(/=) – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

operator(/=) + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

public interface operator(/=)

+ + +
+

Contents

+ + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+ + + +
+
+ + + +

Module Procedures

+
+

private pure function clr_not_equals(x, y) result(rst) +

+
+ + +

Arguments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + type(color), + intent(in) + + ::x + +
+ + type(color), + intent(in) + + ::y + +
+ +

+ Return Value + logical +

+ + +
+
+ +
+
+
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/pa_get_string_result.html b/doc/interface/pa_get_string_result.html new file mode 100644 index 0000000..c20bc9c --- /dev/null +++ b/doc/interface/pa_get_string_result.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + pa_get_string_result – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

pa_get_string_result + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public function pa_get_string_result(this) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(plot_axis), + intent(in) + + ::this +

The plot_axis object.

+
+ +

Return Value character(len=:),allocatable

+

The string.

+

Description

+

Retrieves a string from a plot_axis.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/pd_get_string_result.html b/doc/interface/pd_get_string_result.html new file mode 100644 index 0000000..02e7b23 --- /dev/null +++ b/doc/interface/pd_get_string_result.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + pd_get_string_result – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

pd_get_string_result + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public function pd_get_string_result(this) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(plot_data), + intent(in) + + ::this +

The plot_data object.

+
+ +

Return Value character(len=:),allocatable

+

The string.

+

Description

+

Retrieves a string from a plot_data object.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/simplify_polyline.html b/doc/interface/simplify_polyline.html new file mode 100644 index 0000000..433ec55 --- /dev/null +++ b/doc/interface/simplify_polyline.html @@ -0,0 +1,547 @@ + + + + + + + + + + + simplify_polyline – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

simplify_polyline + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

public interface simplify_polyline

+ + +
+

Contents

+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +

Module Procedures

+
+

private function simplify_polyline_2d1(x, y, tol, err) result(ln) +

+
+

Simplifies a 2D polyline by removing points too close to +discern given a specified tolerance.

+ +

Arguments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + real(kind=real64), + intent(in), + dimension(:) + ::x +

An N-element array containing the x-coordinates of the vertices +making up the polyline.

+
+ + real(kind=real64), + intent(in), + dimension(:) + ::y +

An N-element array containing the y-coordinates of the vertices +making up the polyline.

+
+ + real(kind=real64), + intent(in) + + ::tol +

The distance tolerance to use when simplifying the polyline. +This value must be positive, and larger than machine epsilon.

+
+ + class(errors), + intent(inout),optional, + target + ::err +

An error handling object.

+
+ +

+ Return Value + real(kind=real64), allocatable, dimension(:,:) +

+

A matrix containing the simplified polyline vertices. The first +column of the matrix contains the x-coordinates, and the second +column contains the y-coordinates.

+ +
+
+ +
+

private function simplify_polyline_3d1(x, y, z, tol, err) result(ln) +

+
+

Simplifies a 3D polyline by removing points too close to +discern given a specified tolerance.

+ +

Arguments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + real(kind=real64), + intent(in), + dimension(:) + ::x +

An N-element array containing the x-coordinates of the vertices +making up the polyline.

+
+ + real(kind=real64), + intent(in), + dimension(:) + ::y +

An N-element array containing the y-coordinates of the vertices +making up the polyline.

+
+ + real(kind=real64), + intent(in), + dimension(:) + ::z +

An N-element array containing the z-coordinates of the vertices +making up the polyline.

+
+ + real(kind=real64), + intent(in) + + ::tol +

The distance tolerance to use when simplifying the polyline. +This value must be positive, and larger than machine epsilon.

+
+ + class(errors), + intent(inout),optional, + target + ::err +

An error handling object.

+
+ +

+ Return Value + real(kind=real64), allocatable, dimension(:,:) +

+

A matrix containing the simplified polyline vertices. The first +column of the matrix contains the x-coordinates, the second +column contains the y-coordinates, and the third column contains +the z-coordinates.

+ +
+
+ +
+

private function simplify_polyline_mtx(xy, tol, err) result(ln) +

+
+

Simplifies a 2D or 3D polyline by removing points too close to +discern given a specified tolerance.

+ +

Arguments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + real(kind=real64), + intent(in), + dimension(:,:) + ::xy +

An N-by-2 or N-by-3 matrix containing the polyline vertex data.

+
+ + real(kind=real64), + intent(in) + + ::tol +

The distance tolerance to use when simplifying the polyline. +This value must be positive, and larger than machine epsilon.

+
+ + class(errors), + intent(inout),optional, + target + ::err +

An error handling object.

+
+ +

+ Return Value + real(kind=real64), allocatable, dimension(:,:) +

+

A matrix containing the simplified polyline vertices. The first +column of the matrix contains the x-coordinates, the second +column contains the y-coordinates, and if necessary, the third +column contains the z-coordinates.

+ +
+
+ +
+
+
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/spd_get_int_value.html b/doc/interface/spd_get_int_value.html new file mode 100644 index 0000000..4c728fe --- /dev/null +++ b/doc/interface/spd_get_int_value.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + spd_get_int_value – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

spd_get_int_value + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public pure function spd_get_int_value(this) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(scatter_plot_data), + intent(in) + + ::this +

The scatter_plot_data object.

+
+ +

Return Value integer(kind=int32)

+

The value.

+

Description

+

Gets an integer value from the scatter_plot_data object.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/spd_get_string_result.html b/doc/interface/spd_get_string_result.html new file mode 100644 index 0000000..62f5df9 --- /dev/null +++ b/doc/interface/spd_get_string_result.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + spd_get_string_result – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

spd_get_string_result + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public function spd_get_string_result(this) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(scatter_plot_data), + intent(in) + + ::this +

The scatter_plot_data object.

+
+ +

Return Value character(len=:),allocatable

+

The string.

+

Description

+

Gets a string value from the scatter_plot_data object.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/spd_get_value.html b/doc/interface/spd_get_value.html new file mode 100644 index 0000000..c09d747 --- /dev/null +++ b/doc/interface/spd_get_value.html @@ -0,0 +1,260 @@ + + + + + + + + + + + + spd_get_value – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

spd_get_value + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public pure function spd_get_value(this, index) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(scatter_plot_data), + intent(in) + + ::this +

The scatter_plot_data object.

+
+ + integer(kind=int32), + intent(in) + + ::index +

The index.

+
+ +

Return Value real(kind=real64)

+

The value.

+

Description

+

Gets an indexed value from the scatter_plot_data object.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/spd_set_value.html b/doc/interface/spd_set_value.html new file mode 100644 index 0000000..1bf64fb --- /dev/null +++ b/doc/interface/spd_set_value.html @@ -0,0 +1,273 @@ + + + + + + + + + + + + spd_set_value – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

spd_set_value + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public subroutine spd_set_value(this, index, x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(scatter_plot_data), + intent(inout) + + ::this +

The scatter_plot_data object.

+
+ + integer(kind=int32), + intent(in) + + ::index +

The index.

+
+ + real(kind=real64), + intent(in) + + ::x +

The value.

+
+ +

Description

+

Sets an indexed value from the scatter_plot_data object.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/interface/term_get_string_result.html b/doc/interface/term_get_string_result.html new file mode 100644 index 0000000..ad74a88 --- /dev/null +++ b/doc/interface/term_get_string_result.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + term_get_string_result – FPLOT + + + + + + + + + + + + + + + + + + + + +
+
+

term_get_string_result + Interface + +

+
+
+
+ + +
+
+
+ + +
+ +
+ + +
+

interface
+ public function term_get_string_result(this) result(x) +

+ + + +

Arguments

+ + + + + + + + + + + + + + + + + + + +
TypeIntentOptional AttributesName
+ + class(terminal), + intent(in) + + ::this +

The terminal object.

+
+ +

Return Value character(len=:),allocatable

+

The string.

+

Description

+

Retrieves a string from a terminal.

+
+ +
+
+ +
+
+
+
+
+

FPLOT was developed by Jason Christopherson
© 2025 +

+
+
+

+ Documentation generated by + FORD + on 2025-03-28 05:45

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/js/MathJax-config/.gitignore b/doc/js/MathJax-config/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/doc/js/bootstrap.js b/doc/js/bootstrap.js new file mode 100644 index 0000000..b6ac8d9 --- /dev/null +++ b/doc/js/bootstrap.js @@ -0,0 +1,2320 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.1' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.1' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.1' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var delta = direction == 'prev' ? -1 : 1 + var activeIndex = this.getItemIndex(active) + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.1' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true, + trigger: '[data-toggle="collapse"]' + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this }) + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.1' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/html/menu.js b/docs/html/menu.js deleted file mode 100644 index 717761d..0000000 --- a/docs/html/menu.js +++ /dev/null @@ -1,134 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { - function makeTree(data,relPath) { - let result=''; - if ('children' in data) { - result+='
    '; - for (let i in data.children) { - let url; - const link = data.children[i].url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - } else { - url = relPath+link; - } - result+='
  • '+ - data.children[i].text+''+ - makeTree(data.children[i],relPath)+'
  • '; - } - result+='
'; - } - return result; - } - let searchBoxHtml; - if (searchEnabled) { - if (serverSide) { - searchBoxHtml='
'+ - '
'+ - '
 '+ - ''+ - '
'+ - '
'+ - '
'+ - '
'; - } else { - searchBoxHtml='
'+ - ''+ - ' '+ - ''+ - ''+ - ''+ - ''+ - ''+ - '
'; - } - } - - $('#main-nav').before('
'+ - ''+ - ''+ - '
'); - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchBoxHtml) { - $('#main-menu').append('
  • '); - } - const $mainMenuState = $('#main-menu-state'); - let prevWidth = 0; - if ($mainMenuState.length) { - const initResizableIfExists = function() { - if (typeof initResizable==='function') initResizable(); - } - // animate mobile menu - $mainMenuState.change(function() { - const $menu = $('#main-menu'); - let options = { duration: 250, step: initResizableIfExists }; - if (this.checked) { - options['complete'] = () => $menu.css('display', 'block'); - $menu.hide().slideDown(options); - } else { - options['complete'] = () => $menu.css('display', 'none'); - $menu.show().slideUp(options); - } - }); - // set default menu visibility - const resetState = function() { - const $menu = $('#main-menu'); - const newWidth = $(window).outerWidth(); - if (newWidth!=prevWidth) { - if ($(window).outerWidth()<768) { - $mainMenuState.prop('checked',false); $menu.hide(); - $('#searchBoxPos1').html(searchBoxHtml); - $('#searchBoxPos2').hide(); - } else { - $menu.show(); - $('#searchBoxPos1').empty(); - $('#searchBoxPos2').html(searchBoxHtml); - $('#searchBoxPos2').show(); - } - if (typeof searchBox!=='undefined') { - searchBox.CloseResultsWindow(); - } - prevWidth = newWidth; - } - } - $(window).ready(function() { resetState(); initResizableIfExists(); }); - $(window).resize(resetState); - } - $('#main-menu').smartmenus(); -} -/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js deleted file mode 100644 index 48ee355..0000000 --- a/docs/html/menudata.js +++ /dev/null @@ -1,78 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Modules",url:"namespaces.html",children:[ -{text:"Modules List",url:"namespaces.html"}, -{text:"Module Members",url:"namespacemembers.html",children:[ -{text:"All",url:"namespacemembers.html",children:[ -{text:"a",url:"namespacemembers.html#index_a"}, -{text:"c",url:"namespacemembers.html#index_c"}, -{text:"g",url:"namespacemembers.html#index_g"}, -{text:"l",url:"namespacemembers.html#index_l"}, -{text:"m",url:"namespacemembers.html#index_m"}, -{text:"p",url:"namespacemembers.html#index_p"}]}, -{text:"Variables",url:"namespacemembers_vars.html",children:[ -{text:"a",url:"namespacemembers_vars.html#index_a"}, -{text:"c",url:"namespacemembers_vars.html#index_c"}, -{text:"g",url:"namespacemembers_vars.html#index_g"}, -{text:"l",url:"namespacemembers_vars.html#index_l"}, -{text:"m",url:"namespacemembers_vars.html#index_m"}, -{text:"p",url:"namespacemembers_vars.html#index_p"}]}]}]}, -{text:"Data Types",url:"annotated.html",children:[ -{text:"Data Types List",url:"annotated.html"}, -{text:"Data Type Index",url:"classes.html"}, -{text:"Class Hierarchy",url:"hierarchy.html"}, -{text:"Data Fields",url:"functions.html",children:[ -{text:"All",url:"functions.html",children:[ -{text:"b",url:"functions.html#index_b"}, -{text:"c",url:"functions_c.html#index_c"}, -{text:"d",url:"functions_d.html#index_d"}, -{text:"e",url:"functions_e.html#index_e"}, -{text:"f",url:"functions_f.html#index_f"}, -{text:"g",url:"functions_g.html#index_g"}, -{text:"i",url:"functions_i.html#index_i"}, -{text:"m",url:"functions_m.html#index_m"}, -{text:"p",url:"functions_p.html#index_p"}, -{text:"r",url:"functions_r.html#index_r"}, -{text:"s",url:"functions_s.html#index_s"}, -{text:"t",url:"functions_t.html#index_t"}]}, -{text:"Functions/Subroutines",url:"functions_func.html",children:[ -{text:"c",url:"functions_func.html#index_c"}, -{text:"d",url:"functions_func_d.html#index_d"}, -{text:"e",url:"functions_func_e.html#index_e"}, -{text:"f",url:"functions_func_f.html#index_f"}, -{text:"g",url:"functions_func_g.html#index_g"}, -{text:"i",url:"functions_func_i.html#index_i"}, -{text:"p",url:"functions_func_p.html#index_p"}, -{text:"s",url:"functions_func_s.html#index_s"}, -{text:"t",url:"functions_func_t.html#index_t"}]}, -{text:"Variables",url:"functions_vars.html",children:[ -{text:"b",url:"functions_vars.html#index_b"}, -{text:"g",url:"functions_vars.html#index_g"}, -{text:"m",url:"functions_vars.html#index_m"}, -{text:"r",url:"functions_vars.html#index_r"}]}]}]}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}]}]} diff --git a/docs/html/minus.svg b/docs/html/minus.svg deleted file mode 100644 index f70d0c1..0000000 --- a/docs/html/minus.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/html/minusd.svg b/docs/html/minusd.svg deleted file mode 100644 index 5f8e879..0000000 --- a/docs/html/minusd.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/html/namespacefplot__core.html b/docs/html/namespacefplot__core.html deleted file mode 100644 index 5bc6638..0000000 --- a/docs/html/namespacefplot__core.html +++ /dev/null @@ -1,1972 +0,0 @@ - - - - - - - -fplot: fplot_core Module Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core Module Reference
    -
    -
    - -

    fplot_core -More...

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Data Types

    interface  assignment(=)
     
    interface  cm_get_string_result
     Retrieves a string from a colormap. More...
     
    type  color
     Constructs a linearly spaced array. More...
     
    type  colormap
     A colormap object for a surface plot. More...
     
    type  cool_colormap
     Defines a colormap consisting of "cool" colors. More...
     
    type  custom_colormap
     Defines a custom colormap that utilizes the FORCOLORMAP library to provide the map. More...
     
    type  delaunay_tri_2d
     Provides a container for a 2D Delaunay triangulation. More...
     
    type  delaunay_tri_surface
     Provides a type describing a triangulated surface. More...
     
    type  earth_colormap
     Defines an earthy-colored colormap. More...
     
    type  filled_plot_data
     Defines a two-dimensional filled plot data set. More...
     
    interface  get_string_result
     Retrieves a string from a plot_object. More...
     
    type  grey_colormap
     Defines a grey-scaled colormap. More...
     
    type  hot_colormap
     Defines a colormap consisting of "hot" colors. More...
     
    type  latex_terminal
     Defines a GNUPLOT LATEX terminal object. More...
     
    type  legend
     Defines a legend object. More...
     
    type  multiplot
     Defines a multi-plot layout. More...
     
    interface  operator(/=)
     
    interface  operator(==)
     
    interface  pa_get_string_result
     Retrieves a string from a plot_axis. More...
     
    type  parula_colormap
     Defines a colormap equivalent to the MATLAB parula colormap. More...
     
    interface  pd_get_string_result
     Retrieves a string from a plot_data object. More...
     
    type  plot
     Defines the basic GNUPLOT plot. More...
     
    type  plot_2d
     A plot object defining a 2D plot. More...
     
    type  plot_3d
     A plot object defining a 3D plot. More...
     
    type  plot_arrow
     Defines an arrow to be used on by a plot object. More...
     
    type  plot_axis
     Describes a single plot axis. More...
     
    type  plot_bar
     Defines a 2D plot tailored towards bar plotting. More...
     
    type  plot_data
     Provides a container for plot data. More...
     
    type  plot_data_2d
     Defines a two-dimensional plot data set. More...
     
    type  plot_data_3d
     Defines a three-dimensional plot data set. More...
     
    type  plot_data_bar
     Defines a data set tailored to bar charts. More...
     
    type  plot_data_colored
     Defines a plot_data based object best represented by a color. More...
     
    type  plot_data_error_bars
     Defines a 2D error bar based data set. More...
     
    type  plot_data_histogram
     A container for plotting data in the form of a histogram. More...
     
    type  plot_data_tri_2d
     Defines a 2D triangulated data set. More...
     
    type  plot_label
     Defines a label object for a plot. More...
     
    type  plot_object
     The base type for a GNUPLOT object. More...
     
    type  plot_polar
     Defines a 2D polar plot. More...
     
    type  png_terminal
     Defines a GNUPLOT PNG terminal object. More...
     
    type  qt_terminal
     Defines a GNUPLOT QT terminal object. More...
     
    type  rainbow_colormap
     Defines a rainbow colormap. More...
     
    type  scatter_plot_data
     A plot_data object for describing scatter plot data sets. More...
     
    interface  simplify_polyline
     Simplifies a 2D or 3D polyline by removing points too close to discern given a specified tolerance. More...
     
    interface  spd_get_int_value
     Retrieves an integer value from a scatter_plot_data object. More...
     
    interface  spd_get_string_result
     Retrieves a string from a scatter_plot_data object. More...
     
    interface  spd_get_value
     Retrieves a numeric value from a scatter_plot_data object. More...
     
    interface  spd_set_value
     Sets a numeric value into a scatter_plot_data object. More...
     
    type  surface_plot
     A plot object defining a 3D surface plot. More...
     
    type  surface_plot_data
     Provides a three-dimensional surface plot data set. More...
     
    interface  term_get_string_result
     Retrieves a string from a terminal. More...
     
    type  terminal
     Defines a GNUPLOT terminal object. More...
     
    type  tri_surface_plot_data
     Provides a three-dimensional surface plot data set constructed of triangulated points. More...
     
    type  vector_field_plot_data
     Defines a two-dimensional vector-field plot data set. More...
     
    type  windows_terminal
     Defines a GNUPLOT Win32 terminal object. More...
     
    type  wxt_terminal
     Defines a GNUPLOT WXT terminal object. More...
     
    type  x_axis
     An x-axis object. More...
     
    type  y2_axis
     A secondary y-axis object. More...
     
    type  y_axis
     A y-axis object. More...
     
    type  z_axis
     A z-axis object. More...
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Variables

    integer(int32), parameter, public plot_out_of_memory_error = 1000
     Occurs if there is insufficient memory available for the requested operation.
     
    integer(int32), parameter, public plot_invalid_input_error = 1001
     Occurs if an invalid input is provided.
     
    integer(int32), parameter, public plot_invalid_operation_error = 1002
     Occurs if an attempt is made to perform an invalid operation.
     
    integer(int32), parameter, public plot_array_size_mismatch_error = 1003
     Occurs if there is an array size mismatch error.
     
    integer(int32), parameter, public plot_gnuplot_file_error = 1004
     Occurs if there is a GNUPLOT file error.
     
    integer(int32), parameter, public gnuplot_terminal_win32 = 1
     Defines a Win32 terminal.
     
    integer(int32), parameter, public gnuplot_terminal_wxt = 2
     Defines a WXT terminal.
     
    integer(int32), parameter, public gnuplot_terminal_qt = 3
     Defines a QT terminal.
     
    integer(int32), parameter, public gnuplot_terminal_png = 4
     Defines a PNG terminal.
     
    integer(int32), parameter, public gnuplot_terminal_latex = 5
     Defines a LATEX terminal.
     
    integer(int32), parameter, public marker_plus = 1
     Defines a + data point marker.
     
    integer(int32), parameter, public marker_x = 2
     Defines an x data point marker.
     
    integer(int32), parameter, public marker_asterisk = 3
     Defines an * data point marker.
     
    integer(int32), parameter, public marker_empty_square = 4
     Defines an empty square-shaped data point marker.
     
    integer(int32), parameter, public marker_filled_square = 5
     Defines an filled square-shaped data point marker.
     
    integer(int32), parameter, public marker_empty_circle = 6
     Defines an empty circle-shaped data point marker.
     
    integer(int32), parameter, public marker_filled_circle = 7
     Defines an filled circle-shaped data point marker.
     
    integer(int32), parameter, public marker_empty_triangle = 8
     Defines an empty triangle-shaped data point marker.
     
    integer(int32), parameter, public marker_filled_triangle = 9
     Defines an filled triangle-shaped data point marker.
     
    integer(int32), parameter, public marker_empty_nabla = 10
     Defines an empty nabla-shaped data point marker.
     
    integer(int32), parameter, public marker_filled_nabla = 11
     Defines an filled nabla-shaped data point marker.
     
    integer(int32), parameter, public marker_empty_rhombus = 12
     Defines an empty rhombus-shaped data point marker.
     
    integer(int32), parameter, public marker_filled_rhombus = 13
     Defines an filled rhombus-shaped data point marker.
     
    integer(int32), parameter, public line_solid = 1
     Defines a solid line.
     
    integer(int32), parameter, public line_dashed = 2
     Defines a dashed line.
     
    integer(int32), parameter, public line_dotted = 3
     Defines a dotted line.
     
    integer(int32), parameter, public line_dash_dotted = 4
     Defines a dash-dotted line.
     
    integer(int32), parameter, public line_dash_dot_dot = 5
     Defines a dash-dot-dotted line.
     
    character(len=*), parameter, public legend_top = "top"
     Defines the legend should be placed at the top of the plot.
     
    character(len=*), parameter, public legend_center = "center"
     Defines the legend should be centered on the plot.
     
    character(len=*), parameter, public legend_left = "left"
     Defines the legend should be placed at the left of the plot.
     
    character(len=*), parameter, public legend_right = "right"
     Defines the legend should be placed at the right of the plot.
     
    character(len=*), parameter, public legend_bottom = "bottom"
     Defines the legend should be placed at the bottom of the plot.
     
    character(len=*), parameter, public legend_arrange_vertically = "vertical"
     Defines the legend should be arranged such that the column count is minimized.
     
    character(len=*), parameter, public legend_arrange_horizontally = "horizontal"
     Defines the legend should be arranged such that the row count is minimized.
     
    character(len=*), parameter, public polar_theta_top = "top"
     States that theta should start at the top of the plot.
     
    character(len=*), parameter, public polar_theta_right = "right"
     States that theta should start at the right of the plot.
     
    character(len=*), parameter, public polar_theta_bottom = "bottom"
     States that theta should start at the bottom of the plot.
     
    character(len=*), parameter, public polar_theta_left = "left"
     States that theta should start at the left of the plot.
     
    character(len=*), parameter, public polar_theta_ccw = "ccw"
     States that theta should proceed in a counter-clockwise direction.
     
    character(len=*), parameter, public polar_theta_cw = "cw"
     States that theta should proceed in a clockwise direction.
     
    integer(int32), parameter, public coordinates_cartesian = 100
     Defines a Cartesian coordinate system.
     
    integer(int32), parameter, public coordinates_spherical = 101
     Defines a spherical coordinate system.
     
    integer(int32), parameter, public coordinates_cylindrical = 102
     Defines a cylindrical coordinate system.
     
    integer(int32), parameter, public plotdata_max_name_length = 128
     Defines the maximum number of characters allowed in a graph label.
     
    integer(int32), parameter gnuplot_default_window_width = 640
     The default GNUPLOT window width, in pixels.
     
    integer(int32), parameter gnuplot_default_window_height = 420
     The default GNUPLOT window height, in pixels.
     
    integer(int32), parameter gnuplot_max_label_length = 128
     Defines the maximum number of characters allowed in a graph label.
     
    character(len=*), parameter gnuplot_default_fontname = "Calibri"
     Defines the default font used by text on the graph.
     
    integer(int32), parameter gnuplot_default_font_size = 14
     Defines the default font size used by text on the graph.
     
    integer(int32), parameter gnuplot_max_path_length = 256
     Defines the maximum number of characters allowed in a file path.
     
    type(color), parameter, public clr_black = color(0, 0, 0)
     Defines a black color.
     
    type(color), parameter, public clr_white = color(255, 255, 255)
     Defines a white color.
     
    type(color), parameter, public clr_red = color(255, 0, 0)
     Defines a red color.
     
    type(color), parameter, public clr_lime = color(0, 255, 0)
     Defines a lime color.
     
    type(color), parameter, public clr_blue = color(0, 0, 255)
     Defines a blue color.
     
    type(color), parameter, public clr_yellow = color(255, 255, 0)
     Defines a yellow color.
     
    type(color), parameter, public clr_cyan = color(0, 255, 255)
     Defines a cyan color.
     
    type(color), parameter, public clr_magenta = color(255, 0, 255)
     Defines a magenta color.
     
    type(color), parameter, public clr_silver = color(192, 192, 192)
     Defines a silver color.
     
    type(color), parameter, public clr_gray = color(128, 128, 128)
     Defines a gray color.
     
    type(color), parameter, public clr_maroon = color(128, 0, 0)
     Defines a maroon color.
     
    type(color), parameter, public clr_olive = color(128, 128, 0)
     Defines a olive color.
     
    type(color), parameter, public clr_green = color(0, 128, 0)
     Defines a green color.
     
    type(color), parameter, public clr_purple = color(128, 0, 128)
     Defines a purple color.
     
    type(color), parameter, public clr_teal = color(0, 128, 128)
     Defines a teal color.
     
    type(color), parameter, public clr_navy = color(0, 0, 128)
     Defines a navy color.
     
    type(color), parameter, public clr_orange = color(255, 165, 0)
     Defines an orange color.
     
    type(color), dimension(7), parameter color_list = [ color(0, int(0.447 * 255), int(0.741 * 255)), color(int(0.85 * 255), int(0.325 * 255), int(0.098 * 255)), color(int(0.929 * 255), int(0.694 * 255), int(0.125 * 255)), color(int(0.494 * 255), int(0.184 * 255), int(0.556 * 255)), color(int(0.466 * 255), int(0.674 * 255), int(0.188 * 255)), color(int(0.301 * 255), int(0.745 * 255), int(0.933 * 255)), color(int(0.635 * 255), int(0.078 * 255), int(0.184 * 255))]
     
    integer(int32), parameter, public arrow_no_head = 0
     Defines an arrow with no head.
     
    integer(int32), parameter, public arrow_head = 1
     Defines an arrow with a traditional head.
     
    integer(int32), parameter, public arrow_backhead = 2
     Defines an arrow with it's head at it's back end (tail).
     
    integer(int32), parameter, public arrow_heads = 3
     Defines an arrow with a head on both ends.
     
    integer(int32), parameter, public arrow_filled = 100
     Defines a filled arrow head.
     
    integer(int32), parameter, public arrow_empty = 101
     Defines an empty arrow head.
     
    integer(int32), parameter, public arrow_no_fill = 102
     Defines an arrow head without fill.
     
    integer(int32), parameter, public arrow_no_border = 103
     Defines an arrow head with no border.
     
    -

    Detailed Description

    -

    fplot_core

    -
    Purpose
    FPLOT is a Fortran library providing a means of interacting with Gnuplot from a Fortran program. The library is designed in an object-oriented manner, and as such utilizes language features that require a compiler that supports the 2003 and 2008 standards. Additionally, it is expected that Gnuplot is installed on the system path. For full functionallity, a minimum of Gnuplot v5.2 is expected.
    -
    - -
    -

    Variable Documentation

    - -

    ◆ arrow_backhead

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_backhead = 2
    -
    - -

    Defines an arrow with it's head at it's back end (tail).

    - -

    Definition at line 634 of file fplot_core.f90.

    - -
    -
    - -

    ◆ arrow_empty

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_empty = 101
    -
    - -

    Defines an empty arrow head.

    - -

    Definition at line 640 of file fplot_core.f90.

    - -
    -
    - -

    ◆ arrow_filled

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_filled = 100
    -
    - -

    Defines a filled arrow head.

    - -

    Definition at line 638 of file fplot_core.f90.

    - -
    -
    - -

    ◆ arrow_head

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_head = 1
    -
    - -

    Defines an arrow with a traditional head.

    - -

    Definition at line 632 of file fplot_core.f90.

    - -
    -
    - -

    ◆ arrow_heads

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_heads = 3
    -
    - -

    Defines an arrow with a head on both ends.

    - -

    Definition at line 636 of file fplot_core.f90.

    - -
    -
    - -

    ◆ arrow_no_border

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_no_border = 103
    -
    - -

    Defines an arrow head with no border.

    - -

    Definition at line 644 of file fplot_core.f90.

    - -
    -
    - -

    ◆ arrow_no_fill

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_no_fill = 102
    -
    - -

    Defines an arrow head without fill.

    - -

    Definition at line 642 of file fplot_core.f90.

    - -
    -
    - -

    ◆ arrow_no_head

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::arrow_no_head = 0
    -
    - -

    Defines an arrow with no head.

    - -

    Definition at line 630 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_black

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_black = color(0, 0, 0)
    -
    - -

    Defines a black color.

    - -

    Definition at line 418 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_blue

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_blue = color(0, 0, 255)
    -
    - -

    Defines a blue color.

    - -

    Definition at line 426 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_cyan

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_cyan = color(0, 255, 255)
    -
    - -

    Defines a cyan color.

    - -

    Definition at line 430 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_gray

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_gray = color(128, 128, 128)
    -
    - -

    Defines a gray color.

    - -

    Definition at line 436 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_green

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_green = color(0, 128, 0)
    -
    - -

    Defines a green color.

    - -

    Definition at line 442 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_lime

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_lime = color(0, 255, 0)
    -
    - -

    Defines a lime color.

    - -

    Definition at line 424 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_magenta

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_magenta = color(255, 0, 255)
    -
    - -

    Defines a magenta color.

    - -

    Definition at line 432 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_maroon

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_maroon = color(128, 0, 0)
    -
    - -

    Defines a maroon color.

    - -

    Definition at line 438 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_navy

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_navy = color(0, 0, 128)
    -
    - -

    Defines a navy color.

    - -

    Definition at line 448 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_olive

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_olive = color(128, 128, 0)
    -
    - -

    Defines a olive color.

    - -

    Definition at line 440 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_orange

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_orange = color(255, 165, 0)
    -
    - -

    Defines an orange color.

    - -

    Definition at line 450 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_purple

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_purple = color(128, 0, 128)
    -
    - -

    Defines a purple color.

    - -

    Definition at line 444 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_red

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_red = color(255, 0, 0)
    -
    - -

    Defines a red color.

    - -

    Definition at line 422 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_silver

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_silver = color(192, 192, 192)
    -
    - -

    Defines a silver color.

    - -

    Definition at line 434 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_teal

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_teal = color(0, 128, 128)
    -
    - -

    Defines a teal color.

    - -

    Definition at line 446 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_white

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_white = color(255, 255, 255)
    -
    - -

    Defines a white color.

    - -

    Definition at line 420 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clr_yellow

    - -
    -
    - - - - -
    type(color), parameter, public fplot_core::clr_yellow = color(255, 255, 0)
    -
    - -

    Defines a yellow color.

    - -

    Definition at line 428 of file fplot_core.f90.

    - -
    -
    - -

    ◆ color_list

    - -
    -
    - - - - - -
    - - - - -
    type(color), dimension(7), parameter fplot_core::color_list = [ color(0, int(0.447 * 255), int(0.741 * 255)), color(int(0.85 * 255), int(0.325 * 255), int(0.098 * 255)), color(int(0.929 * 255), int(0.694 * 255), int(0.125 * 255)), color(int(0.494 * 255), int(0.184 * 255), int(0.556 * 255)), color(int(0.466 * 255), int(0.674 * 255), int(0.188 * 255)), color(int(0.301 * 255), int(0.745 * 255), int(0.933 * 255)), color(int(0.635 * 255), int(0.078 * 255), int(0.184 * 255))]
    -
    -private
    -
    - -

    Definition at line 453 of file fplot_core.f90.

    - -
    -
    - -

    ◆ coordinates_cartesian

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::coordinates_cartesian = 100
    -
    - -

    Defines a Cartesian coordinate system.

    - -

    Definition at line 256 of file fplot_core.f90.

    - -
    -
    - -

    ◆ coordinates_cylindrical

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::coordinates_cylindrical = 102
    -
    - -

    Defines a cylindrical coordinate system.

    - -

    Definition at line 260 of file fplot_core.f90.

    - -
    -
    - -

    ◆ coordinates_spherical

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::coordinates_spherical = 101
    -
    - -

    Defines a spherical coordinate system.

    - -

    Definition at line 258 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_default_font_size

    - -
    -
    - - - - - -
    - - - - -
    integer(int32), parameter fplot_core::gnuplot_default_font_size = 14
    -
    -private
    -
    - -

    Defines the default font size used by text on the graph.

    - -

    Definition at line 280 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_default_fontname

    - -
    -
    - - - - - -
    - - - - -
    character(len = *), parameter fplot_core::gnuplot_default_fontname = "Calibri"
    -
    -private
    -
    - -

    Defines the default font used by text on the graph.

    - -

    Definition at line 278 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_default_window_height

    - -
    -
    - - - - - -
    - - - - -
    integer(int32), parameter fplot_core::gnuplot_default_window_height = 420
    -
    -private
    -
    - -

    The default GNUPLOT window height, in pixels.

    - -

    Definition at line 274 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_default_window_width

    - -
    -
    - - - - - -
    - - - - -
    integer(int32), parameter fplot_core::gnuplot_default_window_width = 640
    -
    -private
    -
    - -

    The default GNUPLOT window width, in pixels.

    - -

    Definition at line 272 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_max_label_length

    - -
    -
    - - - - - -
    - - - - -
    integer(int32), parameter fplot_core::gnuplot_max_label_length = 128
    -
    -private
    -
    - -

    Defines the maximum number of characters allowed in a graph label.

    - -

    Definition at line 276 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_max_path_length

    - -
    -
    - - - - - -
    - - - - -
    integer(int32), parameter fplot_core::gnuplot_max_path_length = 256
    -
    -private
    -
    - -

    Defines the maximum number of characters allowed in a file path.

    - -

    Definition at line 282 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_terminal_latex

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::gnuplot_terminal_latex = 5
    -
    - -

    Defines a LATEX terminal.

    - -

    Definition at line 170 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_terminal_png

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::gnuplot_terminal_png = 4
    -
    - -

    Defines a PNG terminal.

    - -

    Definition at line 168 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_terminal_qt

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::gnuplot_terminal_qt = 3
    -
    - -

    Defines a QT terminal.

    - -

    Definition at line 166 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_terminal_win32

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::gnuplot_terminal_win32 = 1
    -
    - -

    Defines a Win32 terminal.

    - -

    Definition at line 162 of file fplot_core.f90.

    - -
    -
    - -

    ◆ gnuplot_terminal_wxt

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::gnuplot_terminal_wxt = 2
    -
    - -

    Defines a WXT terminal.

    - -

    Definition at line 164 of file fplot_core.f90.

    - -
    -
    - -

    ◆ legend_arrange_horizontally

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::legend_arrange_horizontally = "horizontal"
    -
    - -

    Defines the legend should be arranged such that the row count is minimized.

    - -

    Definition at line 234 of file fplot_core.f90.

    - -
    -
    - -

    ◆ legend_arrange_vertically

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::legend_arrange_vertically = "vertical"
    -
    - -

    Defines the legend should be arranged such that the column count is minimized.

    - -

    Definition at line 231 of file fplot_core.f90.

    - -
    -
    - -

    ◆ legend_bottom

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::legend_bottom = "bottom"
    -
    - -

    Defines the legend should be placed at the bottom of the plot.

    - -

    Definition at line 228 of file fplot_core.f90.

    - -
    -
    - -

    ◆ legend_center

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::legend_center = "center"
    -
    - -

    Defines the legend should be centered on the plot.

    - -

    Definition at line 222 of file fplot_core.f90.

    - -
    -
    - -

    ◆ legend_left

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::legend_left = "left"
    -
    - -

    Defines the legend should be placed at the left of the plot.

    - -

    Definition at line 224 of file fplot_core.f90.

    - -
    -
    - -

    ◆ legend_right

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::legend_right = "right"
    -
    - -

    Defines the legend should be placed at the right of the plot.

    - -

    Definition at line 226 of file fplot_core.f90.

    - -
    -
    - -

    ◆ legend_top

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::legend_top = "top"
    -
    - -

    Defines the legend should be placed at the top of the plot.

    - -

    Definition at line 220 of file fplot_core.f90.

    - -
    -
    - -

    ◆ line_dash_dot_dot

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::line_dash_dot_dot = 5
    -
    - -

    Defines a dash-dot-dotted line.

    - -

    Definition at line 214 of file fplot_core.f90.

    - -
    -
    - -

    ◆ line_dash_dotted

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::line_dash_dotted = 4
    -
    - -

    Defines a dash-dotted line.

    - -

    Definition at line 212 of file fplot_core.f90.

    - -
    -
    - -

    ◆ line_dashed

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::line_dashed = 2
    -
    - -

    Defines a dashed line.

    - -

    Definition at line 208 of file fplot_core.f90.

    - -
    -
    - -

    ◆ line_dotted

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::line_dotted = 3
    -
    - -

    Defines a dotted line.

    - -

    Definition at line 210 of file fplot_core.f90.

    - -
    -
    - -

    ◆ line_solid

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::line_solid = 1
    -
    - -

    Defines a solid line.

    - -

    Definition at line 206 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_asterisk

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_asterisk = 3
    -
    - -

    Defines an * data point marker.

    - -

    Definition at line 180 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_empty_circle

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_empty_circle = 6
    -
    - -

    Defines an empty circle-shaped data point marker.

    - -

    Definition at line 186 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_empty_nabla

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_empty_nabla = 10
    -
    - -

    Defines an empty nabla-shaped data point marker.

    - -

    Definition at line 194 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_empty_rhombus

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_empty_rhombus = 12
    -
    - -

    Defines an empty rhombus-shaped data point marker.

    - -

    Definition at line 198 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_empty_square

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_empty_square = 4
    -
    - -

    Defines an empty square-shaped data point marker.

    - -

    Definition at line 182 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_empty_triangle

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_empty_triangle = 8
    -
    - -

    Defines an empty triangle-shaped data point marker.

    - -

    Definition at line 190 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_filled_circle

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_filled_circle = 7
    -
    - -

    Defines an filled circle-shaped data point marker.

    - -

    Definition at line 188 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_filled_nabla

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_filled_nabla = 11
    -
    - -

    Defines an filled nabla-shaped data point marker.

    - -

    Definition at line 196 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_filled_rhombus

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_filled_rhombus = 13
    -
    - -

    Defines an filled rhombus-shaped data point marker.

    - -

    Definition at line 200 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_filled_square

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_filled_square = 5
    -
    - -

    Defines an filled square-shaped data point marker.

    - -

    Definition at line 184 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_filled_triangle

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_filled_triangle = 9
    -
    - -

    Defines an filled triangle-shaped data point marker.

    - -

    Definition at line 192 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_plus

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_plus = 1
    -
    - -

    Defines a + data point marker.

    - -

    Definition at line 176 of file fplot_core.f90.

    - -
    -
    - -

    ◆ marker_x

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::marker_x = 2
    -
    - -

    Defines an x data point marker.

    - -

    Definition at line 178 of file fplot_core.f90.

    - -
    -
    - -

    ◆ plot_array_size_mismatch_error

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::plot_array_size_mismatch_error = 1003
    -
    - -

    Occurs if there is an array size mismatch error.

    - -

    Definition at line 154 of file fplot_core.f90.

    - -
    -
    - -

    ◆ plot_gnuplot_file_error

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::plot_gnuplot_file_error = 1004
    -
    - -

    Occurs if there is a GNUPLOT file error.

    - -

    Definition at line 156 of file fplot_core.f90.

    - -
    -
    - -

    ◆ plot_invalid_input_error

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::plot_invalid_input_error = 1001
    -
    - -

    Occurs if an invalid input is provided.

    - -

    Definition at line 150 of file fplot_core.f90.

    - -
    -
    - -

    ◆ plot_invalid_operation_error

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::plot_invalid_operation_error = 1002
    -
    - -

    Occurs if an attempt is made to perform an invalid operation.

    - -

    Definition at line 152 of file fplot_core.f90.

    - -
    -
    - -

    ◆ plot_out_of_memory_error

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::plot_out_of_memory_error = 1000
    -
    - -

    Occurs if there is insufficient memory available for the requested operation.

    - -

    Definition at line 148 of file fplot_core.f90.

    - -
    -
    - -

    ◆ plotdata_max_name_length

    - -
    -
    - - - - -
    integer(int32), parameter, public fplot_core::plotdata_max_name_length = 128
    -
    - -

    Defines the maximum number of characters allowed in a graph label.

    - -

    Definition at line 266 of file fplot_core.f90.

    - -
    -
    - -

    ◆ polar_theta_bottom

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::polar_theta_bottom = "bottom"
    -
    - -

    States that theta should start at the bottom of the plot.

    - -

    Definition at line 244 of file fplot_core.f90.

    - -
    -
    - -

    ◆ polar_theta_ccw

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::polar_theta_ccw = "ccw"
    -
    - -

    States that theta should proceed in a counter-clockwise direction.

    - -

    Definition at line 248 of file fplot_core.f90.

    - -
    -
    - -

    ◆ polar_theta_cw

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::polar_theta_cw = "cw"
    -
    - -

    States that theta should proceed in a clockwise direction.

    - -

    Definition at line 250 of file fplot_core.f90.

    - -
    -
    - -

    ◆ polar_theta_left

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::polar_theta_left = "left"
    -
    - -

    States that theta should start at the left of the plot.

    - -

    Definition at line 246 of file fplot_core.f90.

    - -
    -
    - -

    ◆ polar_theta_right

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::polar_theta_right = "right"
    -
    - -

    States that theta should start at the right of the plot.

    - -

    Definition at line 242 of file fplot_core.f90.

    - -
    -
    - -

    ◆ polar_theta_top

    - -
    -
    - - - - -
    character(len = *), parameter, public fplot_core::polar_theta_top = "top"
    -
    - -

    States that theta should start at the top of the plot.

    - -

    Definition at line 240 of file fplot_core.f90.

    - -
    -
    -
    -
    - - - - diff --git a/docs/html/namespacefplot__core.js b/docs/html/namespacefplot__core.js deleted file mode 100644 index 464d019..0000000 --- a/docs/html/namespacefplot__core.js +++ /dev/null @@ -1,138 +0,0 @@ -var namespacefplot__core = -[ - [ "assignment(=)", "interfacefplot__core_1_1assignment_07_0a_08.html", null ], - [ "cm_get_string_result", "interfacefplot__core_1_1cm__get__string__result.html", null ], - [ "color", "structfplot__core_1_1color.html", "structfplot__core_1_1color" ], - [ "colormap", "structfplot__core_1_1colormap.html", "structfplot__core_1_1colormap" ], - [ "cool_colormap", "structfplot__core_1_1cool__colormap.html", "structfplot__core_1_1cool__colormap" ], - [ "custom_colormap", "structfplot__core_1_1custom__colormap.html", "structfplot__core_1_1custom__colormap" ], - [ "delaunay_tri_2d", "structfplot__core_1_1delaunay__tri__2d.html", "structfplot__core_1_1delaunay__tri__2d" ], - [ "delaunay_tri_surface", "structfplot__core_1_1delaunay__tri__surface.html", "structfplot__core_1_1delaunay__tri__surface" ], - [ "earth_colormap", "structfplot__core_1_1earth__colormap.html", "structfplot__core_1_1earth__colormap" ], - [ "filled_plot_data", "structfplot__core_1_1filled__plot__data.html", "structfplot__core_1_1filled__plot__data" ], - [ "get_string_result", "interfacefplot__core_1_1get__string__result.html", null ], - [ "grey_colormap", "structfplot__core_1_1grey__colormap.html", "structfplot__core_1_1grey__colormap" ], - [ "hot_colormap", "structfplot__core_1_1hot__colormap.html", "structfplot__core_1_1hot__colormap" ], - [ "latex_terminal", "structfplot__core_1_1latex__terminal.html", "structfplot__core_1_1latex__terminal" ], - [ "legend", "structfplot__core_1_1legend.html", "structfplot__core_1_1legend" ], - [ "multiplot", "structfplot__core_1_1multiplot.html", "structfplot__core_1_1multiplot" ], - [ "operator(/=)", "interfacefplot__core_1_1operator_07_2_0a_08.html", null ], - [ "operator(==)", "interfacefplot__core_1_1operator_07_0a_0a_08.html", null ], - [ "pa_get_string_result", "interfacefplot__core_1_1pa__get__string__result.html", null ], - [ "parula_colormap", "structfplot__core_1_1parula__colormap.html", "structfplot__core_1_1parula__colormap" ], - [ "pd_get_string_result", "interfacefplot__core_1_1pd__get__string__result.html", null ], - [ "plot", "structfplot__core_1_1plot.html", "structfplot__core_1_1plot" ], - [ "plot_2d", "structfplot__core_1_1plot__2d.html", "structfplot__core_1_1plot__2d" ], - [ "plot_3d", "structfplot__core_1_1plot__3d.html", "structfplot__core_1_1plot__3d" ], - [ "plot_arrow", "structfplot__core_1_1plot__arrow.html", "structfplot__core_1_1plot__arrow" ], - [ "plot_axis", "structfplot__core_1_1plot__axis.html", "structfplot__core_1_1plot__axis" ], - [ "plot_bar", "structfplot__core_1_1plot__bar.html", "structfplot__core_1_1plot__bar" ], - [ "plot_data", "structfplot__core_1_1plot__data.html", "structfplot__core_1_1plot__data" ], - [ "plot_data_2d", "structfplot__core_1_1plot__data__2d.html", "structfplot__core_1_1plot__data__2d" ], - [ "plot_data_3d", "structfplot__core_1_1plot__data__3d.html", "structfplot__core_1_1plot__data__3d" ], - [ "plot_data_bar", "structfplot__core_1_1plot__data__bar.html", "structfplot__core_1_1plot__data__bar" ], - [ "plot_data_colored", "structfplot__core_1_1plot__data__colored.html", "structfplot__core_1_1plot__data__colored" ], - [ "plot_data_error_bars", "structfplot__core_1_1plot__data__error__bars.html", "structfplot__core_1_1plot__data__error__bars" ], - [ "plot_data_histogram", "structfplot__core_1_1plot__data__histogram.html", "structfplot__core_1_1plot__data__histogram" ], - [ "plot_data_tri_2d", "structfplot__core_1_1plot__data__tri__2d.html", "structfplot__core_1_1plot__data__tri__2d" ], - [ "plot_label", "structfplot__core_1_1plot__label.html", "structfplot__core_1_1plot__label" ], - [ "plot_object", "structfplot__core_1_1plot__object.html", "structfplot__core_1_1plot__object" ], - [ "plot_polar", "structfplot__core_1_1plot__polar.html", "structfplot__core_1_1plot__polar" ], - [ "png_terminal", "structfplot__core_1_1png__terminal.html", "structfplot__core_1_1png__terminal" ], - [ "qt_terminal", "structfplot__core_1_1qt__terminal.html", "structfplot__core_1_1qt__terminal" ], - [ "rainbow_colormap", "structfplot__core_1_1rainbow__colormap.html", "structfplot__core_1_1rainbow__colormap" ], - [ "scatter_plot_data", "structfplot__core_1_1scatter__plot__data.html", "structfplot__core_1_1scatter__plot__data" ], - [ "simplify_polyline", "interfacefplot__core_1_1simplify__polyline.html", null ], - [ "spd_get_int_value", "interfacefplot__core_1_1spd__get__int__value.html", null ], - [ "spd_get_string_result", "interfacefplot__core_1_1spd__get__string__result.html", null ], - [ "spd_get_value", "interfacefplot__core_1_1spd__get__value.html", null ], - [ "spd_set_value", "interfacefplot__core_1_1spd__set__value.html", null ], - [ "surface_plot", "structfplot__core_1_1surface__plot.html", "structfplot__core_1_1surface__plot" ], - [ "surface_plot_data", "structfplot__core_1_1surface__plot__data.html", "structfplot__core_1_1surface__plot__data" ], - [ "term_get_string_result", "interfacefplot__core_1_1term__get__string__result.html", null ], - [ "terminal", "structfplot__core_1_1terminal.html", "structfplot__core_1_1terminal" ], - [ "tri_surface_plot_data", "structfplot__core_1_1tri__surface__plot__data.html", "structfplot__core_1_1tri__surface__plot__data" ], - [ "vector_field_plot_data", "structfplot__core_1_1vector__field__plot__data.html", "structfplot__core_1_1vector__field__plot__data" ], - [ "windows_terminal", "structfplot__core_1_1windows__terminal.html", "structfplot__core_1_1windows__terminal" ], - [ "wxt_terminal", "structfplot__core_1_1wxt__terminal.html", "structfplot__core_1_1wxt__terminal" ], - [ "x_axis", "structfplot__core_1_1x__axis.html", "structfplot__core_1_1x__axis" ], - [ "y2_axis", "structfplot__core_1_1y2__axis.html", "structfplot__core_1_1y2__axis" ], - [ "y_axis", "structfplot__core_1_1y__axis.html", "structfplot__core_1_1y__axis" ], - [ "z_axis", "structfplot__core_1_1z__axis.html", "structfplot__core_1_1z__axis" ], - [ "arrow_backhead", "namespacefplot__core.html#aec186fc30c149b713c7acbbae501b953", null ], - [ "arrow_empty", "namespacefplot__core.html#acf849bac7dab0385a49577f39cd17975", null ], - [ "arrow_filled", "namespacefplot__core.html#a77694d28a29b78d1d4f43f2f813d81a9", null ], - [ "arrow_head", "namespacefplot__core.html#ae45226bcbf29c2c1d266891d9492b920", null ], - [ "arrow_heads", "namespacefplot__core.html#a9b29a68286be7fc5791e4b7baf472828", null ], - [ "arrow_no_border", "namespacefplot__core.html#a3cb539f373d8c9b192ffba3622bcf7f2", null ], - [ "arrow_no_fill", "namespacefplot__core.html#a466c7931f298261b528697ef344a4e87", null ], - [ "arrow_no_head", "namespacefplot__core.html#ab658b8b914c0cc925c93144eef215a03", null ], - [ "clr_black", "namespacefplot__core.html#a3f8775edb06de2a90c24009a67ef4f96", null ], - [ "clr_blue", "namespacefplot__core.html#ae9f20ca4d21fdf9ba84f3b363f3e7d20", null ], - [ "clr_cyan", "namespacefplot__core.html#a700047d632ac642f6a949e44451bbc80", null ], - [ "clr_gray", "namespacefplot__core.html#a828573f8099a6e695b05bb0678289f59", null ], - [ "clr_green", "namespacefplot__core.html#a0bd6481a613d00bfb7f92d7b906476dd", null ], - [ "clr_lime", "namespacefplot__core.html#a3f2351d27904192434e3ef78155e51e0", null ], - [ "clr_magenta", "namespacefplot__core.html#a5100f36d74219c9ddc115d9b38d213c1", null ], - [ "clr_maroon", "namespacefplot__core.html#ab68541e171cd4c283eeec74e5165f760", null ], - [ "clr_navy", "namespacefplot__core.html#adb6d3eb3275e9c564773cae821a1c4d3", null ], - [ "clr_olive", "namespacefplot__core.html#a7661753bfbb9a5e7ef11a79c279a59e2", null ], - [ "clr_orange", "namespacefplot__core.html#af0a79b640e25da7a7897ff87e2701f86", null ], - [ "clr_purple", "namespacefplot__core.html#aa9b8d3f8e41f9a35e05e57abe3e5baf9", null ], - [ "clr_red", "namespacefplot__core.html#a33f5d636354eb4187ba86154037e74e7", null ], - [ "clr_silver", "namespacefplot__core.html#a662574b11028022eac8158f9fc846ded", null ], - [ "clr_teal", "namespacefplot__core.html#aa30407b5d837e2e2c191d99eb115c42b", null ], - [ "clr_white", "namespacefplot__core.html#a614ecb87618492f80d7ff4ba4324926b", null ], - [ "clr_yellow", "namespacefplot__core.html#a061a6ee4fd7602c096fd5016100ca378", null ], - [ "coordinates_cartesian", "namespacefplot__core.html#a383aba6e97a1e427fcf4d2947c7687d3", null ], - [ "coordinates_cylindrical", "namespacefplot__core.html#a31baa8924c3ed9770c90b1ff8656da54", null ], - [ "coordinates_spherical", "namespacefplot__core.html#af20b219d77cbb2399a33f3981aa720bd", null ], - [ "gnuplot_default_font_size", "namespacefplot__core.html#af51438c2c528d43662a1456d4f9fbb33", null ], - [ "gnuplot_default_fontname", "namespacefplot__core.html#a41bb6a9ffc3ebb502d54af9a7ce540e7", null ], - [ "gnuplot_default_window_height", "namespacefplot__core.html#a6210b9335ccb79ff288de84dd741f0e0", null ], - [ "gnuplot_default_window_width", "namespacefplot__core.html#a45b6c532e70244ebf23ff21eb596223b", null ], - [ "gnuplot_max_label_length", "namespacefplot__core.html#a7e9ac1526f3f84a70eb10c98aff73610", null ], - [ "gnuplot_max_path_length", "namespacefplot__core.html#a40ff0463a668b977d2fab03d3d8a6dde", null ], - [ "gnuplot_terminal_latex", "namespacefplot__core.html#adadfa5448d65da7362e445ee1fe61b10", null ], - [ "gnuplot_terminal_png", "namespacefplot__core.html#af1ace6143d83970cbfe69d7289c427d9", null ], - [ "gnuplot_terminal_qt", "namespacefplot__core.html#a512870ac9b979c4b0ea2804fbbb02a7d", null ], - [ "gnuplot_terminal_win32", "namespacefplot__core.html#acf7693c9998a266f3cf50510b2cc06e9", null ], - [ "gnuplot_terminal_wxt", "namespacefplot__core.html#a127138d0cab0e51e9c5f3fdcfdf033ac", null ], - [ "legend_arrange_horizontally", "namespacefplot__core.html#aec8d0376074fdd025c81e810bc4ffc42", null ], - [ "legend_arrange_vertically", "namespacefplot__core.html#aaf0ef9b39969cd446f0fbb9b53dc6615", null ], - [ "legend_bottom", "namespacefplot__core.html#afaa74509b5150505854f6f411109dfdb", null ], - [ "legend_center", "namespacefplot__core.html#a0ec74b411859c62e7bf0c1df535d39a5", null ], - [ "legend_left", "namespacefplot__core.html#a63d667dd9f14cc6ec61c999dd5dda272", null ], - [ "legend_right", "namespacefplot__core.html#a99373c8db502d4106c9597f3303b6fa9", null ], - [ "legend_top", "namespacefplot__core.html#aeddce321c79b9d2e69356b06ba656c88", null ], - [ "line_dash_dot_dot", "namespacefplot__core.html#ad6f904d0b43c5063d0f6b41d90abdbea", null ], - [ "line_dash_dotted", "namespacefplot__core.html#a18af0338b6f5f050d826afcf78918bc2", null ], - [ "line_dashed", "namespacefplot__core.html#ae9305c0a47c3fb21e45154a0b9457353", null ], - [ "line_dotted", "namespacefplot__core.html#ab81a32face043abe51b8740e56c816b2", null ], - [ "line_solid", "namespacefplot__core.html#ac41508e74ce45d09f835bd676ea7d3d6", null ], - [ "marker_asterisk", "namespacefplot__core.html#ad201ee04e5b4c9dacac36626e9db5d17", null ], - [ "marker_empty_circle", "namespacefplot__core.html#a03ed7e9b32fd8b4242e3c00ac9f1dd90", null ], - [ "marker_empty_nabla", "namespacefplot__core.html#a1a127e0b722b34196914625744f531fb", null ], - [ "marker_empty_rhombus", "namespacefplot__core.html#a130b91ed2576d346f9cfa882fce3a370", null ], - [ "marker_empty_square", "namespacefplot__core.html#a1847a8539a108f2cc75250a0f6d18fc5", null ], - [ "marker_empty_triangle", "namespacefplot__core.html#aa8ce197691d6e257ca34c826287661ea", null ], - [ "marker_filled_circle", "namespacefplot__core.html#a958ef8c01819437c1bf72976fdf0408c", null ], - [ "marker_filled_nabla", "namespacefplot__core.html#a3206bef63b75d34ff4ddd604d347272a", null ], - [ "marker_filled_rhombus", "namespacefplot__core.html#a73e3a13a2500d31fe24f6a4e4e6abbe6", null ], - [ "marker_filled_square", "namespacefplot__core.html#a925e2ca369cd0c7794c38d6f2c0ae3fc", null ], - [ "marker_filled_triangle", "namespacefplot__core.html#aee19422210a01b45b0a946072071aa89", null ], - [ "marker_plus", "namespacefplot__core.html#a1c6bffe3a206bcc5400d7e339f482779", null ], - [ "marker_x", "namespacefplot__core.html#aa8584a251e760fd4545d03c0a4506fa6", null ], - [ "plot_array_size_mismatch_error", "namespacefplot__core.html#a2747b79ccd539b6a6b0edf9bee970ece", null ], - [ "plot_gnuplot_file_error", "namespacefplot__core.html#a964aa864e3984d866c12f75323bb6dc1", null ], - [ "plot_invalid_input_error", "namespacefplot__core.html#ac53894e99cce3be3c2f7c8ef7e579e98", null ], - [ "plot_invalid_operation_error", "namespacefplot__core.html#adcbe99e541fc04356d322d562e5c67f0", null ], - [ "plot_out_of_memory_error", "namespacefplot__core.html#a002195f1f56bc9edc1ec7dd51c3090d8", null ], - [ "plotdata_max_name_length", "namespacefplot__core.html#acfa29ac62a50b61ea009b20a898d45e5", null ], - [ "polar_theta_bottom", "namespacefplot__core.html#af3ed8d21802d919dd891a4ea8af0ec91", null ], - [ "polar_theta_ccw", "namespacefplot__core.html#ae803ea1ff95802b0295be3661e11ce98", null ], - [ "polar_theta_cw", "namespacefplot__core.html#aff8546dbedb11e1fdf11e0ccdc8d6df0", null ], - [ "polar_theta_left", "namespacefplot__core.html#a783a98c4f406054602d757133e496c19", null ], - [ "polar_theta_right", "namespacefplot__core.html#ab582c30f182b32ad10fb85a2cdee5a2b", null ], - [ "polar_theta_top", "namespacefplot__core.html#a4c5d751fa6cfbf02b759a3858d0858f4", null ] -]; \ No newline at end of file diff --git a/docs/html/namespacefplot__errors.html b/docs/html/namespacefplot__errors.html deleted file mode 100644 index 6ea8512..0000000 --- a/docs/html/namespacefplot__errors.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -fplot: fplot_errors Module Reference - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.6.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    fplot_errors Module Reference
    -
    -
    - -

    plot_errors -More...

    - - - - - - - - - - - - - - - - - -

    -Variables

    -integer(int32), parameter plot_out_of_memory_error = 1000
     Occurs if there is insufficient memory available for the requested operation.
     
    -integer(int32), parameter plot_invalid_input_error = 1001
     Occurs if an invalid input is provided.
     
    -integer(int32), parameter plot_invalid_operation_error = 1002
     Occurs if an attempt is made to perform an invalid operation.
     
    -integer(int32), parameter plot_array_size_mismatch_error = 1003
     Occurs if there is an array size mismatch error.
     
    -integer(int32), parameter plot_gnuplot_file_error = 1004
     Occurs if there is a GNUPLOT file error.
     
    -

    Detailed Description

    -

    plot_errors

    -
    Purpose
    Provides error codes for plot routines.
    -
    -
    - - - - diff --git a/docs/html/namespacefplot__string__builder.html b/docs/html/namespacefplot__string__builder.html deleted file mode 100644 index 8784036..0000000 --- a/docs/html/namespacefplot__string__builder.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -fplot: fplot_string_builder Module Reference - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.6.2 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_string_builder Module Reference
    -
    -
    - -

    A module specific to FPLOT string building needs. -More...

    - - - - - - - - -

    -Data Types

    type  string_builder
     A mechanism for constructing strings in a piecewise fashion in an efficient manner. More...
     
    interface  to_string
     Converts an item to a string. More...
     
    -

    Detailed Description

    -

    A module specific to FPLOT string building needs.

    -
    -
    - - - - diff --git a/docs/html/namespacefplot__string__builder.js b/docs/html/namespacefplot__string__builder.js deleted file mode 100644 index 9916fa9..0000000 --- a/docs/html/namespacefplot__string__builder.js +++ /dev/null @@ -1,5 +0,0 @@ -var namespacefplot__string__builder = -[ - [ "string_builder", "structfplot__string__builder_1_1string__builder.html", "structfplot__string__builder_1_1string__builder" ], - [ "to_string", "interfacefplot__string__builder_1_1to__string.html", null ] -]; \ No newline at end of file diff --git a/docs/html/namespacemembers.html b/docs/html/namespacemembers.html deleted file mode 100644 index bad1849..0000000 --- a/docs/html/namespacemembers.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - a -

    - - -

    - c -

    - - -

    - g -

    - - -

    - l -

    - - -

    - m -

    - - -

    - p -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_dup.js b/docs/html/namespacemembers_dup.js deleted file mode 100644 index 71f11ed..0000000 --- a/docs/html/namespacemembers_dup.js +++ /dev/null @@ -1,16 +0,0 @@ -var namespacemembers_dup = -[ - [ "c", "namespacemembers.html", null ], - [ "g", "namespacemembers_g.html", null ], - [ "h", "namespacemembers_h.html", null ], - [ "l", "namespacemembers_l.html", null ], - [ "m", "namespacemembers_m.html", null ], - [ "p", "namespacemembers_p.html", null ], - [ "q", "namespacemembers_q.html", null ], - [ "r", "namespacemembers_r.html", null ], - [ "s", "namespacemembers_s.html", null ], - [ "w", "namespacemembers_w.html", null ], - [ "x", "namespacemembers_x.html", null ], - [ "y", "namespacemembers_y.html", null ], - [ "z", "namespacemembers_z.html", null ] -]; \ No newline at end of file diff --git a/docs/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html deleted file mode 100644 index 93bc41c..0000000 --- a/docs/html/namespacemembers_func.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    - - - - diff --git a/docs/html/namespacemembers_g.html b/docs/html/namespacemembers_g.html deleted file mode 100644 index 6c93e4c..0000000 --- a/docs/html/namespacemembers_g.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - g -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_h.html b/docs/html/namespacemembers_h.html deleted file mode 100644 index 604dd78..0000000 --- a/docs/html/namespacemembers_h.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - h -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_l.html b/docs/html/namespacemembers_l.html deleted file mode 100644 index 86e52ef..0000000 --- a/docs/html/namespacemembers_l.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - l -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_m.html b/docs/html/namespacemembers_m.html deleted file mode 100644 index d3185b6..0000000 --- a/docs/html/namespacemembers_m.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - m -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_p.html b/docs/html/namespacemembers_p.html deleted file mode 100644 index 68f2b0a..0000000 --- a/docs/html/namespacemembers_p.html +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - p -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_q.html b/docs/html/namespacemembers_q.html deleted file mode 100644 index 3762012..0000000 --- a/docs/html/namespacemembers_q.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - q -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_r.html b/docs/html/namespacemembers_r.html deleted file mode 100644 index 42cda89..0000000 --- a/docs/html/namespacemembers_r.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - r -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_s.html b/docs/html/namespacemembers_s.html deleted file mode 100644 index 7b46dbd..0000000 --- a/docs/html/namespacemembers_s.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - s -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_vars.html b/docs/html/namespacemembers_vars.html deleted file mode 100644 index 3acbcf1..0000000 --- a/docs/html/namespacemembers_vars.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    Here is a list of all documented namespace variables with links to the namespaces they belong to:
    - -

    - a -

    - - -

    - c -

    - - -

    - g -

    - - -

    - l -

    - - -

    - m -

    - - -

    - p -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_w.html b/docs/html/namespacemembers_w.html deleted file mode 100644 index 7cdba5f..0000000 --- a/docs/html/namespacemembers_w.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - w -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_x.html b/docs/html/namespacemembers_x.html deleted file mode 100644 index 5c27c8a..0000000 --- a/docs/html/namespacemembers_x.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - x -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_y.html b/docs/html/namespacemembers_y.html deleted file mode 100644 index 443cc23..0000000 --- a/docs/html/namespacemembers_y.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - y -

    -
    -
    - - - - diff --git a/docs/html/namespacemembers_z.html b/docs/html/namespacemembers_z.html deleted file mode 100644 index b6ccc29..0000000 --- a/docs/html/namespacemembers_z.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -fplot: Module Members - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.1.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all documented module members with links to the modules they belong to:
    - -

    - z -

    -
    -
    - - - - diff --git a/docs/html/namespaces.html b/docs/html/namespaces.html deleted file mode 100644 index 2a0b373..0000000 --- a/docs/html/namespaces.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - -fplot: Modules List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    Modules List
    -
    -
    -
    Here is a list of all documented modules with brief descriptions:
    -
    [detail level 12]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     Mfplot_corefplot_core
     Cassignment(=)
     Ccm_get_string_resultRetrieves a string from a colormap
     CcolorConstructs a linearly spaced array
     CcolormapA colormap object for a surface plot
     Ccool_colormapDefines a colormap consisting of "cool" colors
     Ccustom_colormapDefines a custom colormap that utilizes the FORCOLORMAP library to provide the map
     Cdelaunay_tri_2dProvides a container for a 2D Delaunay triangulation
     Cdelaunay_tri_surfaceProvides a type describing a triangulated surface
     Cearth_colormapDefines an earthy-colored colormap
     Cfilled_plot_dataDefines a two-dimensional filled plot data set
     Cget_string_resultRetrieves a string from a plot_object
     Cgrey_colormapDefines a grey-scaled colormap
     Chot_colormapDefines a colormap consisting of "hot" colors
     Clatex_terminalDefines a GNUPLOT LATEX terminal object
     ClegendDefines a legend object
     CmultiplotDefines a multi-plot layout
     Coperator(/=)
     Coperator(==)
     Cpa_get_string_resultRetrieves a string from a plot_axis
     Cparula_colormapDefines a colormap equivalent to the MATLAB parula colormap
     Cpd_get_string_resultRetrieves a string from a plot_data object
     CplotDefines the basic GNUPLOT plot
     Cplot_2dA plot object defining a 2D plot
     Cplot_3dA plot object defining a 3D plot
     Cplot_arrowDefines an arrow to be used on by a plot object
     Cplot_axisDescribes a single plot axis
     Cplot_barDefines a 2D plot tailored towards bar plotting
     Cplot_dataProvides a container for plot data
     Cplot_data_2dDefines a two-dimensional plot data set
     Cplot_data_3dDefines a three-dimensional plot data set
     Cplot_data_barDefines a data set tailored to bar charts
     Cplot_data_coloredDefines a plot_data based object best represented by a color
     Cplot_data_error_barsDefines a 2D error bar based data set
     Cplot_data_histogramA container for plotting data in the form of a histogram
     Cplot_data_tri_2dDefines a 2D triangulated data set
     Cplot_labelDefines a label object for a plot
     Cplot_objectThe base type for a GNUPLOT object
     Cplot_polarDefines a 2D polar plot
     Cpng_terminalDefines a GNUPLOT PNG terminal object
     Cqt_terminalDefines a GNUPLOT QT terminal object
     Crainbow_colormapDefines a rainbow colormap
     Cscatter_plot_dataA plot_data object for describing scatter plot data sets
     Csimplify_polylineSimplifies a 2D or 3D polyline by removing points too close to discern given a specified tolerance
     Cspd_get_int_valueRetrieves an integer value from a scatter_plot_data object
     Cspd_get_string_resultRetrieves a string from a scatter_plot_data object
     Cspd_get_valueRetrieves a numeric value from a scatter_plot_data object
     Cspd_set_valueSets a numeric value into a scatter_plot_data object
     Csurface_plotA plot object defining a 3D surface plot
     Csurface_plot_dataProvides a three-dimensional surface plot data set
     Cterm_get_string_resultRetrieves a string from a terminal
     CterminalDefines a GNUPLOT terminal object
     Ctri_surface_plot_dataProvides a three-dimensional surface plot data set constructed of triangulated points
     Cvector_field_plot_dataDefines a two-dimensional vector-field plot data set
     Cwindows_terminalDefines a GNUPLOT Win32 terminal object
     Cwxt_terminalDefines a GNUPLOT WXT terminal object
     Cx_axisAn x-axis object
     Cy2_axisA secondary y-axis object
     Cy_axisA y-axis object
     Cz_axisA z-axis object
    -
    -
    -
    - - - - diff --git a/docs/html/namespaces.js b/docs/html/namespaces.js deleted file mode 100644 index ffcec86..0000000 --- a/docs/html/namespaces.js +++ /dev/null @@ -1,5 +0,0 @@ -var namespaces = -[ - [ "fplot_core", "namespacefplot__core.html", null ], - [ "fplot_errors", "namespacefplot__errors.html", null ] -]; \ No newline at end of file diff --git a/docs/html/namespaces_dup.js b/docs/html/namespaces_dup.js deleted file mode 100644 index 492d8f8..0000000 --- a/docs/html/namespaces_dup.js +++ /dev/null @@ -1,4 +0,0 @@ -var namespaces_dup = -[ - [ "fplot_core", "namespacefplot__core.html", "namespacefplot__core" ] -]; \ No newline at end of file diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png deleted file mode 100644 index 72a58a529ed3a9ed6aa0c51a79cf207e026deee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U diff --git a/docs/html/nav_fd.png b/docs/html/nav_fd.png deleted file mode 100644 index 032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png deleted file mode 100644 index 2093a237a94f6c83e19ec6e5fd42f7ddabdafa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} diff --git a/docs/html/navtree.css b/docs/html/navtree.css deleted file mode 100644 index 69211d4..0000000 --- a/docs/html/navtree.css +++ /dev/null @@ -1,149 +0,0 @@ -#nav-tree .children_ul { - margin:0; - padding:4px; -} - -#nav-tree ul { - list-style:none outside none; - margin:0px; - padding:0px; -} - -#nav-tree li { - white-space:nowrap; - margin:0px; - padding:0px; -} - -#nav-tree .plus { - margin:0px; -} - -#nav-tree .selected { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: var(--nav-text-active-color); - text-shadow: var(--nav-text-active-shadow); -} - -#nav-tree .selected .arrow { - color: var(--nav-arrow-selected-color); - text-shadow: none; -} - -#nav-tree img { - margin:0px; - padding:0px; - border:0px; - vertical-align: middle; -} - -#nav-tree a { - text-decoration:none; - padding:0px; - margin:0px; -} - -#nav-tree .label { - margin:0px; - padding:0px; - font: 12px var(--font-family-nav); -} - -#nav-tree .label a { - padding:2px; -} - -#nav-tree .selected a { - text-decoration:none; - color:var(--nav-text-active-color); -} - -#nav-tree .children_ul { - margin:0px; - padding:0px; -} - -#nav-tree .item { - margin:0px; - padding:0px; -} - -#nav-tree { - padding: 0px 0px; - font-size:14px; - overflow:auto; -} - -#doc-content { - overflow:auto; - display:block; - padding:0px; - margin:0px; - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#side-nav { - padding:0 6px 0 0; - margin: 0px; - display:block; - position: absolute; - left: 0px; - width: $width; - overflow : hidden; -} - -.ui-resizable .ui-resizable-handle { - display:block; -} - -.ui-resizable-e { - background-image:var(--nav-splitbar-image); - background-size:100%; - background-repeat:repeat-y; - background-attachment: scroll; - cursor:ew-resize; - height:100%; - right:0; - top:0; - width:6px; -} - -.ui-resizable-handle { - display:none; - font-size:0.1px; - position:absolute; - z-index:1; -} - -#nav-tree-contents { - margin: 6px 0px 0px 0px; -} - -#nav-tree { - background-repeat:repeat-x; - background-color: var(--nav-background-color); - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#nav-sync { - position:absolute; - top:5px; - right:24px; - z-index:0; -} - -#nav-sync img { - opacity:0.3; -} - -#nav-sync img:hover { - opacity:0.9; -} - -@media print -{ - #nav-tree { display: none; } - div.ui-resizable-handle { display: none; position: relative; } -} - diff --git a/docs/html/navtree.js b/docs/html/navtree.js deleted file mode 100644 index 884b79b..0000000 --- a/docs/html/navtree.js +++ /dev/null @@ -1,482 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ - -function initNavTree(toroot,relpath) { - let navTreeSubIndices = []; - const ARROW_DOWN = '▼'; - const ARROW_RIGHT = '►'; - const NAVPATH_COOKIE_NAME = ''+'navpath'; - - const getData = function(varName) { - const i = varName.lastIndexOf('/'); - const n = i>=0 ? varName.substring(i+1) : varName; - return eval(n.replace(/-/g,'_')); - } - - const stripPath = function(uri) { - return uri.substring(uri.lastIndexOf('/')+1); - } - - const stripPath2 = function(uri) { - const i = uri.lastIndexOf('/'); - const s = uri.substring(i+1); - const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); - return m ? uri.substring(i-6) : s; - } - - const hashValue = function() { - return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); - } - - const hashUrl = function() { - return '#'+hashValue(); - } - - const pathName = function() { - return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); - } - - const storeLink = function(link) { - if (!$("#nav-sync").hasClass('sync')) { - Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); - } - } - - const deleteLink = function() { - Cookie.eraseSetting(NAVPATH_COOKIE_NAME); - } - - const cachedLink = function() { - return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); - } - - const getScript = function(scriptName,func) { - const head = document.getElementsByTagName("head")[0]; - const script = document.createElement('script'); - script.id = scriptName; - script.type = 'text/javascript'; - script.onload = func; - script.src = scriptName+'.js'; - head.appendChild(script); - } - - const createIndent = function(o,domNode,node) { - let level=-1; - let n = node; - while (n.parentNode) { level++; n=n.parentNode; } - if (node.childrenData) { - const imgNode = document.createElement("span"); - imgNode.className = 'arrow'; - imgNode.style.paddingLeft=(16*level).toString()+'px'; - imgNode.innerHTML=ARROW_RIGHT; - node.plus_img = imgNode; - node.expandToggle = document.createElement("a"); - node.expandToggle.href = "javascript:void(0)"; - node.expandToggle.onclick = function() { - if (node.expanded) { - $(node.getChildrenUL()).slideUp("fast"); - node.plus_img.innerHTML=ARROW_RIGHT; - node.expanded = false; - } else { - expandNode(o, node, false, true); - } - } - node.expandToggle.appendChild(imgNode); - domNode.appendChild(node.expandToggle); - } else { - let span = document.createElement("span"); - span.className = 'arrow'; - span.style.width = 16*(level+1)+'px'; - span.innerHTML = ' '; - domNode.appendChild(span); - } - } - - let animationInProgress = false; - - const gotoAnchor = function(anchor,aname) { - let pos, docContent = $('#doc-content'); - let ancParent = $(anchor.parent()); - if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || - ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || - ancParent.is(':header')) { - pos = ancParent.position().top; - } else if (anchor.position()) { - pos = anchor.position().top; - } - if (pos) { - const dcOffset = docContent.offset().top; - const dcHeight = docContent.height(); - const dcScrHeight = docContent[0].scrollHeight - const dcScrTop = docContent.scrollTop(); - let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); - animationInProgress = true; - docContent.animate({ - scrollTop: pos + dcScrTop - dcOffset - },Math.max(50,Math.min(500,dist)),function() { - window.location.href=aname; - animationInProgress=false; - }); - } - } - - const newNode = function(o, po, text, link, childrenData, lastNode) { - const node = { - children : [], - childrenData : childrenData, - depth : po.depth + 1, - relpath : po.relpath, - isLast : lastNode, - li : document.createElement("li"), - parentNode : po, - itemDiv : document.createElement("div"), - labelSpan : document.createElement("span"), - label : document.createTextNode(text), - expanded : false, - childrenUL : null, - getChildrenUL : function() { - if (!this.childrenUL) { - this.childrenUL = document.createElement("ul"); - this.childrenUL.className = "children_ul"; - this.childrenUL.style.display = "none"; - this.li.appendChild(node.childrenUL); - } - return node.childrenUL; - }, - }; - - node.itemDiv.className = "item"; - node.labelSpan.className = "label"; - createIndent(o,node.itemDiv,node); - node.itemDiv.appendChild(node.labelSpan); - node.li.appendChild(node.itemDiv); - - const a = document.createElement("a"); - node.labelSpan.appendChild(a); - po.getChildrenUL().appendChild(node.li); - a.appendChild(node.label); - if (link) { - let url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - link = url; - } else { - url = node.relpath+link; - } - a.className = stripPath(link.replace('#',':')); - if (link.indexOf('#')!=-1) { - const aname = '#'+link.split('#')[1]; - const srcPage = stripPath(pathName()); - const targetPage = stripPath(link.split('#')[0]); - a.href = srcPage!=targetPage ? url : aname; - a.onclick = function() { - storeLink(link); - aPPar = $(a).parent().parent(); - if (!aPPar.hasClass('selected')) { - $('.item').removeClass('selected'); - $('.item').removeAttr('id'); - aPPar.addClass('selected'); - aPPar.attr('id','selected'); - } - const anchor = $(aname); - gotoAnchor(anchor,aname); - }; - } else { - a.href = url; - a.onclick = () => storeLink(link); - } - } else if (childrenData != null) { - a.className = "nolink"; - a.href = "javascript:void(0)"; - a.onclick = node.expandToggle.onclick; - } - return node; - } - - const showRoot = function() { - const headerHeight = $("#top").height(); - const footerHeight = $("#nav-path").height(); - const windowHeight = $(window).height() - headerHeight - footerHeight; - (function() { // retry until we can scroll to the selected item - try { - const navtree=$('#nav-tree'); - navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); - } catch (err) { - setTimeout(arguments.callee, 0); - } - })(); - } - - const expandNode = function(o, node, imm, setFocus) { - if (node.childrenData && !node.expanded) { - if (typeof(node.childrenData)==='string') { - const varName = node.childrenData; - getScript(node.relpath+varName,function() { - node.childrenData = getData(varName); - expandNode(o, node, imm, setFocus); - }); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).slideDown("fast"); - node.plus_img.innerHTML = ARROW_DOWN; - node.expanded = true; - if (setFocus) { - $(node.expandToggle).focus(); - } - } - } - } - - const glowEffect = function(n,duration) { - n.addClass('glow').delay(duration).queue(function(next) { - $(this).removeClass('glow');next(); - }); - } - - const highlightAnchor = function() { - const aname = hashUrl(); - const anchor = $(aname); - if (anchor.parent().attr('class')=='memItemLeft') { - let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); - glowEffect(rows.children(),300); // member without details - } else if (anchor.parent().attr('class')=='fieldname') { - glowEffect(anchor.parent().parent(),1000); // enum value - } else if (anchor.parent().attr('class')=='fieldtype') { - glowEffect(anchor.parent().parent(),1000); // struct field - } else if (anchor.parent().is(":header")) { - glowEffect(anchor.parent(),1000); // section header - } else { - glowEffect(anchor.next(),1000); // normal member - } - gotoAnchor(anchor,aname); - } - - const selectAndHighlight = function(hash,n) { - let a; - if (hash) { - const link=stripPath(pathName())+':'+hash.substring(1); - a=$('.item a[class$="'+link+'"]'); - } - if (a && a.length) { - a.parent().parent().addClass('selected'); - a.parent().parent().attr('id','selected'); - highlightAnchor(); - } else if (n) { - $(n.itemDiv).addClass('selected'); - $(n.itemDiv).attr('id','selected'); - } - let topOffset=5; - if ($('#nav-tree-contents .item:first').hasClass('selected')) { - topOffset+=25; - } - $('#nav-sync').css('top',topOffset+'px'); - showRoot(); - } - - const showNode = function(o, node, index, hash) { - if (node && node.childrenData) { - if (typeof(node.childrenData)==='string') { - const varName = node.childrenData; - getScript(node.relpath+varName,function() { - node.childrenData = getData(varName); - showNode(o,node,index,hash); - }); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).css({'display':'block'}); - node.plus_img.innerHTML = ARROW_DOWN; - node.expanded = true; - const n = node.children[o.breadcrumbs[index]]; - if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; - } - if (hash.match(/^#l\d+$/)) { - const anchor=$('a[name='+hash.substring(1)+']'); - glowEffect(anchor.parent(),1000); // line number - hash=''; // strip line number anchors - } - const url=root+hash; - let i=-1; - while (NAVTREEINDEX[i+1]<=url) i++; - if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath) - } else { - getScript(relpath+'navtreeindex'+i,function() { - navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath); - } - }); - } - } - - const showSyncOff = function(n,relpath) { - n.html(''); - } - - const showSyncOn = function(n,relpath) { - n.html(''); - } - - const o = { - toroot : toroot, - node : { - childrenData : NAVTREE, - children : [], - childrenUL : document.createElement("ul"), - getChildrenUL : function() { return this.childrenUL }, - li : document.getElementById("nav-tree-contents"), - depth : 0, - relpath : relpath, - expanded : false, - isLast : true, - plus_img : document.createElement("span"), - }, - }; - o.node.li.appendChild(o.node.childrenUL); - o.node.plus_img.className = 'arrow'; - o.node.plus_img.innerHTML = ARROW_RIGHT; - - const navSync = $('#nav-sync'); - if (cachedLink()) { - showSyncOff(navSync,relpath); - navSync.removeClass('sync'); - } else { - showSyncOn(navSync,relpath); - } - - navSync.click(() => { - const navSync = $('#nav-sync'); - if (navSync.hasClass('sync')) { - navSync.removeClass('sync'); - showSyncOff(navSync,relpath); - storeLink(stripPath2(pathName())+hashUrl()); - } else { - navSync.addClass('sync'); - showSyncOn(navSync,relpath); - deleteLink(); - } - }); - - navTo(o,toroot,hashUrl(),relpath); - showRoot(); - - $(window).bind('hashchange', () => { - if (window.location.hash && window.location.hash.length>1) { - let a; - if ($(location).attr('hash')) { - const clslink=stripPath(pathName())+':'+hashValue(); - a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM - - - - - - - - diff --git a/docs/html/plusd.svg b/docs/html/plusd.svg deleted file mode 100644 index 0c65bfe..0000000 --- a/docs/html/plusd.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/html/polar_example_1.png b/docs/html/polar_example_1.png deleted file mode 100644 index ce4faf9e90b0b2018e520ec8d1f66fb92726bd5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31020 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 n|F2j5|9DIMfB&*>Yu6iw61R=TnQ0tzX z(2Y=KF&P5M{jkUx0tro!|Nq1PuNmQ(`%GV(o$NBAN)_kz#MzC9a%PEsYNv#A?N(9# zdY|5sUwzJD{99U%&KOm817k8;`e9q+bMFmpaUygI>A>iW6jn7HhQO)criDHom<$}P z*CHmeg+kgJQBZ%ZiKDG);bJl@f*WkSOJ$^@zpFnLW%JvGEmxm)JeGYN|NFL^ahcaG z%3igc$!as)IMa^#tu~Wa*N~2riM!YuI5D^zPx4HSOqA{g5 z{7naM1F32~@?mA6u3nv7$8uP01ia_)%9>o+qmk_kDcKv12XC!v zpJaUhePXnA-6@IgxA1yIY0R$|UE>o33F9}TRVRbMl5}yF`DTBt2Z(H}CG=z&;>KQV zcs*ZDEtn`3R=#FgERRK4+h=5U zCv4U>4QRSDzhKfuBmBv*47RUi`jzKdS^9tD2j?UH$)~$w+~BhMXS3u{#=sxMSR474 zm@Ql6!z#7raBoq)yT;AAc_QSu;ZzgNCR{C&-};1CBL77*wcy=i;UN^y6e419wU`aP zlAN7ZBxY{w*7>dc;&TTJ`A8yhoz>!}B++lk0;$wi1kSdp{e*OrWgiZmW!**>58w4( zi{D5o_E~??p3CUvP{lcn53Y@ABQTv~cMwZW%d~->CKMv%v)(!1Bki4=U>945va{Kkh~9~}I>$$P@HzZL$;?AY zkjBF3fvUQ&K$9gAJ=q^Jn3aJX|L+`0#tW&k1F=D2gw%=KaxDTf>V4z}*MHsx%R=fz zR|y3(jF#vP;~>HfhX!Tv(OIz4n=)h1kDcur4VS)C=eGDQvJSuhw_Ye)y$4k)o|K>!)sQguL_fbA0BF@HgpfA9ljQ zjR~t@V9ZJB^@tds`K%6Z8dNDcs{hAIF+Sx^rab@irYRCPn2h)8hnxzkk;ugToA^?p z=un{s?TMv7Qkew?bySg)M-p-ivP)qO-KP)y`{pXJOV0(X1;$Y&gPX%)MHfMY+!}BV z_cbDM_GrIOiC>A{L{|UzzF7ZnY?A}u?ZAC0HMN21dbhW6akS!Ii61^#8XG^b{rUZS zWm(yM0fCa@;^Mr#<-zQ5N&3>#(i)%h6F(F*YHI3&f`W*M2v#;W4h{|_MMdOORaI3} z)9=pC9K&WG>0sQI(c(#6`$jV}v#-m0(%@s&3=CN!Qt4c5Y`wpJ9j%TOGB7ZR(nf=8 z-MxEvWwN^D_0_Ar)VMtumtrtih3;6UOdDIg0lwk!S0e0+g1ySt7! zIN|r7cM6J#sHBNEHZ}S5e|o@98a`?sMyQVe;2W32SrUi*EY0UO11Y(h>WJw-JmWsp z96>&(ha1JZ)xttTcvSp--@aK~oE^`2?R{Sv%B|J=JYiOFKDXdltEQ%A=zTCUod4t* z`{>{9x4BBmhvVjHG7lf-(L}u2Kas#;NQGF(m9DA&>&AI-eR}^pyYIb&N)B#M7)v$L~(eSLX(dA5^P2OE>s2Rn?i5$?Nx!_ZYi z_+ii5LkR2}r#m|rzr`|^m6cW7O<&oe-27)sYATD$$A*{loqc_Z92nWt@QC|3L(K@G zx_*toH_OYaU%fletDE}BH}M8Pi?MFC1>ro&RW>Uhw{JdoH8suJWg#UY`Ma=?Z}^h& zyF|nI`1n1;CXI`uaI$+I?(V-PCYsI$iTDwSWJvG$KWUZ$C;wMMd>K>fip= z>l%U|vbR>!?6cj9;U#|ApDumn>cjbOS(#S;fLol0==Xn9{bg6jaWO|OJ~bBg)p6&i zs$)rxyu7@ZmzT%k`pVi`Js7K|rlz!%i|@<5NcbeNVB*J*P1vNDFJI31UY>{0`TVN3 zp8*%u(9pP}@8^11PRLD?=oib7{UkcEzdZ1Ih0tiR?*puIyzF^b(X(=9rKFA*N*|NN-m;9i!SyEK%ma!H z%lmh6v1cMVF;UQZw1`1E_!!_%xec!)- zz|Z|&P+UCy#jJOsH$mcj{|Ox(T~7N0xqGvGM#IXf!Y)?Zv#n#F^-urJ_`VJZ;5xN> z9~AVp^)<#-t`_s)g?sNU{p6t`lIm**kedqDfU6FA-m}5>;$dQb8tvy3tasfo5x(~R znT`&vsQdP4vF_53R4TCPYYc+KC`<-sV=`W=M}tE{@CXkuYaQkShQpF#fBgOX*XDOa zZ9{|COp`Z0KE7he>#LHV>FWP;>7HIq%&G&eh%5Wh9DVF$wLRR;`|N0EU|>L2_7_9Q z1esS?W|jTc@5aN!Ls+1jlT*F-DgV&iCuRZr-zo5C(!Lqo!})Oi+12CbLdl%?LUzxf zNUwIVr)L!s?&9Jie5s3*ljq5P{`>bghte%q;jwtkf0znmN0N||;?s$Xii`gq9gY9F zRwZY<0j=!^n5u3WQN=l#czwB+O#_V)LF*BG@1*iF~bh`2_ywphf% z?wWL9=4AGNgS;Z*w&`_t^l~RYF){J-wE1#xclYFQ(w+hrmtnev(_$DsJ0~ZKPU3f8 zA3Hz4Cif|73xv|GTesrk;u7CPat43&rW5xfr=x4OpAqkle9NMutf0Wd!$T!tM;+2` z%*r3=jHcU?SA4vj8U1H|{%491%P91{r&xUd3R_qf^XN>))wnjS{{S2`p=JIEJ{i55)yLT`w0hW6kGBlkLIH#;@O`$ z&UZ#a%I=jI93BR@uc)ij5%9NsY+-R{h#@bUkeHIPV7n<3(k=g;JKx&d=TEnq$CO|- z#I6q*Uw19-&AeJljiM1j$H3sB!O2LIq<3(0t1d0Y#KGa|x9la1!`5y2R+^oa6+y|@ zGct0s++Nqr#^!9R`SP<~ts|r+m5-vv!qkBluQ`lNTYOG8s&B9;>(x0wZanp<)w8p) zS%>;-Nr2l;OhIwHm~5YvlvME2&cNVzh2>EEJ;RHyWQP5;%8{+wY?D)hmC2H&jNS#S9=?+HrL_Kh5VPtakyQk~g%| zB$`%C{<)=GfuA2jso><`z{SURJ{LmwS-)QPc^Md(*~paZaDChf>NX^df4@Dq07fi2 z);hm$uo$>i_h#@zN5{h)Y1QwLI+j@rK7Y2GYYS>>YRb>g7ja!bg8#hCO2MGt#%WAB+(ar6 zNVx_LrP3WHDlB{BIoe}C%Tdtzp1pK-c9xPt9rCBoA^}s1F_B=?(9kqCG;p2DS6Yv8 z=1BL8G@tGE2IEmpO-%(#FFH-XBdGvc3V)_#cyEM5zCt6OCSlg|uB7Qi{vX8I1%N8ZPRmWd zt3ul6rs~~P{vB`{HhFc&F)==h8ulK+%)h4FBG-%=BqbtJU($TxalE^r*cE{L3k(5? z%Io~ZB?s+++?6Ywb3;*qpnHD!bQuzwV#ud4QVyL8({5t4)caJGH=xGTegIq+a2-eU zvtG9|y()yTfx!=FlHL7{$%GX`Q&xC!aF_{WYuCFL7Z$E{gx&ane~n=Us<`)k%fT$T zxB+sZA_gjAWMh*O7uN>YMv&hRfNLR1Kwf$-jE(rguDbtjcm)poLYOcx3wpf$wnuc{ ze`ja6!4tV@LgfIf>FMbuMxla{i0SB5#1?nlFTvfrsZw z1NTlW<0I0028v9jCnp}H;UgxaEb^9?mJl9Ur0!6scILaNC@4@`BB=!GTsMSW*R_j- z?8zb4r>CZxju)xGs(Dydenjm7uV2GO1!?06y$i6DR+)dn87eAxSMNu66&4kdZ0Ufp zYK|@J>^S*OQ6()b@`~D6lvCu)43R`(mjc1l_;>HFUB7Ng+dvIf>_jMa>B_eZ8bYnf zZZ!h%zP|!yhMg1gy$~Jpmm5o$4uQ-!_*BQo$45yC?;!E3N!Vmbe0)4$uY&k0s}a_x zDrH~3cmP)J@I5&`9uR-70rpf>Qd;47OA0GAHa5l~gkz(CJC zBVIu*g+zpbPyNmL;lxcE8VJfnNGn`4p(Fsieje@2&$!Ry<)973S5#CS?=3+h72@RF z1YiJlQ}IzCA(+JJ#rLF22t24p9-f}%o)m8p#^kCmiR>JN2A(~Ze;Rg{*Oi+CQg zyYLLwxvatd@Z10Hb5_L!0AkVx(Di4k2pKVPn=^e6D?H42d2SpA3lkF_ow#1%j^C78 zKd;Bpwy})NSEvd%X`g9ojy8I_*>*`MfHMLDxB?|BlB)H=SmY~|A??o^+;^a1E(vD6* z+vm*gY^BisIKHE!BO~M1YQY1lZ7@9)i3X7G&Z1g1We_J#6 zn!2CT6CRzOhP$nZpE5Huuhw)DG0KLPmmJ-?pU^AjFzXk^nEo|SEfd0fWq!WhnLh8l z?OFsv4-^JdD@(=#3X%A(Ywr{r=h#;XH00vq)c*PNd4Mez2i+DwPY%|;3e-|kQQ1#a zgtZz${WrQ|k8qHN_OJE82U-aG&3D;V>HaW?qD!7=-+7L9nml=&DH}pm z(ns1CTMkN}?d8Qeq)^>0t7A?3N|g`Q-a{BT>6(BGiD*N#`}{n>Vibh6gKCKL~=SG8iyb?BwUcIET3b+5gp`p;f&t@}RV?>-veWo7l)s2uC?_3-e(C+G63b$CebD+YEl|DH5r^4!$)He;*B^723? zG|RDxmu!sew@H6RxvEENZrZ9~)<&+7bwgA1pgf(K7R5$Fd58>yMdr7O5Q7ijUIY0WHE! z6Y%A#HOGJO%)r0^nz1_HX2;KD^)D6Q%MIm9U4)=AEUX+=v1IwSHR}GXAFz56wdjO@ zr_v4j(V(Cp;aAuZ`6VUIZdndxw+L)z#Hb2=CF} zzuEwT>ry?yC{eOB6I-7v4X*oX)@N@V?C(!i*(OK*8Pir&jF?#J{Q7l(JnW-_oSc#H zHGS=ByVQh)ggY1lRzghiXYdX3Eh906=RnM@Z)_ZUU0jv(wYAA~X^b4kxRBn39Oz;w z`QEHZYGfuK_^m*5B<{X#^!)kr9JJW{s;a{=L*MCYd%EZ@Hda>dE0}O=IDU@L=wUO! zn5*9L;`|i$();uf4;y=MY33D;urpT;;5gvr0LO6qOU9(8es?C}4hjyQ`1Nb5(eoc5 z1K9KXQ!>mktwwcNQ4>i;MeO{^92Y#?+>U?0#ljX5(21LJ6^z27H>YZ)wJaf-Ip54q zgMtq2OgJ$yF#vO3pR*&~YP&E2VG)sLuj9DZJk?}C{SV8Z7HabSc!3~XPK$j|-`EWr z+y^pbz-3IhN=bWqd!dBNX;}ic&nUce{&#g1K=<|Q*MULgCCv+KzBsWS|6(RCE)Gpo zoQf0VHsFq4aB&SUUOja#G=uu}t^j#IA8@9tCZ?tq6O`X!?7T@vW^QV_++7ksHKk{5 zZOzDdw>Wkn^AQF*dK9gg&Of#EL!b#VhGtt|1MHoIB6S=B*Cc=V;Ic9CR6y<5V!PCOTs5Vs~pRlh501MSE!G7fx`iDZ$+&$HUM4q8ysHu0}^GK{Z!oNOgplwC^9lql3wod;{jQ@ywrA5u8ff4 zVp{`|#n_ z@vd31Cc_F4&?_q|6=b^V>ck`@S;h=Nh%g6=`d*~O#}E=G2BKy_{oSv``_Hj)aKLL;I7lmne*mPxbyR;!mX8v?AA1+nqbu*b+CbBC z|Ni|7vhWEWaFWO~U_C^$Ch7Yyc#<;%b0{hW}c>-8btYu_XaI%y6RD*~uxhQL*x1c|dygFfcF> zVwDDi5zzSyNqtJWp8z$jCTg9Qpf9JuHEIjQ0_MY}EVgTYWNeIwI6BJGlU81Az$50( z+qXmDGUQmnCf3#pr{0};-hdT{E1q{n^(Ne-6LgSN&@W+7w# zT{;0epyN?y^~F|JZtvf95R6I16B63qWg;PyetL6wxFv!@avDQJaUe;MQcGK!dI zn;(jiIfitwU!$1wN``9$E)EvfGYB8x5E6j?hbUVcD@jgH=Aj|swgHb676(?<)AJNS zJDQ}63t#wG6R)0JFaq?3T3TZeOyD7!KiGBf@CeB;UcQWpLEJVaeVR_*CndIQ&vE&P z*3<>mi{!bNd@%ub6&hxqgPNS2tC@wU94i->!$`r?;rW1ofRAFH>MGELDc>O(oW$Ec z6Pjwky1c;oxA{OGJC9E#I5ZMZF$Ggunah$`P{==p!O%-wf}Y+82&q*q*}{SX)*Cl& zSXrE_NSxm$!LGKQ>~vQBRtj#i+P|~W+;fMGjfbCqbE2}aNQfN=d-jhECeG`%vGklA z%le?8yqEl@n7HIfqlf?dE3*~rO6n`|3xqr?Z|TEjW&Kn`ZqO81#QyC^@UVuQ3P$(S z;Ei>o-=c{Ubb9&^8fy~`n!H|ZOjH7~Sm5Ny#>B(~z5tEuN6Mw$V~4$*<(r;|MV9sX zcX4U3rGq6eFSa|W`s)SuSFh{WNqURvHBRimQTl*NBO+yax4{eRXPUGQWmYcyC1>zy zYlxkNmD(kKK2^MN(iWql8!MoxDCSz4()5x-P5- zgTB%8Egsdk*BBhp5+3^&($do5k;li!Ftk|3NUwm&4ykU9-X_#)T^mI?`n6Faw!)m; zp-hZtH8Dr0Z)*hAbqjqERFua`OkGj2|7KX)gZbXu+bB*=cMoJ{HKafsV_pj&WkE+r z-*p!~U>gnSe#_i+SdgYrQ>UBwt~YUduX!k4d#}K%2MaMs$%;v&@0ZxxXS?ro^K;#p)eEG ze-@m3t6@($eB)0{LBVVX7AB@&SF}t$HMP;4)b>6k4@s(2n%Y`IA`~)CNevQJ0hi?D z_J&t3biPxuwe^$lDq%WPS0}t4Bui<0LWXdQa&mGihV(01S*-#S_0<>q+U?tcii!Qh zbxC5$)M7eabAQ*^vrhkomDoQ?t}$2HZ70b3^5t0{bXQ3lFV}zFul%{NcMPEE55S7< zC>o^!ooBJdx?qf?hq+1b-c6xlSmi2NuVy>EWLWxXJuH-NtH(JuGV*@qPK+@ODm2>X zcYwqB5S8&^b=8V9K>?EpQ_g|wrL&E^r=iyaM<*T%v z&~o`vi{9C@GNXBq=5mMiO-;SP*DA}QMlj}@U@+<65YKPl%Yn6$@QftB@Tt1&AtX@B zxH#f6ebwsEmP$vNkPy)-aqVz#JMKiy%Xvulz@$-dDYnS*0qx%VH2*6_uP!N%X6-6=|T4d@d@| zX*@Ar`f<%qTPJR-X~-htGd||E+gvgGt1^gOSJdAG!_WziIuh?@PrA3R)%6RaO18dRIt@>p8mD!Od;=QahTgtd8g3kygl80 zeHt$EFlaeC)Rj{Xu60V!Ky7Gj{a(x01U0q9q*$Rq} z9$+%$Du)H*Khu4?xAY-OmgB*Luln`;NQ^<_w@PcBlFdP;0l}rs>9xxX-4o<95NxB> zch{naa%EC6rt65rY7gstFE4(IpGJT;r$aT?FtWDpUE2E)>EFvl#UJ|FkW=SjPp>7L z5Iw!*Xem8McP}H)3qr)iL<*m}-$X{l?ak))2Z^)>ul%oXbP9`$#k`KV^s{f0y{-OD ztbg-jnX&EYFEylrt6{ewrfDebQZw}}RHa2s(Zv8Iq zGe$)juZk?yzUJq(i*-&Wcb(4{CciOEd-WN#rKYvV4Og`-e-Nf$RobDKYhs03u zET3J^q3x6)`Q`wR*>pGL3Mj|7Z?_!nK+l@lxC)J7R%06zU}7=f3$GDYD2d9c zvqvwr%cSzD8_ar1k1=?8{SwH|&IQ0@^=eVKns9&}%5jXRi|fyS!h+{(Q(IT}<#w0b zz$)af#l?Tb#6}&Ma*t8?>n%?dr#*q1LPJBND5Ry}%}Jj9X7p=({5~JUMI=?$6BblS zQL)D^mCA*XW4tfUYInOXVPa@Cc9V*Y@>!L0{z)~9n!D&1BYz8;piyh7J6k~0N@dr7 z1^V5^i>UESoMJLFW&BOLlHMey=Xoi>sPeclqCr!e1@m@~?q{Z2o_4>iHH-Yp z&07bFp`WD_^TVEPs8b2kVSFa`mid9{ZRZu#T;dN2P_#NA21$Az2`-h0C0X~nplve{M8(CL>w!h9M8pBOM8}f5| z$MS~;gKP{aqGIV)q@zXtEs~#n5Qo|+1NE`!kpLL^G{7uwcpmur42uIUCnu)^);AFm z*AR1aOuXw(PJ#}|+1XzjUx?FZ^-Y(wQFI~7sr0u{WuwuN8n5Fo9%{hlZ$=9Ij&br+ zy;EebH$Mh!KESEQH^VPppqu|_iDTMcz3J}GHAGfCci=c|ceSjr&`|RGCV^3GN(!%E z?R~1F{Ow7APiLn?R031t(a}+1e00PSAa_Pa)+P*J%=GnBnS;X31z$S7{zPw7Hk%nO z=^7UV@KAo*XOkMT3OSXu16L^7!O-u6U4SDC3k#O{4#&WaON(*w2j5_MxG^i_L{9$J z%*x7Rz7tP>?9Bv{bJ`MX?7o!h_G8VpE&R-j+sJQu^l8qPnC3cUmi^B=+ap>TY&FlG zv8KF_m(2?k@;!gwsg23-*H3fnNe)^9TOF;9y$Y}PU3r=Z4<3LxpjNr?p)G3oomF*d zOavq~ls9i?m%qAGtCz@qotW6~dvIRfiyMlI3kxnlBpiG>6egvhumm!Ac{wk87t8;6 zZ*Gvu!7(6_Ty^n}NCM6cmbSMnrSA7r#Fd;xD=RBWNlAz2uR8XI1|V<-^+Gxg8d2Tc z+>Z!Ij_}*i{BKE_FTGQ@0n13(li4VWvI>$jMkaX2wppXK+2TV6TJ0mE@N({$b zBgMrb@$aDDWwokZ1Np~6one`#77WEXKjMBVQXIzE-l$fOvT3B4i;gh## zJj}u56ht>}#KrVisNEsa)YKd#)`p1zOzZcpgbbuG`KBM?TwW+BDq)3ZA3SaY*}~PR z?(EDgsWtLxVX=*Zc%Udh2-- zyBHZ|36b5eWD_`7s8HhKC^KcJmW~MwE;rp|O;)*nt-E(f?e>!#MVOrqsF~#zx2W~Y zl{H^pTs0EHd7(c;7JAbQut_-rDy_4rKaG6d9R>!Ii!n3j=KyTjGRNhleY&AUXf%dU zIR}j(5*Ehg&gFF>)c9W7!J+i1EH-w)7if?%1JB4sVP1M`)wU42wy9cGO>{P`0K4DZ zFsX?S3mcG8%EJR@k)-$AH|;8$5BRJn$L68oXjD{!?y4s!z?u#3Jtol8*XO(U7l7u^ zG>KeVw@q9TH&n!C24CIYxu77xzWF-xs~n?4fWiF53xgVm2YYfkiXSpwG1PULv<_tU z7m_`cX}vhF%NqdI3n)zL@~|qI6a`viQQRSit~7SZ7W63&mN6Qag&uaf56u7h8t!<= z&&!*Yojsr)t18zS$%s63^k>@Pn=NT(MmoMn#us2R+~(tZdQs34aqscn6=0OVxa!wP zB610wb<3fgckVd6d^zC3muK5b%B2p)zEG_7?e1tvNS&~D6LpUAi0jjR2M33k@`SG@ z3xEIis}qG^pYcLNwtMd>MH&GzLh_18loDn50xV+_5?Fj`u3I%(Ppl3pK700|NPlms zJ>WWIA)AS;1Fn<(l_yW0WFAd??orOwxEh1nIX>3V4^*8TPTkpl9T z1xL_9YNWC}qbGz>@DA=Lh{)-BLc;#_)uYYnQZpRIRP3>m@G8(+kW*0=s*$Dr-0Dw% zEpNWkJf-L0;J0d3^Xf*$bh0?io|l&`Hb(s?NP&s@S|PUcMG{H#LPbiw>l@ZRw|h^i9tl=QDTLgb*`cP5UCovHE+IC>_fGBQEC3IeyTT|ME(biDu%&(O?_p~3gT!^@+=+h^}U37T_$I5DUoQIqXL1tkDdsSL=`Qiv~`4+`r%Y~VS_R70l;C5YF^L#ZfxZ3VyX?@?cWm2LM*A-E;76U~Td)r-fqxkp+4PIE7ku4sZ7OS`*3(F%qVu+-dxyq@- zx>0voFn*-I#vz;C)XytG_3KtA@Z8`_7osMUV^P{Hc@RoxG;5ztiS zl;^eg^v<2Vs&PQEnx>+d zzX>E1sY+Tv3^&kycT1gD27&o-hKaz$9j{}@qdk>hO*BmxI#ge+WkBj#UhV|w^1Vb5 zVQ45KAyMN)a}9N%69vua$f2|<*lrp@)So=5ccqC-=<+xr+1-=ra$dd0rr9!D%;oUO zLcy80roR1G+4d|7M$6{!#vJFkkN6^PZE3#z(`+`+(WFD9ntiewL~XBxgpxAX|NfP9 z32@Fu*htgL(ipe<>YpS}sRG?{`n`=FCle4f`hE#boxa<|r`Z(I!Xm^UalC=4c z6c{?+pD#h@z8#^25`fzQVoMNQRH`|?5?c8cOHL8H^s`c}p{d3vHG)O~!9-U2{Tog> zg}jqU$f`vnbTmTZ-pd?rv21Pze!Ycs^hJ1`+zpFpkipE)XINb9_$J5Ob%XEuQ}-hd zLqiiQc_cKJ=!1AFweUknr))CiyX?0gJTPrV9e6hEK~Qa9csLA{R1U!m!<8zQIU?&e zsw5PO;ZZB52pIFNwio*2Vm9f=pn_^!hxK^&0jgw<%9#329~&DZo7S7b^CTGCNi46zt-^v8fNC2?#QZX0CpVo)N9e28HRg7zZ0W4?4-SY-anxCK31U*9_`lGSM7 zj%H_#f`sFM*sUS8F;Tf-x6=ncwRvXY0K4^V9t)95TP3Arw6CY)Mwbpc(UqLDz1y&?{nyM=L9% z1FM>sXg0PZC7&T>^YW4)ec$JfULI{r&pI-2t5*n!QXhF8?J5Ym6Xw z?jd0(r*dVe0mdn+77@Ka1Yr`o^G9VUzkI0keI3t!DVaN+2}?baz^|-a!TtW~6%pdN zO>cXBHH=N`VSAG6dcXWJ4(afd?}n>0U(ELJ-MC8$77=XZ-!^|uL#MG> zWCD7?`FYEd&GUa)$jZQLQ?qW7zFFe!_K=JOWozS#i*3HiTbJ{}ST*_s;RFO3G+ogg zA}DM<&EI`9RVr@cais5@&h9)%1+GPP?p;>a?K-QmhcJG3aj6{EcX2W8z(kd7Xb4r! z`$~Sed6Q|@zG=XO!%O^wNCFZQb^|M#WsmE%LW>l`%J^F(rcZGra3I4oEM_r{$0^%n^k+Jg5#Czj* z2|bJ>3ZE>9 zUwbe)Z%!QpU9PSGt-YM$HLB#K8D9*mcv+6G{et&MtxsL^#|~GFP1>+=o}-j*P8okl z>Ji07D#!x|-x0Kb3w^5BhiZgJTlAhQEA~kA?n%wK9r1Lyx93~*=NK{RM*NqI#WA~7 zdWYiqjU&WVsVONI1PUWMozvj1_8SkZx-kLdUS}fGR2M z#(d9EUP4l(Nm>JYzOV!nIX-&M5%hr1MAu;druRn@?wpKY*#c2A{(ta_YTB76YZY{{>?~xi?KgLwX>Tj$jHeFuDelJrCAX~d3*-o zAGCrTPle6#-94n9-aOk4f7gg!cS3v6nfW_V$EbdVA6#I-xPrK$p;CkFYSJ*7^k3Zw z-O@JoT@jwMW*lVOfWG$Uk64cC7Rbbdl=KLc6~s?|NCBjS9}c;ORkgIb794eL*x6p+ zVDbAJurXPw?E*auC`yr}cx`eKQlte&%!T3Gszc6~7a|ouc459T0&;xm#+^KYbk|Uk zIIRDib0oMD>#LrVwOEYZFxCA4YXLe%=Vj#8t4~2% z3I%Yi>O1Gz>MjH>1@mkbWH}k-d9sJoKW$2CzrQWt(7VUq5gho~i%B)CZo%KVyBozX z=cx@|I7swCC#7Q}>Vz)2BE+#d70l;maC^#?D_O<_}Ba-A;Q2rB>yl7niEYb7W3U zaF>4GK>n;ew$G1vb?_!J38u}vtM8+%rmB>9G1t22Tr{2=GeGB(%{1qjY}*X*^rKfu z9%XR72nxNLnhrtcNGLl5>hNbHoEqCtoSRh*Pvjhv!iAqO9llt+aviU+VN&9u~ zs8(>@zdsHV#I+63E1@9igeFv5J5gblRfRzW;zun|**@pxvB-%%D}xHz|FnrY@4)Y= zRO5M1&oZub!RAZK*S=y+Yd8WkEN-S&*;eV@Z-vIc6Ro>`z;a46247; z(}pR-4iA$^>*0z0CFz$CLqkKv{fxY$kmK(nYRFK90;#`bDJakI+A}|X;(w%Dc#lzf z!3Bq%1BG(tjdS{Fu$0^@;0RIKNed5Z43#j05JVRJbaZW?VMlqIWPidsiS!gs1i;aq zULn7vD}mk%s`j=d*KQLVn+BhAkE`!BGBX<@Q5C}9Vm-LhK4J=7&!kq18Hz21cWY*QM>yjLW0^S#vGwI_t@FttVs@Kx_To)90eOl?X$8TMrKSD{QYaXKqmVT z6FA-=5NjER<@y+D@HL7BQ-%^5dfTq|Y1p%}Vqk=bd!Kxh$N|;tojai()Ic$!o0;57 zvJ+-Np)^knp6`lgQ$#@VPLVM>-BWyz`fN$!awU7Pc*>S0{A-fn%UeTg^wL*50;jb; zb@K5G1Mu`U$^mk`W1OXlvj(!;lW1Gss<6OTw(q@mE zBTGrK$!CN(xVn-`xH?}$+;<<2JC%R=(wA>w!Z()lKUx6yo7vfX-(~oGL?fv0uHuXP zP!Cg`Kew|}R^lwiU5#g1?Osj(o-9!4fqlUI&hxvz8FYnFC&#D^-e%us0_0eVii$w7 zWXay&hALT%k|&iO^O;K5lGlzJX-O5K_a%>Um+e-|l)XFd1ekdywd$0{= zfBMv-*jR?-HNpUZq+HWw6t_0dPK&S8g^7hl!NAK5(m1J0>&Op$8=Fs`B;RFZ!D*&v zdU`1ZPfg9u6Zn4TQ{F)Hy~HCW%~%mnNoncELOyxAaq+yK?@He6hXa-G6({B2goV92 zT>r4%sQL^GAD{l?JG1s+yaLU1t-R_qVl70YUwXuIQmr1&ny(~9;vs&N)uhqn_oaL} z(csjUYB^`Q_V(cpd6%GuCkP#oa@6MDP_cD{B&dUP+0B!z{w#a(p7?$c;;Z zs;n%DSvqcHf~uxQ))kE*PB%53?(19QNmgZ>navO9lO!8E^iA#=w!zV-SR!8h>qGZI zy{R$Jz6vMLQAx3bcDFiZ^Y~z%RtEasE6^nm1P9``ZgZVX2@huHT;9SB9!xsI2_|-S zpAYxRfY~DZDNag`8G`R$D|B|u^6(KF(wB&W5WT!Sx7V8zKuS%!n+B*_he>?SD=pt? z!etZT*GdeV4IC4HEu{fiXgG+sKq&;aRFvev&HSidF3nvp0rbL@bo`x}cZg{TcK2Gp z$t_@YFTlhv`2G8*;RzjI(|!zu=iy~|x?l{Wd+&C$K=-BTl``n@j~V%U?DSqG;?0|$ z@87fU6XS{5d*Kt%65hB0eMglIR?cF`Utdxq%lw>eJ)eCkF(5GP$lCS z1M;o|R%1Z24F91bq>~{CAr6k?xiCZE@Yt9HXsz100;T3UBQHy};nKJy)(LGx!=Fog zSe1Fv?k|fS>=6oU+ZF7}BEsZi!3Y)=OeEdyeF+Sz3{V<{VX_F^VUOPz^WUl zhKR^W##^`GbOekY^z<26FhoU@Mio>ie>avoFgVnfTHZL@#gUvZdTU@nv4rNg!6(4X z74tQ~ZRR?Xx7Ebnce-JtS;sZV8HvVZAaQtO%6J(KI4eaGV!( zOdt=Kp(K^_{wL-xDQ$CN)R%a_r13E61I5_^8Sp^or?ac9I=OOB!4MpGEVRE|w4{bfr4oFMX8{Y+u5(JtX!#^Q4qbyN!JN4d2gVi8m(zsSol?18y{HR z;j|NU+f1P}zRmJF9OpJm`}Ul}39ydRpp_{oETpT_j#fowVbUDs+;~=Mgo0H5;+x#6 z`7$2uF>m?N56&9C_>ofUvNrnZQ|k4g62A?LT+7(JRAZ2E;=az#UVs6>m3{~`ND1-r zR@yq6q$uxq zh7|MLN3o8n6eMP6KG`J~=Njtj1CZy!T(5j652v)xxkcVpgl#k6b1~BuXA(+6X07uQ zH)9sIzl_B*2*Tv=Uuls+N?+9CO=&0*+oPUE; zgfJ11x0yXEd+?9UPeyAd84vwQieHHy17bQQD9rd+QB<(TtOxI3Cv^k~Q2Fn6hg2js zW}0EiGrnm^Oi5ElnVf!J{QGx0SXd0+r*Gn(Mbnxt$UCl+hefkIdzMuc@$P+W1uyYU z86P<2n)slv@8KhS3aN|ZTr)KxA%Jy>NpWXqIV4x=O)Gm@^!p}QC{{B#cCPWNa>{AU zuhGNg`2|?Y&EKYqbXQsjwiA5?fm2u{)1&CPY=y_wb{UMP|5(WG@w3S*r#*t>Fi-M3 zfBuZ-jg-s0quiof1#!HR3voQ6MU{YS_w3%=RMc;hMljavhLHq#U*z@Rkf9mEfhw4t zfXw%Nb} zO|vgd1*1Ej@Rn8oB6|Ghh)zMSGp@$W1lcR78_`$a0F&fwxa z;m4g9eGbRQCcQS{fQtg*k2MJ3dE+&;9tpeLVkhnXp?R!F8=dg>t@LxQ3PS9lD+Pbu z+RBqJ)@08rLL;ai+1S7dsVrRqZg;MiPK;|~Z+Xn+Uf!SUt-PWqA1g#r8Idg_GbJM{vSpJQN-C8VDtk)`nTZN1Bat0t zS5`7YWW|*kkq|O|&(C%J{=4t{IBx%ZzsD7y@qVA@>wJyp^YPB;{5eD(aLjuy<Dd7HI?1>Av zyu7+jtWVcdbke7L>Y5HD(HovoKkNU95Yy2yapIvzRneyO_in+?SzWouvW%LHY;0DB zhCJsFHR{dy*2rF7G%+=WluO6KSmGQ#Rnq}ydP1kYoqGiaU$K1J?-G8jBq)XL!pN@| z2C(W3j}C@t_4Org!l{HGxw2!ElUXYjIAdTGHeR$9P4fO$OJeT*XBOMx<9@;NqnqnL z3S#{i*X*0hALUi(Dq3G(2Yvt<+h;QvCKi^zAYXD>$!nR!5$EyTw6TXYUH_7O z=GHMuOqmnR4l12yWQ6*VkI!X#@5e_kR##)_%}S`&mxGtwA0|CK6RgD5@q~{?@Tdbs zSR3m?SNoMO7UKN&Tlf~pKhM=QX+a=C&PEU{Nk~9$o2UNb-<6A znM**LgwkMi+kJjljh#aq*PVnOqTJ;k?{jt*1N( znP{OvfG)P@)v-1{{`%4@9Ti9O%vJnHANbz)TJQ}vMiur2+Gkdp*`Wi8B4mLCzb*6e z>u`H_LMzJ}>YFY!4$1L&#WD;vb{?C=7x|Zb0o!^8)T6bH5;Vu zPg>=4bf3k8Hqp^nYHMeA#A#5vQj07gEsaa^)B5xwE^^a?uzc&wcPZc}pPO|d)ym{Y zf=2Q9@#Db2Kz!%sLwMD|Ku6ujdFjw=GBGk5ME`{z&U?+R@zRaGb!SraElN7H8n z^&Ts^h`UcIU7tKkV3YT9hb{IP^PR7B&&8B^RWKwt3Jc-aNbBM-0=<}+$0w7^#s*i= z5Y!ow;eDU3LLPw6($ac?gZDA@i_j!7%|AcM15)L3l<(mJV^V5-L?^+-*!W$}k-ym= zCO&c#-hD~hibW6WrrU={ya$QSwl1qQiO0sAkl2(TV~Qmc#qSuhWh3wM;y$9XaTHd`SpM-4*{5 zt;LQ@;k?};)BMsB;_!DY85R_qfL)pe)vrQErLT4v*uCsBDE-9QbIOw@<{u8I42dMu>8zht_0SJPmf;E z(OlnWrS$ zD`LIh(b>7DcX&m?bl2I^y@iemmBv=N!lh~1^cOtr3S+3ulwwZPQ+t2Yz_+MS!-QztoQ?+%$1cHrUzd7A-l*U6>c93lFJ9n+p4V;nOv9hwx zB{hDi&$sR<;7paJP*bxu?piCBpMOi%7)=&Tg0zyF`r4P{l9JOiGeE+iM6q#gH*Eb0 zyE(EaYbK)Tx3~Dc-s4)S5kfGDdQ`x32fDEzN+u==$;m9s%NfvqV6TVgi z@+FG$5#IHiw}i+&x^(H1wAWHL&zJ$}|8_Xm)-a!;G zg+b0Heon=tr}xfe`r>aRjZLWRp+7Ux=*ez}Gq@7r<|>NMJJ}U)Q_&$K6sdmw=rz7-U4M05vatLR;ax*;ON19I>+MK%-lL*C*47L~9iakM zRZ}x8Q#{Njck|U|Dic;Meui?@yGw_=VvWxjFuRGhJ!J)$+*E)VU zW8&|hy0%@c2S#U19!M2rl`gxS(rg)@AX?qZ+Uh^3nZ2g3Z>VdUGI4X;?tGdv``Frw zHYy4O>qsWav#-U|HW>#o#X-O~c-_bmD;qWr>$AIu$Ay|LpB3ReGZHdN(j*XO4B2@I z1nCneMqu;iHhHR`5?Y-S!`k`zGbEd)r`kSeHTZ8qW|eEwF=Us8DGJFqs2SjC$>2Mj z;7gL`yK>Db%;W`^99!6~;McF~VrMZnZ2RGUDOObd6eP1bxw))INb4I;+Hi_mvwoWw zduCLE;C|^y*aawippsWDAR3vxS59jNF8?4Q^j%fGFai;ck%ATVOyrbP5O3+bQ5Wn) zDsHqupgQ>nG7rH#c*^t`dc~S<}re#iR|w z!i+D_M8jMimj^#!Zb1R_a*!V~2W91;OSfQMRNp5wRHg0iK~3m?eSfSXfFU<6E$vN; zoVS{e4i&+?JZjAL=SWSvLvdteBsDiom6)b5%oCR7(Tz(5)nvqf+gC-U0V~32I7gj} z>k|a0eSI-^?&P;JGcbTdVRV436t4I|2hHons|wHZMI$1AsF^_a6Px7<7SV;&V+-wy z5oKjJm9kf4UdIXUnf8DN1C|D`aGDn1%)F=hm3sFl6q=2PA|cO|ywbaW|Nfg^UJp}J zjI2(~#36r?K|O#3*``bDsg)*mvUnhY{=}R7>n=V%8}J7(GEnn<&1`uO7^E94TX{$lM?LiN@@_v8Qxn{e zF}Y9j@HEv1B9}E+HkO?9JUQbWI(E)=rL^p)7i}EJLwWDxQ8j@A=@!<;F|37UWxAT0 zfG^w`fNhxm01XopG_y!D{QO>&5+z!Pud$9oJ`t+cW1Z>In02wew#Q`f$4tAT-Gq+J ziv;Jh8hU!S?}l)zz&3!OF7U`Q_8dGjv6XT{LO)>Z5lLED`!=(4dK#*LBS);G?Yj0M z1wkSpy|p7_$50I+hIOFg`bB;Hn2bM$`dm(f4<67bI1iSY*x2|_b#ONiSe9cHO-xrq z8lQ^f-ldiB6ei)~RgX<9-p4L?Q{Q7^MaFaXf$;mE!+Z^4XcagYER>0He{U75*=YCQ zdb%)_Rt;cFtPND1SW|mFmlpYwdsA|j*DPg864@s6_|X#VsF!#YwWg$?~cDZvZI zhRTD3R0J0B02s~(EbC|LM-*?>61WM;C(amuJ+B&+)2g(~#W%Tuxu4@b#TJPFkrF4<@ym#;JOG`whj?YG`x<-bEYRIr1 z>5_OQ)&7VPGKa^;#u$cpORB5SF4DH^DegIanpBBjXKLNez0~dNDWaZ@ekc3|_8nZL zO2fC*w?xm(ZNhpL-@T7TkR#ZuiQaATAa@9+<%WjEJ~##6_~glnMxg*9UE4xxNFHk{yQWpSAP}CV_k=_7 zv2f)_8YP?Iei=lTt?^{b) zocF&W-K}>0`ful*tC0m(6%ulCsf&&VHt_cw*a8s}|D}JtNj)OsU9;w(({&e&V!9$9 z$$Oi+J`F87V|=R2iBDE`Os?)+^Rd{ZI|3qnnEf6*_O4yPf9;v!XBYL;X6Z2-TPF$& z_i+ATIokA8-P)M1aev~YD^5FOWU4c+e4 zTspP4SxHDpus{;et3U{90 z?hb!A)ck8e_dBfdFwA9fk%m~Dk6GCl!qe@GRNKkP$xX+Ac5Tws-o5R;q?gx1W&MDNfpoRY9>LH&^(L6$Csh0=nAt#M$$ z8#$6YB`HDQfFwz*!MWz74(&0?2xdpepi)Vl$F%=628UAIWg$cQ7ZxV&Vmr_lsw^NF zSg+jFOrpSfQ%*xWxa3%N0W-6$cU3RzZxK1*u(er>%3P|Gm3dP+H?mwWdnMz6$pQLh<}v!ZE46WX~5zp&9x?Y@mE};`Hr%p&xZz$zI&^+k_Ge`PavfP|=Cngw-ogzt797?O_}o ztQ}(4(fP^*B49HJDmmMN8MN`v7dvfUvMY0IvJWwcF9*vsYu*MbKZn z>D`cR5R*caB&KpXXXzX(E6%2)7vaQvT~YU~Zs#iPoYfo8Yh&*sAab@&EGaD1)Y3Bi z6n(h+3;IgN7XLcqzo6AH1xN9h0!S2{hP(`{uYH_UIm;pEznhU!|IC-NgTW+fYM4Nr zZw#uCF*6ImO-jzlTuM6&m({3B(?@a+Iw;)+tpr5FiX;T5J-;dKmt|19M|$*VN3ZAu z$sdoJW5nb-0RJl065^@|Q3KI{m55}dWLae8U( zm#}fbIzgHiZ_KzCZKg?eO_SW|$tV72%bnPV36zDSLl=3EY_bD#;Xi!PeGgYvUH21A$5a27&6Ob;BxK3cj%H z8-Q^xEG(cW1msXxd;9#z_Ex#6-s7#4T>@Fm$4U`HQN!n~cdAri<^zz}7QCfGrg=^6 z?Ka^1xUExXDA1s*L?tg@MM1;#s(%)Ii%xd!FEF`3eafpa6+uV?Z%tf$0khhKgar4- zATOC&s{n>ETmdM~9q*&^eRq2gdQWaw`#L&YklwWXV_;4+n?F3LXVN;01Rb0q!&7p1 zY|ovGO-=RrJ#o5{>|_-uzb!dogNyltCCPnjhAWm_5@|!doPMk6XqKmY>^ntc9kjZ0 zi%MPs9TRv;WRAmd1K1Dm_^&1&;8WL543%7tWBWpl=>-(`PXk;S0&5)Qc%`JIR#j8{ z7OWrh8h#2oZkfAk9uQBrPduoJpq=Oua?_=Y%KzI<&9=G?E*sOoy4v^zVP|Ah4t;&t z=%7`mP~3X?Z$!|hd0R;1j>G~BpSAC}{p#wU*+X@Z`cLgXX$nVjy!$u9*G+^S4U4pT zGY@s!??<(hexqC~3TWeXbZ6pvh6Pr8^g)cRUULeSKjBk?CyTV3SmX~**OshJL;kZn+ND)lK8Yt_>kswCM(Og_jX0)x5})2 zLdkTVREX?YDt_>zf&6Evi$Z{^EyKX-$<YVt}o+YMT3LJfYQ8Ybeo^xPfn3-#p$*S8+)0|3r-t$XXX(y4X@`3Ja zLtyVUYrhy=&h3PFXF9=(N)fyyAeP|$=(9ePASWlEnwjZhR}Ej88&JPNWeD9heE%Uo z1-=);LIJ2&U*;z5fw@u{;){d02kv16=l9kzVtQU3yc6r% zy2j6Xu?+R&+qbD7ZX!(@(sCw%uxnysa*at=R`zS|sPtC|g3$o5@%a@>d*Rt5UaDqz z>Ai#`YGdDDD7qyQca2iYUo~@BG;snHy~7fEuh>dTOGkYFST_&A$m3C2nxg@-0s$&` zX|~-%g-aSrO0^gv+Y1Vgv)x}4R?6Omrr=%9?_=*twr}@JYw6rBkE~MA%lmci zjcy}fh~~-&m#}bOiO1+SaNxOib`xaj!15ydVAwQgKwx{=Y7$}T2joMVQ~*pZz3>0%y1SQTWgQCb6f#1TZY{^{!{Omh zp%O_nri|;+--p!1B4}C$rgtP0g%<@ScNAO0$N1R}OW~Z8Yv%n#4ScZXo2!1U*9RDc+QfF1`paiwc z(aKo8d8l`mD!Fw&8DKZ1CZEsNeJCHm)XZu{ys7A!~WhcHGY#~n+{r&I; z8Rb~qAgaB+KDoQfz+`J}V7w6tB9r9KTo%F#7+n!oiD+TslbKq{ z$uqF9R6ujyxjz}~LA(-%g^Q<^BIrYr*Lk6_<}p<10Y(f803CiJkP(D8cgh}a&?ft7 z;7G7pOcRf8G_o)%J%o0jMbxQ6I1hIOcfMp*ySx9ShkksrA9Bd>%Tso z_2GkB#g!Ac7Bkr_t8V^6&slkC9Zgjvkg+E5_9N&YNl8jBzvWQfkJdF3GGLre-Qc2% zu%p@EnU|B(Tvr#^Fe)uA-N7Eopq&27Mlp0l_nM<)EG-uiO$Qtm#9&R;81+^F1SHId zCg%J<|L|630zD|<*e&qhTGVv#$%}A|IgdLH5;apjv~;16sj?jU6K_OgSbkk z$PuSz>=y*)omJ*99!`tM%lm?%1LkFxV_5jQFkCbVF$oE!SNn^A%f5W&3f{~N{Wg%y zr=mz9uz=fMb?ysTn>Y|L-XOr62weu48G9MQH^Fi8DVjPip&--hY-zHAAHHbv9 zgONh$3$1$7=a35ty&(E6Qe})(e{$gv%GNl;4keFfxIIET(ZT^jiRKCg0Skw*8Iv7+ zN%X@y*eM7~P=u$XSZZicIoMT{oRCwPtA19(Loj z7@{T*ijQX)pD(Yd=5{h6d=?M@2_R-?>w-uAcc7@M`$LrlXX{;en;5TPYf+BQxX%OhpRcOGs-azw8mrtnpunz&<9T zUqRlps`6qafS!~nV%gjHghArSk@OSfUujv7UHUclKBKSzfbTzeVKlZMseZc z;h=mYXyoMX;~q!W-hKD+<6)pD&4m-Is(itr85->%CI;@|O3@&;LA{9exs6f*Hz4x_ zTgZ0^)^hj|-bVcXwzakj@$e}B)B@2Eg{Rj(|FK%q`t{<$lo9ArQ5Jyd zg{IHGPy_B$#KqZdW^FwL{3I%IZ1Rh1jwrF%#BB+s2I;zxKV7+exw-shR@OydUteQm z28H~4UX+LdlFwhh+*}w{L9wH*-dI#5A>&v(`@(+l!U!-xbaZt1tSM5?xG7ag6Eat- zSH~jpMc-6Z5UFh|FGG~m$CM3&aMillgElHXM(03q1;Pv=WfOd22IjrWE#XON24V&_ zHuEs>0XwbDTJ5!bnA^TCh(e1>=OirLC=0PIbg>yefBEufX=(QD1APG^Yw3x+w2B@&oYc(R=lOPHCHfIwqpU~o6& z7Zv@~+v|x-1xDKgUxNZX)1!L;Z9}hHw|21}6OfQFoUy7O9v;rm&j*>+$nUDg7&hUj z=4K*3=&y-#ddJX^wTj9=@G_%hGxfVlB}fVEwDVDn*+rAyxQr6vwku=~cnAV~o14F% zY-jQv-zj)8O7T6BERW_Dv|{}ZYuJsrE4W{*?CkgYnU|f2U&a(JTp+GM$S^Z|aA_h8 zAS4jUfXcNv&6#m6hxuce`?uOaV2zLgi0`K*2#APSS9y5=$p%*Y8J((Zv05hanNpaf zVaL9Q?+g`$AGQ&Jo{dcobkwskz9dRR0Ghrs%R3po0|YwKTG+k8FWYK9^aQMU_F}Oa zUWC^55XeYJs=TFeaPaeEH--IliRmM{(L}AJaa!r=wF58M!M`2qIL!KeGAeBh;T8W>B3tq)q2-vI~Nugzk$>WNiC))HJdAzl@0fwJan*0*T-B# z+O9qXv4Zd5LE9BoUlvdjnO~X}@+d0W;4~N>_Jc2OMnU+Q1r#dC>u$KaACr=5Z*Bd( zvhw@{Psk+{@5|OeLTl*i9tRq&q-101vtG)>hf`76H;^cPt@eF`B>G>hoSWE9ssr3w z=%4sn15AhMFfpa)kE_5FKf1aMD|us^i6iCR=~oyT83F!6HUv&BMoErd{cPOCJ_J3X z78GXa=Rs!%eHMe6Jj}8*L_9H_#t2JD=6H^dj?UC>5~Kpk%F3DfT6%ha78V}h8fK_Q z;_tq^w9NY6M{h_*&b?fFzC2aFPB9}+qRUim^~S5x%(MI{hb&_6-ycPBF+2MfljlSe z>~#Qwq0KY+liqEqrWOXJJ30%kp?Kp|sHP#i1|HOsdH&l}iL8WSw3Ad6yRsuWP71m` zTO!q7sy0pR{@Uf6cP0yyMXH~wj(i=HkUMTvqP9484_;0*5pecIOw4hIAgK4?i4feJ zde`u{>4t>kp8yuh#kuS}i5exIefh``h^oBGysabO<+ijJD7==vrmjb#x4pPzn~ zS;H5d3B+`msyVpP!PD(o#qv%;k-WsV!z^Owk+=|Z@47lWgj+xo)4m;D`iN&PTpIL7 zMT@K&d}a8YN4)3dAK!4DPrr0m&~Qks!(%`NNT2dm6#)-c!Isw>#b_*1*U&q zl1L}Z5olgf-8~d&edZ~s7|8Sp09WDIK^Hp}hXmlY2n&bXDW?jNp&a%%rN$CxW%WWE z53$(NasX-%S{8{@fq$P)^>JrDT-bZeP-P=cp3N2=08eY<)E9!s;JU?c4c7Q8B6s2D zw!`1zNX7~m5EQ(B;rGIVOXr4S38-L~71;}nF~mZwD=sVZbaQKIYQmXak9rH*1x@Rf z@giXs=httms&$qNRWzOfp$~CQw#s^&6_vfr8qD|bgK8(WM@aTP#L}Agmwz##w{cd}Ue<;gmq^FPmApX!0 zu+P9xgVGUcJCapkr%{t2e8tvBb1Fh6ksgHo34Q|cF$Hd#1_qrNt`PzL1qB6YK}}3} zf;0w+gwWB$?cb>UqnIbP>|bSN?Zq8EhH*nTHL(vvwzcQi(6!Cy7k}6No;$uV>rR+B zsC}n_449YCU@1qQWoBf21Y`mVA|%Af^Pd2LhctE@U3}CpN$c!4M(`2PqC+du1(^)6 zX1>0g$PI8&kT)RibTKE5A9Q#@_PpeLcuXu@$&SIC-@DpAh!G%cUA8MSW3FEdjLmDK ztEr{n_s$P0utVMKLxj=+moaq>g8>wSIKl90C_HiJ3k!eYErEg|CSFt1(}KqyAfG|U z9F73U39*OabxX%6LK)*>^mVYF_p`7h#K)sxA_U~;6CdirLaT-vPKgVW4C0e<0s~LFy8gncvUl%ZWZy_e zU=SkqXDLd3|S`9W`G@Ph-X zRNSGnZ<5f#(yL;5+{v@RkV2g*|KQplLl5Fxk}w7S3UNRFq43}c>Fr6Hy^(M0NuKMq zHU|n%tcwSFbEk^6e5ft57Z)~PIIhkcVoZuJX#8mM`0;%Qza)%&j1Ybt%0mo>J}|CXpA^d9>VMjy)z zV!I*P#sZBM!B!%fQ2VQ1p^a*pl=#U!a51zEE>5hj-c;5IQPikBX{mdzi=9JRLxK3u z*ZvKVWwXlTEFaI;Ogm5z2-E#9zc&2u_I(x>K|dpkTb5JIWc_<e!`)vS~b7%<$yD zf1JTE;I@C)e__vt!h#T>`t8h?$QfK)OL^wI^oAz1%2Y!~xVk5Q1zUZM4tj6@dst46 zfu(j~OvC!KpT|G~6?YHBvv}@W2Fcl=|GyPL{N4ZO^7udhaYNB>b1=n;A>BWW%f7# diff --git a/docs/html/resize.js b/docs/html/resize.js deleted file mode 100644 index 6ad2ae8..0000000 --- a/docs/html/resize.js +++ /dev/null @@ -1,109 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ - -function initResizable() { - let sidenav,navtree,content,header,footer,barWidth=6; - const RESIZE_COOKIE_NAME = ''+'width'; - - function resizeWidth() { - const sidenavWidth = $(sidenav).outerWidth(); - content.css({marginLeft:parseInt(sidenavWidth)+"px"}); - if (typeof page_layout!=='undefined' && page_layout==1) { - footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); - } - Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); - } - - function restoreWidth(navWidth) { - content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); - if (typeof page_layout!=='undefined' && page_layout==1) { - footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); - } - sidenav.css({width:navWidth + "px"}); - } - - function resizeHeight() { - const headerHeight = header.outerHeight(); - const footerHeight = footer.outerHeight(); - const windowHeight = $(window).height(); - let contentHeight,navtreeHeight,sideNavHeight; - if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ - contentHeight = windowHeight - headerHeight - footerHeight; - navtreeHeight = contentHeight; - sideNavHeight = contentHeight; - } else if (page_layout==1) { /* DISABLE_INDEX=YES */ - contentHeight = windowHeight - footerHeight; - navtreeHeight = windowHeight - headerHeight; - sideNavHeight = windowHeight; - } - content.css({height:contentHeight + "px"}); - navtree.css({height:navtreeHeight + "px"}); - sidenav.css({height:sideNavHeight + "px"}); - if (location.hash.slice(1)) { - (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); - } - } - - function collapseExpand() { - let newWidth; - if (sidenav.width()>0) { - newWidth=0; - } else { - const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); - newWidth = (width>250 && width<$(window).width()) ? width : 250; - } - restoreWidth(newWidth); - const sidenavWidth = $(sidenav).outerWidth(); - Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); - } - - header = $("#top"); - sidenav = $("#side-nav"); - content = $("#doc-content"); - navtree = $("#nav-tree"); - footer = $("#nav-path"); - $(".side-nav-resizable").resizable({resize: () => resizeWidth() }); - $(sidenav).resizable({ minWidth: 0 }); - $(window).resize(() => resizeHeight()); - const device = navigator.userAgent.toLowerCase(); - const touch_device = device.match(/(iphone|ipod|ipad|android)/); - if (touch_device) { /* wider split bar for touch only devices */ - $(sidenav).css({ paddingRight:'20px' }); - $('.ui-resizable-e').css({ width:'20px' }); - $('#nav-sync').css({ right:'34px' }); - barWidth=20; - } - const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); - if (width) { restoreWidth(width); } else { resizeWidth(); } - resizeHeight(); - const url = location.href; - const i=url.indexOf("#"); - if (i>=0) window.location.hash=url.substr(i); - const _preventDefault = (evt) => evt.preventDefault(); - $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - $(".ui-resizable-handle").dblclick(collapseExpand); - $(window).on('load',resizeHeight); -} -/* @license-end */ diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html deleted file mode 100644 index 26dd244..0000000 --- a/docs/html/search/all_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js deleted file mode 100644 index e9776d7..0000000 --- a/docs/html/search/all_0.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['arrow_5fbackhead_0',['arrow_backhead',['../namespacefplot__core.html#aec186fc30c149b713c7acbbae501b953',1,'fplot_core']]], - ['arrow_5fempty_1',['arrow_empty',['../namespacefplot__core.html#acf849bac7dab0385a49577f39cd17975',1,'fplot_core']]], - ['arrow_5ffilled_2',['arrow_filled',['../namespacefplot__core.html#a77694d28a29b78d1d4f43f2f813d81a9',1,'fplot_core']]], - ['arrow_5fhead_3',['arrow_head',['../namespacefplot__core.html#ae45226bcbf29c2c1d266891d9492b920',1,'fplot_core']]], - ['arrow_5fheads_4',['arrow_heads',['../namespacefplot__core.html#a9b29a68286be7fc5791e4b7baf472828',1,'fplot_core']]], - ['arrow_5fno_5fborder_5',['arrow_no_border',['../namespacefplot__core.html#a3cb539f373d8c9b192ffba3622bcf7f2',1,'fplot_core']]], - ['arrow_5fno_5ffill_6',['arrow_no_fill',['../namespacefplot__core.html#a466c7931f298261b528697ef344a4e87',1,'fplot_core']]], - ['arrow_5fno_5fhead_7',['arrow_no_head',['../namespacefplot__core.html#ab658b8b914c0cc925c93144eef215a03',1,'fplot_core']]], - ['assignment_28_3d_29_8',['assignment(=)',['../interfacefplot__core_1_1assignment_07_0a_08.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html deleted file mode 100644 index 8eb215b..0000000 --- a/docs/html/search/all_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js deleted file mode 100644 index 9ad09a7..0000000 --- a/docs/html/search/all_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['blue_0',['blue',['../structfplot__core_1_1color.html#a208e32c7d0b0798118575c2234f4cc94',1,'fplot_core::color']]] -]; diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html deleted file mode 100644 index 6fd3a4a..0000000 --- a/docs/html/search/all_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js deleted file mode 100644 index 72e9e2c..0000000 --- a/docs/html/search/all_10.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['term_5fget_5fstring_5fresult_0',['term_get_string_result',['../interfacefplot__core_1_1term__get__string__result.html',1,'fplot_core']]], - ['terminal_1',['terminal',['../structfplot__core_1_1terminal.html',1,'fplot_core']]], - ['to_5fhex_5fstring_2',['to_hex_string',['../structfplot__core_1_1color.html#a82f6fa701820ba719c3e3266a4e6ebd0',1,'fplot_core::color']]], - ['tri_5fsurface_5fplot_5fdata_3',['tri_surface_plot_data',['../structfplot__core_1_1tri__surface__plot__data.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_11.html b/docs/html/search/all_11.html deleted file mode 100644 index f78343b..0000000 --- a/docs/html/search/all_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js deleted file mode 100644 index adf0ba7..0000000 --- a/docs/html/search/all_11.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['vector_5ffield_5fplot_5fdata_0',['vector_field_plot_data',['../structfplot__core_1_1vector__field__plot__data.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_12.html b/docs/html/search/all_12.html deleted file mode 100644 index dd9ff1d..0000000 --- a/docs/html/search/all_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js deleted file mode 100644 index 17bc0fe..0000000 --- a/docs/html/search/all_12.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['windows_5fterminal_0',['windows_terminal',['../structfplot__core_1_1windows__terminal.html',1,'fplot_core']]], - ['wxt_5fterminal_1',['wxt_terminal',['../structfplot__core_1_1wxt__terminal.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_13.html b/docs/html/search/all_13.html deleted file mode 100644 index 2611a10..0000000 --- a/docs/html/search/all_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_13.js b/docs/html/search/all_13.js deleted file mode 100644 index 8596b67..0000000 --- a/docs/html/search/all_13.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['x_5faxis_0',['x_axis',['../structfplot__core_1_1x__axis.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_14.js b/docs/html/search/all_14.js deleted file mode 100644 index ebd6bba..0000000 --- a/docs/html/search/all_14.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['y2_5faxis_0',['y2_axis',['../structfplot__core_1_1y2__axis.html',1,'fplot_core']]], - ['y_5faxis_1',['y_axis',['../structfplot__core_1_1y__axis.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_15.js b/docs/html/search/all_15.js deleted file mode 100644 index f3d6cb5..0000000 --- a/docs/html/search/all_15.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['z_5faxis_0',['z_axis',['../structfplot__core_1_1z__axis.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html deleted file mode 100644 index b26d916..0000000 --- a/docs/html/search/all_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js deleted file mode 100644 index ed69931..0000000 --- a/docs/html/search/all_2.js +++ /dev/null @@ -1,33 +0,0 @@ -var searchData= -[ - ['clear_5fall_0',['clear_all',['../structfplot__core_1_1plot.html#a34d776a2c321b9ac7676945d95990e16',1,'fplot_core::plot']]], - ['clear_5fall_5flabels_1',['clear_all_labels',['../structfplot__core_1_1plot.html#abf9538a6514fb1ed53d5715aacd58e2a',1,'fplot_core::plot']]], - ['clear_5farrows_2',['clear_arrows',['../structfplot__core_1_1plot.html#aef6ccd30310590087ea05f427a799b80',1,'fplot_core::plot']]], - ['clr_5fblack_3',['clr_black',['../namespacefplot__core.html#a3f8775edb06de2a90c24009a67ef4f96',1,'fplot_core']]], - ['clr_5fblue_4',['clr_blue',['../namespacefplot__core.html#ae9f20ca4d21fdf9ba84f3b363f3e7d20',1,'fplot_core']]], - ['clr_5fcyan_5',['clr_cyan',['../namespacefplot__core.html#a700047d632ac642f6a949e44451bbc80',1,'fplot_core']]], - ['clr_5fgray_6',['clr_gray',['../namespacefplot__core.html#a828573f8099a6e695b05bb0678289f59',1,'fplot_core']]], - ['clr_5fgreen_7',['clr_green',['../namespacefplot__core.html#a0bd6481a613d00bfb7f92d7b906476dd',1,'fplot_core']]], - ['clr_5flime_8',['clr_lime',['../namespacefplot__core.html#a3f2351d27904192434e3ef78155e51e0',1,'fplot_core']]], - ['clr_5fmagenta_9',['clr_magenta',['../namespacefplot__core.html#a5100f36d74219c9ddc115d9b38d213c1',1,'fplot_core']]], - ['clr_5fmaroon_10',['clr_maroon',['../namespacefplot__core.html#ab68541e171cd4c283eeec74e5165f760',1,'fplot_core']]], - ['clr_5fnavy_11',['clr_navy',['../namespacefplot__core.html#adb6d3eb3275e9c564773cae821a1c4d3',1,'fplot_core']]], - ['clr_5folive_12',['clr_olive',['../namespacefplot__core.html#a7661753bfbb9a5e7ef11a79c279a59e2',1,'fplot_core']]], - ['clr_5forange_13',['clr_orange',['../namespacefplot__core.html#af0a79b640e25da7a7897ff87e2701f86',1,'fplot_core']]], - ['clr_5fpurple_14',['clr_purple',['../namespacefplot__core.html#aa9b8d3f8e41f9a35e05e57abe3e5baf9',1,'fplot_core']]], - ['clr_5fred_15',['clr_red',['../namespacefplot__core.html#a33f5d636354eb4187ba86154037e74e7',1,'fplot_core']]], - ['clr_5fsilver_16',['clr_silver',['../namespacefplot__core.html#a662574b11028022eac8158f9fc846ded',1,'fplot_core']]], - ['clr_5fteal_17',['clr_teal',['../namespacefplot__core.html#aa30407b5d837e2e2c191d99eb115c42b',1,'fplot_core']]], - ['clr_5fwhite_18',['clr_white',['../namespacefplot__core.html#a614ecb87618492f80d7ff4ba4324926b',1,'fplot_core']]], - ['clr_5fyellow_19',['clr_yellow',['../namespacefplot__core.html#a061a6ee4fd7602c096fd5016100ca378',1,'fplot_core']]], - ['cm_5fget_5fstring_5fresult_20',['cm_get_string_result',['../interfacefplot__core_1_1cm__get__string__result.html',1,'fplot_core']]], - ['color_21',['color',['../structfplot__core_1_1color.html',1,'fplot_core']]], - ['colormap_22',['colormap',['../structfplot__core_1_1colormap.html',1,'fplot_core']]], - ['cool_5fcolormap_23',['cool_colormap',['../structfplot__core_1_1cool__colormap.html',1,'fplot_core']]], - ['coordinates_5fcartesian_24',['coordinates_cartesian',['../namespacefplot__core.html#a383aba6e97a1e427fcf4d2947c7687d3',1,'fplot_core']]], - ['coordinates_5fcylindrical_25',['coordinates_cylindrical',['../namespacefplot__core.html#a31baa8924c3ed9770c90b1ff8656da54',1,'fplot_core']]], - ['coordinates_5fspherical_26',['coordinates_spherical',['../namespacefplot__core.html#af20b219d77cbb2399a33f3981aa720bd',1,'fplot_core']]], - ['copy_5ffrom_27',['copy_from',['../structfplot__core_1_1color.html#a08fa8d6f601ba8641ec91e1f43e1c586',1,'fplot_core::color']]], - ['create_28',['create',['../structfplot__core_1_1delaunay__tri__2d.html#aba77dca84f08dbfb2b115d9d9fdd9aba',1,'fplot_core::delaunay_tri_2d']]], - ['custom_5fcolormap_29',['custom_colormap',['../structfplot__core_1_1custom__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html deleted file mode 100644 index b61b96f..0000000 --- a/docs/html/search/all_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js deleted file mode 100644 index 88be346..0000000 --- a/docs/html/search/all_3.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['define_5fdata_0',['define_data',['../structfplot__core_1_1plot__data__2d.html#aff2e615bf20ac66b403695ce10e5be4d',1,'fplot_core::plot_data_2d::define_datapd2d_set_data_1'],['../structfplot__core_1_1plot__data__2d.html#a4ef9823b92c13db70504897adac11e70',1,'fplot_core::plot_data_2d::define_datapd2d_set_data_2'],['../structfplot__core_1_1plot__data__3d.html#ade9ee50a99ab15f4cfcc8a0ecd75e69c',1,'fplot_core::plot_data_3d::define_data()'],['../structfplot__core_1_1surface__plot__data.html#a1dbe06af4e164ada4b80277e70d0320e',1,'fplot_core::surface_plot_data::define_data()'],['../structfplot__core_1_1plot__data__tri__2d.html#a3ce95ac57b2dfda69e754d7314d5e113',1,'fplot_core::plot_data_tri_2d::define_data()'],['../structfplot__core_1_1tri__surface__plot__data.html#ad2fa70d7577676babf477c89d3562060',1,'fplot_core::tri_surface_plot_data::define_data()'],['../structfplot__core_1_1vector__field__plot__data.html#a833b60ff6a9ca8c533e089f2968d335e',1,'fplot_core::vector_field_plot_data::define_data()'],['../structfplot__core_1_1filled__plot__data.html#a3913a71653b75380dc1012c5006d773b',1,'fplot_core::filled_plot_data::define_data()']]], - ['define_5ffunction_5fvalues_1',['define_function_values',['../structfplot__core_1_1delaunay__tri__surface.html#a79ce4c8ed7d243417890fc037f474170',1,'fplot_core::delaunay_tri_surface']]], - ['define_5fx_5ferror_5fdata_2',['define_x_error_data',['../structfplot__core_1_1plot__data__error__bars.html#a897524f1b8098654b9963e1d62b69910',1,'fplot_core::plot_data_error_bars::define_x_error_datapde_define_x_err'],['../structfplot__core_1_1plot__data__error__bars.html#a43b64e7f217392ce49969bbed71a940d',1,'fplot_core::plot_data_error_bars::define_x_error_datapde_define_x_err_lim']]], - ['define_5fxy_5ferror_5fdata_3',['define_xy_error_data',['../structfplot__core_1_1plot__data__error__bars.html#a49891b23e0387645cbea89ad2405c1c9',1,'fplot_core::plot_data_error_bars::define_xy_error_datapde_define_xy_err'],['../structfplot__core_1_1plot__data__error__bars.html#ac0fb40f8ce85f194948a10d91b887d58',1,'fplot_core::plot_data_error_bars::define_xy_error_datapde_define_xy_err_lim']]], - ['define_5fy_5ferror_5fdata_4',['define_y_error_data',['../structfplot__core_1_1plot__data__error__bars.html#a8312de543a61854de5f12c25329f0e49',1,'fplot_core::plot_data_error_bars::define_y_error_datapde_define_y_err'],['../structfplot__core_1_1plot__data__error__bars.html#a8549600a4cd1d3a124292939252f08ba',1,'fplot_core::plot_data_error_bars::define_y_error_datapde_define_y_err_lim']]], - ['delaunay_5ftri_5f2d_5',['delaunay_tri_2d',['../structfplot__core_1_1delaunay__tri__2d.html',1,'fplot_core']]], - ['delaunay_5ftri_5fsurface_6',['delaunay_tri_surface',['../structfplot__core_1_1delaunay__tri__surface.html',1,'fplot_core']]], - ['draw_7',['draw',['../structfplot__core_1_1plot.html#a9d4351a5ce5288b8f1b8a0e67d5bc5b2',1,'fplot_core::plot::draw()'],['../structfplot__core_1_1multiplot.html#a37bd89e10d4dcf8a97577713eaeb4143',1,'fplot_core::multiplot::draw()']]] -]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html deleted file mode 100644 index 06de155..0000000 --- a/docs/html/search/all_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js deleted file mode 100644 index 4278839..0000000 --- a/docs/html/search/all_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['earth_5fcolormap_0',['earth_colormap',['../structfplot__core_1_1earth__colormap.html',1,'fplot_core']]], - ['evaluate_1',['evaluate',['../structfplot__core_1_1delaunay__tri__surface.html#a7f77f147b8d68123f4a782ffa7bdd0be',1,'fplot_core::delaunay_tri_surface::evaluatedts_interp_1'],['../structfplot__core_1_1delaunay__tri__surface.html#aaed4c47865165797dab80d6fd11762b8',1,'fplot_core::delaunay_tri_surface::evaluatedts_interp_2']]] -]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html deleted file mode 100644 index 2544c4e..0000000 --- a/docs/html/search/all_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js deleted file mode 100644 index 1d05c68..0000000 --- a/docs/html/search/all_5.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['filled_5fplot_5fdata_0',['filled_plot_data',['../structfplot__core_1_1filled__plot__data.html',1,'fplot_core']]], - ['find_5ftriangle_1',['find_triangle',['../structfplot__core_1_1delaunay__tri__2d.html#aa0c1780f8231cd2abf87151a1914a318',1,'fplot_core::delaunay_tri_2d']]], - ['fplot_5fcore_2',['fplot_core',['../namespacefplot__core.html',1,'']]], - ['free_5fresources_3',['free_resources',['../structfplot__core_1_1plot.html#a8747b4e5569b5a025ba6264252358cfd',1,'fplot_core::plot']]] -]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html deleted file mode 100644 index 43f14ea..0000000 --- a/docs/html/search/all_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js deleted file mode 100644 index 2a1160b..0000000 --- a/docs/html/search/all_6.js +++ /dev/null @@ -1,132 +0,0 @@ -var searchData= -[ - ['get_0',['get',['../structfplot__core_1_1plot.html#aa98ef8753bb01d52623636be3b496129',1,'fplot_core::plot::get()'],['../structfplot__core_1_1multiplot.html#a3cb5a2d2f473e118f6adeb481cc8ae80',1,'fplot_core::multiplot::get()']]], - ['get_5fallow_5fsmoothing_1',['get_allow_smoothing',['../structfplot__core_1_1surface__plot.html#abb567cd750a1388b1130514713fc8c38',1,'fplot_core::surface_plot']]], - ['get_5fangle_2',['get_angle',['../structfplot__core_1_1plot__label.html#a1363a76ce4b2124cf606610f34c5289d',1,'fplot_core::plot_label']]], - ['get_5farrow_3',['get_arrow',['../structfplot__core_1_1plot.html#a95d3fb67a1e5a8be3881c98ef3dc88bd',1,'fplot_core::plot']]], - ['get_5farrow_5fcount_4',['get_arrow_count',['../structfplot__core_1_1plot.html#a3e928c6fed0bfd47b4875fa409f592c2',1,'fplot_core::plot']]], - ['get_5farrow_5fsize_5',['get_arrow_size',['../structfplot__core_1_1vector__field__plot__data.html#aa081611ba3786ab60023567662d1ab39',1,'fplot_core::vector_field_plot_data']]], - ['get_5fautoscale_6',['get_autoscale',['../structfplot__core_1_1plot__axis.html#aaaf9ace8a7b41b32aaee34f103e10ca0',1,'fplot_core::plot_axis::get_autoscale()'],['../structfplot__core_1_1plot__polar.html#adb315455f8ef25ef6a861b02ee4ef771',1,'fplot_core::plot_polar::get_autoscale()']]], - ['get_5faxes_5fstring_7',['get_axes_string',['../structfplot__core_1_1scatter__plot__data.html#a7ab0b579124a815634cbdcac8c81dde0',1,'fplot_core::scatter_plot_data::get_axes_string()'],['../structfplot__core_1_1plot__data__2d.html#abff268284715672d150a629a1f91f3fe',1,'fplot_core::plot_data_2d::get_axes_string()'],['../structfplot__core_1_1plot__data__3d.html#aafb795e54877133e338807877845ee53',1,'fplot_core::plot_data_3d::get_axes_string()'],['../structfplot__core_1_1filled__plot__data.html#a032e1917321920d2a04cf03b03f67946',1,'fplot_core::filled_plot_data::get_axes_string()']]], - ['get_5faxis_5fequal_8',['get_axis_equal',['../structfplot__core_1_1plot.html#ac7bc0d5bc86c478ec9cf19345b84c5ed',1,'fplot_core::plot']]], - ['get_5fazimuth_9',['get_azimuth',['../structfplot__core_1_1plot__3d.html#acee2c2a674fa5aadb08211e4a18a0d5a',1,'fplot_core::plot_3d']]], - ['get_5fcolor_10',['get_color',['../structfplot__core_1_1plot__arrow.html#a419e8b0aae89c5f8fd11c93787209bca',1,'fplot_core::plot_arrow']]], - ['get_5fcolor_5fdata_11',['get_color_data',['../structfplot__core_1_1plot__data__2d.html#a44277af64f3ac00c1b8891d9ab07d097',1,'fplot_core::plot_data_2d::get_color_data()'],['../structfplot__core_1_1plot__data__3d.html#a85627d579d5879fcbe35d3129e9035c3',1,'fplot_core::plot_data_3d::get_color_data()']]], - ['get_5fcolor_5fstring_12',['get_color_string',['../structfplot__core_1_1colormap.html#a03f0bef95c6a9c61ad04c63b84f8b6d5',1,'fplot_core::colormap::get_color_string()'],['../structfplot__core_1_1rainbow__colormap.html#a3acc19f954331a6310d5eb3425519f75',1,'fplot_core::rainbow_colormap::get_color_string()'],['../structfplot__core_1_1hot__colormap.html#af5a6ff4e313cf7c2f2b0091e8d25396b',1,'fplot_core::hot_colormap::get_color_string()'],['../structfplot__core_1_1cool__colormap.html#ab2806549f28dd4a194d79904497f03ce',1,'fplot_core::cool_colormap::get_color_string()'],['../structfplot__core_1_1parula__colormap.html#aab47b0c74c9a87e1a42b792cac59355e',1,'fplot_core::parula_colormap::get_color_string()'],['../structfplot__core_1_1grey__colormap.html#aec585307d1ab8f9fb7a039ac9695f58f',1,'fplot_core::grey_colormap::get_color_string()'],['../structfplot__core_1_1earth__colormap.html#ab54eea4aa31fdbb7368e0245143200ea',1,'fplot_core::earth_colormap::get_color_string()'],['../structfplot__core_1_1custom__colormap.html#acfb9922b4fc8f462310c166156b7d898',1,'fplot_core::custom_colormap::get_color_stringcustom_get_clr']]], - ['get_5fcolormap_13',['get_colormap',['../structfplot__core_1_1custom__colormap.html#ae99878b9e1218314af1adc982af6092d',1,'fplot_core::custom_colormap::get_colormap()'],['../structfplot__core_1_1plot.html#a132b8951071c0f8f15a0282625c2975e',1,'fplot_core::plot::get_colormap()']]], - ['get_5fcolumn_5fcount_14',['get_column_count',['../structfplot__core_1_1multiplot.html#afa4b9ef0d7c48a5d0365fd14147a0945',1,'fplot_core::multiplot']]], - ['get_5fcommand_5fstring_15',['get_command_string',['../structfplot__core_1_1plot__object.html#a986486fd0e463722c0d2e46d765d19d3',1,'fplot_core::plot_object::get_command_string()'],['../structfplot__core_1_1plot__label.html#a24d375efbdb3f3a4859a4f9752fa6999',1,'fplot_core::plot_label::get_command_string()'],['../structfplot__core_1_1plot__arrow.html#acdc8d52f5af979888d88401811f7f199',1,'fplot_core::plot_arrow::get_command_string()'],['../structfplot__core_1_1terminal.html#a5167d5b60a3a9dde0ddfdd9bd6a41f9c',1,'fplot_core::terminal::get_command_string()'],['../structfplot__core_1_1png__terminal.html#a54f5f9a908cdfb83a849015ca574b22f',1,'fplot_core::png_terminal::get_command_string()'],['../structfplot__core_1_1latex__terminal.html#a7b000e38ed8bb89bdeb10077855714a6',1,'fplot_core::latex_terminal::get_command_string()'],['../structfplot__core_1_1plot__axis.html#a00d4833c85b699bdff381ae05100cf6a',1,'fplot_core::plot_axis::get_command_string()'],['../structfplot__core_1_1legend.html#af7e10649da6f0aeb6c94ddad33496ed4',1,'fplot_core::legend::get_command_string()'],['../structfplot__core_1_1colormap.html#a6c06d5831f8e2bb173f2cabfc89b471e',1,'fplot_core::colormap::get_command_string()'],['../structfplot__core_1_1plot.html#a9a16fc8a4c67e031c1202754f32d1153',1,'fplot_core::plot::get_command_string()'],['../structfplot__core_1_1scatter__plot__data.html#a38752353ad9e2129840b07df8836e400',1,'fplot_core::scatter_plot_data::get_command_string()'],['../structfplot__core_1_1surface__plot__data.html#ac7a97a7065529fbf23cc78ed003d3e6b',1,'fplot_core::surface_plot_data::get_command_string()'],['../structfplot__core_1_1plot__2d.html#a82afa27b47f88385d430dd3c9b145d20',1,'fplot_core::plot_2d::get_command_string()'],['../structfplot__core_1_1plot__3d.html#a374d3655b53b1f429d2db81f375b8d86',1,'fplot_core::plot_3d::get_command_string()'],['../structfplot__core_1_1surface__plot.html#a1fc12a0c4034588eb95d67b8dc3d010b',1,'fplot_core::surface_plot::get_command_string()'],['../structfplot__core_1_1multiplot.html#a38da5245525925cd37f7dc32a88aedd7',1,'fplot_core::multiplot::get_command_string()'],['../structfplot__core_1_1plot__data__error__bars.html#ab80a5fe8b5abe4ed9b18594ad11b4e43',1,'fplot_core::plot_data_error_bars::get_command_string()'],['../structfplot__core_1_1plot__data__bar.html#a9711b599bf9cb178ed7c45ec1588aa46',1,'fplot_core::plot_data_bar::get_command_string()'],['../structfplot__core_1_1plot__bar.html#aaf330bd04f03f6f56e8c74b00bdd123e',1,'fplot_core::plot_bar::get_command_string()'],['../structfplot__core_1_1plot__data__tri__2d.html#afc5f53c3238bd1dfd1a5a0c3ade8c567',1,'fplot_core::plot_data_tri_2d::get_command_string()'],['../structfplot__core_1_1tri__surface__plot__data.html#a469efa44e12737b0ec95737f5cd3aabb',1,'fplot_core::tri_surface_plot_data::get_command_string()'],['../structfplot__core_1_1vector__field__plot__data.html#acb5a624f5190d33c63bef21abd6d191e',1,'fplot_core::vector_field_plot_data::get_command_string()'],['../structfplot__core_1_1plot__polar.html#ad1a4a767c50e8fe86d5526d45b95f794',1,'fplot_core::plot_polar::get_command_string()'],['../structfplot__core_1_1filled__plot__data.html#a5a173b2b8171077de2d77ee10a24904b',1,'fplot_core::filled_plot_data::get_command_string()']]], - ['get_5fcoordinate_5fsystem_16',['get_coordinate_system',['../structfplot__core_1_1plot__3d.html#a56ffdd5bb6cd107c22bc8a699681d993',1,'fplot_core::plot_3d']]], - ['get_5fcount_17',['get_count',['../structfplot__core_1_1plot.html#a949ae875c30e1b06cb86bb7bb8958e73',1,'fplot_core::plot::get_count()'],['../structfplot__core_1_1scatter__plot__data.html#af220d3b0ebfaba65fb9c2b9326d39d0f',1,'fplot_core::scatter_plot_data::get_count()'],['../structfplot__core_1_1plot__data__2d.html#a99a502c8e85b4eedb161e2bcab2f88c6',1,'fplot_core::plot_data_2d::get_count()'],['../structfplot__core_1_1plot__data__3d.html#a98903845197a0e6985f61e24f62b970e',1,'fplot_core::plot_data_3d::get_count()'],['../structfplot__core_1_1plot__data__error__bars.html#a3cdda0b5155304b1ce26a99c1efbb965',1,'fplot_core::plot_data_error_bars::get_count()']]], - ['get_5fdata_5fstring_18',['get_data_string',['../structfplot__core_1_1plot__data.html#a5b4c937341b806a85419f5d6968aea2d',1,'fplot_core::plot_data::get_data_string()'],['../structfplot__core_1_1plot__data__2d.html#a198cd94a65ba98cbd2423b749a572154',1,'fplot_core::plot_data_2d::get_data_string()'],['../structfplot__core_1_1plot__data__3d.html#a55720af848b61039e8de8a7357800221',1,'fplot_core::plot_data_3d::get_data_string()'],['../structfplot__core_1_1surface__plot__data.html#a41149a1d16e0dfbdeda8667abf0f50c2',1,'fplot_core::surface_plot_data::get_data_string()'],['../structfplot__core_1_1plot__data__error__bars.html#aaf126505fb7cb60f95190dccc89d0d4a',1,'fplot_core::plot_data_error_bars::get_data_string()'],['../structfplot__core_1_1plot__data__bar.html#aa5fa7de9642e1f9e520b4a43cd6f7ae7',1,'fplot_core::plot_data_bar::get_data_string()'],['../structfplot__core_1_1plot__data__tri__2d.html#a6a3428fb27e8b2d557075e605781a5bc',1,'fplot_core::plot_data_tri_2d::get_data_string()'],['../structfplot__core_1_1tri__surface__plot__data.html#abf08b1c7f2c4980d238a2a8c649af522',1,'fplot_core::tri_surface_plot_data::get_data_string()'],['../structfplot__core_1_1vector__field__plot__data.html#a35f10299e5447c27a670ec648d4dff9a',1,'fplot_core::vector_field_plot_data::get_data_string()'],['../structfplot__core_1_1filled__plot__data.html#a1a29d4771e4255a27dc5236407d14144',1,'fplot_core::filled_plot_data::get_data_string()']]], - ['get_5fdraw_5fagainst_5fy2_19',['get_draw_against_y2',['../structfplot__core_1_1plot__data__2d.html#afcbdba943a724904ce1099d8c48c8b50',1,'fplot_core::plot_data_2d::get_draw_against_y2()'],['../structfplot__core_1_1filled__plot__data.html#a2946d6a05362b47c7f01603edf4a6690',1,'fplot_core::filled_plot_data::get_draw_against_y2()']]], - ['get_5fdraw_5fborder_20',['get_draw_border',['../structfplot__core_1_1legend.html#a1ed58a0a0f295b937932dc954d154464',1,'fplot_core::legend::get_draw_border()'],['../structfplot__core_1_1colormap.html#adfde936a6669f562b17fba87e8ae8588',1,'fplot_core::colormap::get_draw_border()'],['../structfplot__core_1_1plot.html#af6ce304fe4acb418af76d672f99c1fb9',1,'fplot_core::plot::get_draw_border()']]], - ['get_5fdraw_5finside_5faxes_21',['get_draw_inside_axes',['../structfplot__core_1_1legend.html#a88c74437f8906b6d1247e662b95d8a52',1,'fplot_core::legend']]], - ['get_5fdraw_5fline_22',['get_draw_line',['../structfplot__core_1_1scatter__plot__data.html#a5f8e8427299c380b69eef4207fdac6fd',1,'fplot_core::scatter_plot_data']]], - ['get_5fdraw_5fmarkers_23',['get_draw_markers',['../structfplot__core_1_1scatter__plot__data.html#aa78996b052703cd440b579a3f19c0323',1,'fplot_core::scatter_plot_data']]], - ['get_5felevation_24',['get_elevation',['../structfplot__core_1_1plot__3d.html#a6a5612c5ea70d90368de4e738e662ee8',1,'fplot_core::plot_3d']]], - ['get_5ffilename_25',['get_filename',['../structfplot__core_1_1png__terminal.html#af9f9678ab852cd1cdf1ba93607045ad0',1,'fplot_core::png_terminal::get_filename()'],['../structfplot__core_1_1latex__terminal.html#a4a9465f48c206d9953fd9540b9d28129',1,'fplot_core::latex_terminal::get_filename()']]], - ['get_5ffill_5farrow_26',['get_fill_arrow',['../structfplot__core_1_1vector__field__plot__data.html#ac83b7d14395a9c7894ae89f86c3aeb96',1,'fplot_core::vector_field_plot_data']]], - ['get_5ffill_5fcurve_27',['get_fill_curve',['../structfplot__core_1_1scatter__plot__data.html#a574f1a94ca7ad3fbb1a1da445a50cbee',1,'fplot_core::scatter_plot_data']]], - ['get_5ffont_5fname_28',['get_font_name',['../structfplot__core_1_1terminal.html#a4958475366c740ba22f15aea8ca61efb',1,'fplot_core::terminal::get_font_name()'],['../structfplot__core_1_1plot.html#af6528d0d7a8e62f968e8818012732b09',1,'fplot_core::plot::get_font_name()'],['../structfplot__core_1_1multiplot.html#ae37d626915c86f2068a90aa643b7ec7d',1,'fplot_core::multiplot::get_font_name()']]], - ['get_5ffont_5fsize_29',['get_font_size',['../structfplot__core_1_1terminal.html#a1d21543a70c7aa857b8f6104671d3770',1,'fplot_core::terminal::get_font_size()'],['../structfplot__core_1_1plot.html#abc559881bc8d4bea9b716964e37e92ed',1,'fplot_core::plot::get_font_size()'],['../structfplot__core_1_1multiplot.html#a31171ee8993d645c5e8d60212002e1b1',1,'fplot_core::multiplot::get_font_size()']]], - ['get_5fhead_5fangle_30',['get_head_angle',['../structfplot__core_1_1plot__arrow.html#a2ac66de42f97cf794d6184c9e092f85e',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5fback_5fangle_31',['get_head_back_angle',['../structfplot__core_1_1plot__arrow.html#abfd19a819ab33659213588cd0d7dfe9c',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5ffill_32',['get_head_fill',['../structfplot__core_1_1plot__arrow.html#a4cd206c5596dbab50b91472260646f29',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5flocation_33',['get_head_location',['../structfplot__core_1_1plot__arrow.html#a65d9efb1c3a6874ffb9745b6ba67d9ae',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5fsize_34',['get_head_size',['../structfplot__core_1_1plot__arrow.html#a80eff3e2ee043866d69c4074006e00d2',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5ftype_35',['get_head_type',['../structfplot__core_1_1plot__arrow.html#a3c95cde3a7e4748f8a2906ec9404d477',1,'fplot_core::plot_arrow']]], - ['get_5fhorizontal_36',['get_horizontal',['../structfplot__core_1_1colormap.html#a11e1d8c4d776814ba9b931dea5eba55f',1,'fplot_core::colormap']]], - ['get_5fhorizontal_5fposition_37',['get_horizontal_position',['../structfplot__core_1_1legend.html#a6e4a288471d81d99105f2781dbc0944a',1,'fplot_core::legend']]], - ['get_5fid_5fstring_38',['get_id_string',['../structfplot__core_1_1terminal.html#a806a00204a80a6cc2676d2fd05179ba4',1,'fplot_core::terminal::get_id_string()'],['../structfplot__core_1_1windows__terminal.html#aa9422d9df32df6bae76145d27663f32b',1,'fplot_core::windows_terminal::get_id_string()'],['../structfplot__core_1_1qt__terminal.html#a2544ce4552975f086ec0f20ae702657d',1,'fplot_core::qt_terminal::get_id_string()'],['../structfplot__core_1_1wxt__terminal.html#aeea16e93a4be79e2687a207c405db431',1,'fplot_core::wxt_terminal::get_id_string()'],['../structfplot__core_1_1png__terminal.html#a7fc33aaa61a2ecd8d1786b573c1194e9',1,'fplot_core::png_terminal::get_id_string()'],['../structfplot__core_1_1latex__terminal.html#ae59d44e616fbad4e93bf1fc7159a44d2',1,'fplot_core::latex_terminal::get_id_string()'],['../structfplot__core_1_1plot__axis.html#a503b9d12d8a13992bdcf2d2698a90b10',1,'fplot_core::plot_axis::get_id_string()'],['../structfplot__core_1_1x__axis.html#a7cb8753743161cd7e18a3df9721b5129',1,'fplot_core::x_axis::get_id_string()'],['../structfplot__core_1_1y__axis.html#a0e82d7adc90762d6885b22d2abb9651b',1,'fplot_core::y_axis::get_id_string()'],['../structfplot__core_1_1y2__axis.html#afa3ce73eceaade01e8b3488e5dac9eea',1,'fplot_core::y2_axis::get_id_string()'],['../structfplot__core_1_1z__axis.html#a9a72041ffd57f8e2cb109e4d49d0f922',1,'fplot_core::z_axis::get_id_string()']]], - ['get_5findices_39',['get_indices',['../structfplot__core_1_1delaunay__tri__2d.html#a2a39c08bcaa4819d25684d8dbb3ee508',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fis_5flog_5fscaled_40',['get_is_log_scaled',['../structfplot__core_1_1plot__axis.html#a1826e039d7a1726fc8c19a5215158708',1,'fplot_core::plot_axis']]], - ['get_5fis_5fopaque_41',['get_is_opaque',['../structfplot__core_1_1legend.html#a116ec03262065d54826f531c5b2e636e',1,'fplot_core::legend']]], - ['get_5fis_5fvisible_42',['get_is_visible',['../structfplot__core_1_1plot__label.html#a6a58bbc93d4a081c10b912da6273fa03',1,'fplot_core::plot_label::get_is_visible()'],['../structfplot__core_1_1plot__arrow.html#aa8b6628e7136aa166c1e6205dc4dc169',1,'fplot_core::plot_arrow::get_is_visible()'],['../structfplot__core_1_1legend.html#aba8ff6b836a1fd2fefe41fc58751834b',1,'fplot_core::legend::get_is_visible()']]], - ['get_5flabel_43',['get_label',['../structfplot__core_1_1colormap.html#ae06b58a108c1805c3ab2138dc31bd326',1,'fplot_core::colormap::get_label()'],['../structfplot__core_1_1plot.html#a05d9262e904709835f79533d63eba64e',1,'fplot_core::plot::get_labelplt_get_label']]], - ['get_5flabel_5fcount_44',['get_label_count',['../structfplot__core_1_1plot.html#ab6240e8f98ecc508d3bc39adc44e8a6c',1,'fplot_core::plot']]], - ['get_5flayout_45',['get_layout',['../structfplot__core_1_1legend.html#a0692cc15c73eac64351831d3d4d28eb0',1,'fplot_core::legend']]], - ['get_5flegend_46',['get_legend',['../structfplot__core_1_1plot.html#abf7fb454462b1d553fe3995575f77d15',1,'fplot_core::plot']]], - ['get_5flight_5fintensity_47',['get_light_intensity',['../structfplot__core_1_1surface__plot.html#a23afb86c55364a3669f9e995d256c55c',1,'fplot_core::surface_plot']]], - ['get_5flimits_48',['get_limits',['../structfplot__core_1_1plot__axis.html#a025972a1e5bdd167cfd1e605798f3236',1,'fplot_core::plot_axis']]], - ['get_5fline_5fcolor_49',['get_line_color',['../structfplot__core_1_1plot__data__colored.html#aafd241043c19b55b90412b77766da1bd',1,'fplot_core::plot_data_colored']]], - ['get_5fline_5fstyle_50',['get_line_style',['../structfplot__core_1_1plot__arrow.html#a5689908ce348e110e19a14968bb41315',1,'fplot_core::plot_arrow::get_line_style()'],['../structfplot__core_1_1scatter__plot__data.html#a207dc9773f6dd173799dd607c4e321b6',1,'fplot_core::scatter_plot_data::get_line_style()'],['../structfplot__core_1_1plot__data__tri__2d.html#acd24f81dd3ea6e560ef8967762365c59',1,'fplot_core::plot_data_tri_2d::get_line_style()']]], - ['get_5fline_5fwidth_51',['get_line_width',['../structfplot__core_1_1plot__arrow.html#aa054166ee5ab324006aa3a79bcccb2d7',1,'fplot_core::plot_arrow::get_line_width()'],['../structfplot__core_1_1scatter__plot__data.html#acfab9f133dae8af4eee2a0151d3cb8e7',1,'fplot_core::scatter_plot_data::get_line_width()'],['../structfplot__core_1_1plot__data__tri__2d.html#a1d6f55f5124ea7fed1db1e1682415f72',1,'fplot_core::plot_data_tri_2d::get_line_width()']]], - ['get_5fmarker_5ffrequency_52',['get_marker_frequency',['../structfplot__core_1_1scatter__plot__data.html#abecca27ba9033242c9cb76692bb8d9ec',1,'fplot_core::scatter_plot_data']]], - ['get_5fmarker_5fscaling_53',['get_marker_scaling',['../structfplot__core_1_1scatter__plot__data.html#a3a09033deefd1c5d3157dff1a0b4c05d',1,'fplot_core::scatter_plot_data']]], - ['get_5fmarker_5fstyle_54',['get_marker_style',['../structfplot__core_1_1scatter__plot__data.html#af7386b5c9cecb7c57e619185f0284ee6',1,'fplot_core::scatter_plot_data']]], - ['get_5fmove_5fto_5ffront_55',['get_move_to_front',['../structfplot__core_1_1plot__arrow.html#a6beddd6f29376f864ed6515b2936badb',1,'fplot_core::plot_arrow']]], - ['get_5fname_56',['get_name',['../structfplot__core_1_1plot__data.html#a445f80b716146d6087d2f1adaa4b98bf',1,'fplot_core::plot_data']]], - ['get_5fplot_5fcount_57',['get_plot_count',['../structfplot__core_1_1multiplot.html#a354b6419ea8889d27a789c11d19d30ae',1,'fplot_core::multiplot']]], - ['get_5fplot_5fwindow_5fnumber_58',['get_plot_window_number',['../structfplot__core_1_1terminal.html#a791d7842cbb35ef499cbc9089f5921eb',1,'fplot_core::terminal']]], - ['get_5fplot_5fx_5ferror_5fbars_59',['get_plot_x_error_bars',['../structfplot__core_1_1plot__data__error__bars.html#a680ba7316765bc7c4b00c603ccf96a05',1,'fplot_core::plot_data_error_bars']]], - ['get_5fplot_5fy_5ferror_5fbars_60',['get_plot_y_error_bars',['../structfplot__core_1_1plot__data__error__bars.html#a44eac08eca6a448fb2424a3ca4e9b3cc',1,'fplot_core::plot_data_error_bars']]], - ['get_5fpoint_5fcount_61',['get_point_count',['../structfplot__core_1_1delaunay__tri__2d.html#ae0e68fb12ac6ce70da9bf03a4f77778d',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fpoint_5fsize_5fdata_62',['get_point_size_data',['../structfplot__core_1_1plot__data__2d.html#a703b322285b948322b82b1450ddb89f3',1,'fplot_core::plot_data_2d::get_point_size_data()'],['../structfplot__core_1_1plot__data__3d.html#ae49068baed9bb95fed74268ea24ac3ac',1,'fplot_core::plot_data_3d::get_point_size_data()']]], - ['get_5fpoints_5fx_63',['get_points_x',['../structfplot__core_1_1delaunay__tri__2d.html#abdaa5a6e385627ba0c0525c4b9d7427b',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fpoints_5fy_64',['get_points_y',['../structfplot__core_1_1delaunay__tri__2d.html#acaac501f173450d34594d3b6f36caa51',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fpoints_5fz_65',['get_points_z',['../structfplot__core_1_1delaunay__tri__surface.html#a87a65ab9d6e614217b738e40bcca3688',1,'fplot_core::delaunay_tri_surface']]], - ['get_5fposition_66',['get_position',['../structfplot__core_1_1plot__label.html#a683715b72ba17d79b0f7f75ce6223ab2',1,'fplot_core::plot_label']]], - ['get_5fradial_5flimits_67',['get_radial_limits',['../structfplot__core_1_1plot__polar.html#a24177754fa37e095f2500a8f0d9cf269',1,'fplot_core::plot_polar']]], - ['get_5frow_5fcount_68',['get_row_count',['../structfplot__core_1_1multiplot.html#af8e5de63b2d4424ef31c6454f0b4a441',1,'fplot_core::multiplot']]], - ['get_5fshow_5fcolorbar_69',['get_show_colorbar',['../structfplot__core_1_1plot.html#a5b11d0a4762b08daa7176b50d2d445fd',1,'fplot_core::plot']]], - ['get_5fshow_5fcontours_70',['get_show_contours',['../structfplot__core_1_1surface__plot.html#a3a41ac572a7b31cf23e582ee8023d651',1,'fplot_core::surface_plot']]], - ['get_5fshow_5fgridlines_71',['get_show_gridlines',['../structfplot__core_1_1plot.html#ad6c6e15a4b1d960252b5bfe1d380a5f3',1,'fplot_core::plot']]], - ['get_5fshow_5fhidden_72',['get_show_hidden',['../structfplot__core_1_1surface__plot.html#ab30c5358ab2f8852753150774befd898',1,'fplot_core::surface_plot']]], - ['get_5fshow_5ftics_73',['get_show_tics',['../structfplot__core_1_1colormap.html#a0800d95684d4756cae09f365a8e93b5d',1,'fplot_core::colormap']]], - ['get_5fsimplification_5ffactor_74',['get_simplification_factor',['../structfplot__core_1_1scatter__plot__data.html#a9e1b45badadfa1bda1b20ea8d9a2f1fe',1,'fplot_core::scatter_plot_data']]], - ['get_5fsimplify_5fdata_75',['get_simplify_data',['../structfplot__core_1_1scatter__plot__data.html#a0d0755bca68c8c758bc7f5ab880f65e3',1,'fplot_core::scatter_plot_data']]], - ['get_5fsize_76',['get_size',['../structfplot__core_1_1surface__plot__data.html#a3a90bfbfccf24c272e1bd151167cf8ae',1,'fplot_core::surface_plot_data']]], - ['get_5fspecular_5fintensity_77',['get_specular_intensity',['../structfplot__core_1_1surface__plot.html#a88ad210fb239e4ef9943c805b73add68',1,'fplot_core::surface_plot']]], - ['get_5fsquare_5faxes_78',['get_square_axes',['../structfplot__core_1_1plot__2d.html#ae408393a833c5978996701ab198ba0bb',1,'fplot_core::plot_2d']]], - ['get_5fstring_5fresult_79',['get_string_result',['../interfacefplot__core_1_1get__string__result.html',1,'fplot_core']]], - ['get_5ftail_5flocation_80',['get_tail_location',['../structfplot__core_1_1plot__arrow.html#a4ad925efaa9bb101c20799ba29028d52',1,'fplot_core::plot_arrow']]], - ['get_5fterminal_81',['get_terminal',['../structfplot__core_1_1plot.html#ad2401d852a81076fe72cf8a808fde792',1,'fplot_core::plot::get_terminal()'],['../structfplot__core_1_1multiplot.html#a3e773ed8f697086383a91cfc88be412b',1,'fplot_core::multiplot::get_terminal()']]], - ['get_5ftext_82',['get_text',['../structfplot__core_1_1plot__label.html#a7c60aed4792e8700e1154e213d0cb92e',1,'fplot_core::plot_label']]], - ['get_5ftheta_5fdirection_83',['get_theta_direction',['../structfplot__core_1_1plot__polar.html#aa2baa0c84a23e7c3069ce2fcd4050e7e',1,'fplot_core::plot_polar']]], - ['get_5ftheta_5fstart_5fposition_84',['get_theta_start_position',['../structfplot__core_1_1plot__polar.html#afeb1ddee4cb09260fd4f92a4e70e8e18',1,'fplot_core::plot_polar']]], - ['get_5ftic_5flabel_5fformat_85',['get_tic_label_format',['../structfplot__core_1_1plot__axis.html#adf896e948d36fc834734ba6abccbe9d1',1,'fplot_core::plot_axis']]], - ['get_5ftics_5finward_86',['get_tics_inward',['../structfplot__core_1_1plot.html#a688f3645c69308cf608231a21b0aed64',1,'fplot_core::plot']]], - ['get_5ftitle_87',['get_title',['../structfplot__core_1_1terminal.html#ac706187861e60e83f2d327ed86175bb3',1,'fplot_core::terminal::get_title()'],['../structfplot__core_1_1plot__axis.html#af93e4f7ff1f6ea1823a45a92a272f91c',1,'fplot_core::plot_axis::get_title()'],['../structfplot__core_1_1plot.html#a133ef2de58d480ba1a3192cc26a5c58d',1,'fplot_core::plot::get_title()'],['../structfplot__core_1_1multiplot.html#a53b06b534a0fd70fb17323ec5bb9b063',1,'fplot_core::multiplot::get_title()']]], - ['get_5ftransparency_88',['get_transparency',['../structfplot__core_1_1surface__plot.html#a16dbdc679951a0f58e449349d7d5c3c0',1,'fplot_core::surface_plot']]], - ['get_5ftriangle_5fcount_89',['get_triangle_count',['../structfplot__core_1_1delaunay__tri__2d.html#a74c3e196311190b91f8889f756edf630',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fuse_5fdata_5fdependent_5fcolors_90',['get_use_data_dependent_colors',['../structfplot__core_1_1scatter__plot__data.html#a65e5e58525b877b9bfd4873dc7b2e9e4',1,'fplot_core::scatter_plot_data::get_use_data_dependent_colors()'],['../structfplot__core_1_1vector__field__plot__data.html#a1c8d0b54c39a88ec703fe887395d9de1',1,'fplot_core::vector_field_plot_data::get_use_data_dependent_colors()']]], - ['get_5fuse_5fdefault_5fsize_91',['get_use_default_size',['../structfplot__core_1_1plot__arrow.html#aacd237f46dd75db4cd7da3e6149b4dae',1,'fplot_core::plot_arrow']]], - ['get_5fuse_5fdefault_5ftic_5flabel_5fformat_92',['get_use_default_tic_label_format',['../structfplot__core_1_1plot__axis.html#a43b1a4ecac087b3b84d9019383d1030e',1,'fplot_core::plot_axis']]], - ['get_5fuse_5ferror_5fbox_93',['get_use_error_box',['../structfplot__core_1_1plot__data__error__bars.html#a8420ea83599f290a9cd54754b292b2b4',1,'fplot_core::plot_data_error_bars']]], - ['get_5fuse_5flighting_94',['get_use_lighting',['../structfplot__core_1_1surface__plot.html#a66de771aa5424068059cc90db5150393',1,'fplot_core::surface_plot']]], - ['get_5fuse_5fmap_5fview_95',['get_use_map_view',['../structfplot__core_1_1plot__3d.html#ad61ad94ee9d573d1d51aa8cf463c59b4',1,'fplot_core::plot_3d']]], - ['get_5fuse_5frange_96',['get_use_range',['../structfplot__core_1_1plot__data__error__bars.html#adba3954ad57120529148371629340091',1,'fplot_core::plot_data_error_bars']]], - ['get_5fuse_5fvariable_5fsize_5fpoints_97',['get_use_variable_size_points',['../structfplot__core_1_1scatter__plot__data.html#ae7263aa5d4f1fb5fdd8941a7c69a19a3',1,'fplot_core::scatter_plot_data']]], - ['get_5fuse_5fwireframe_98',['get_use_wireframe',['../structfplot__core_1_1surface__plot__data.html#a0d2cebb75afa92984e700aaa36251683',1,'fplot_core::surface_plot_data::get_use_wireframe()'],['../structfplot__core_1_1tri__surface__plot__data.html#a3fc771c7f1bdb8104ae08fabf6c665dd',1,'fplot_core::tri_surface_plot_data::get_use_wireframe()']]], - ['get_5fuse_5fy2_5faxis_99',['get_use_y2_axis',['../structfplot__core_1_1plot__2d.html#a90474e948b36c694223ab528dedcd2bc',1,'fplot_core::plot_2d']]], - ['get_5fvertical_5fposition_100',['get_vertical_position',['../structfplot__core_1_1legend.html#abb44e0b424ee3a9170fc4ddecf39c481',1,'fplot_core::legend']]], - ['get_5fwindow_5fheight_101',['get_window_height',['../structfplot__core_1_1terminal.html#ab368a38267c496220bea42ea79be8413',1,'fplot_core::terminal']]], - ['get_5fwindow_5fwidth_102',['get_window_width',['../structfplot__core_1_1terminal.html#adc47a1a1c7156f8f2adf8510193ee26c',1,'fplot_core::terminal']]], - ['get_5fx_103',['get_x',['../structfplot__core_1_1scatter__plot__data.html#a12a4a9e221cd17546332eab66ee3587f',1,'fplot_core::scatter_plot_data::get_x()'],['../structfplot__core_1_1plot__data__2d.html#a83fd2bbcc7a8db64d64fa2e4f8540698',1,'fplot_core::plot_data_2d::get_x()'],['../structfplot__core_1_1plot__data__3d.html#a73ca5dfd8f294a9c6b5f84767bebaad2',1,'fplot_core::plot_data_3d::get_x()'],['../structfplot__core_1_1surface__plot__data.html#aaf4084060174d016296cf8cedc37b34a',1,'fplot_core::surface_plot_data::get_x()']]], - ['get_5fx_5faxis_104',['get_x_axis',['../structfplot__core_1_1plot__2d.html#af162aeb3b01f1d64c741889a0cd58cc8',1,'fplot_core::plot_2d::get_x_axis()'],['../structfplot__core_1_1plot__3d.html#afe5605d48034ee94fbaf08af6d47e59f',1,'fplot_core::plot_3d::get_x_axis()']]], - ['get_5fx_5fdata_105',['get_x_data',['../structfplot__core_1_1plot__data__2d.html#a191daa9d59fb985eae560be76e826d2c',1,'fplot_core::plot_data_2d::get_x_data()'],['../structfplot__core_1_1plot__data__3d.html#a13c7c8e4c4ecb9fb80aee24b75a5cff3',1,'fplot_core::plot_data_3d::get_x_data()']]], - ['get_5fy_106',['get_y',['../structfplot__core_1_1scatter__plot__data.html#a593db6ad20d55e9f6240d66713352a26',1,'fplot_core::scatter_plot_data::get_y()'],['../structfplot__core_1_1plot__data__2d.html#a97d6c5a96add7522152fe8b3146081d6',1,'fplot_core::plot_data_2d::get_y()'],['../structfplot__core_1_1plot__data__3d.html#a487acf51a34ff00fe81c8b9156fafc5a',1,'fplot_core::plot_data_3d::get_y()'],['../structfplot__core_1_1surface__plot__data.html#ae6395f27b33c147226f04afdd4d08471',1,'fplot_core::surface_plot_data::get_y()']]], - ['get_5fy2_5faxis_107',['get_y2_axis',['../structfplot__core_1_1plot__2d.html#a3f312d0ddd992171e7fef6ac7b142698',1,'fplot_core::plot_2d']]], - ['get_5fy_5faxis_108',['get_y_axis',['../structfplot__core_1_1plot__2d.html#ab423155405406198f9d01bbba1311baf',1,'fplot_core::plot_2d::get_y_axis()'],['../structfplot__core_1_1plot__3d.html#ad39ce86017565371155ce84eacfd2086',1,'fplot_core::plot_3d::get_y_axis()']]], - ['get_5fy_5fdata_109',['get_y_data',['../structfplot__core_1_1plot__data__2d.html#a1f46fa50e4d2a1eaff9d881b614f3122',1,'fplot_core::plot_data_2d::get_y_data()'],['../structfplot__core_1_1plot__data__3d.html#a88c4206070248fb431e0456945669bae',1,'fplot_core::plot_data_3d::get_y_datapd3d_get_y_array']]], - ['get_5fz_110',['get_z',['../structfplot__core_1_1plot__data__3d.html#a6513639ef9e865478e7fcfd556aa1111',1,'fplot_core::plot_data_3d::get_z()'],['../structfplot__core_1_1surface__plot__data.html#a9405a52b7728bef74de50586d23b2f28',1,'fplot_core::surface_plot_data::get_z()']]], - ['get_5fz_5faxis_111',['get_z_axis',['../structfplot__core_1_1plot__3d.html#a3606b1bf32567c8ae6f02b644b2b36ab',1,'fplot_core::plot_3d']]], - ['get_5fz_5fdata_112',['get_z_data',['../structfplot__core_1_1plot__data__3d.html#aa9b1507e1841fda61fc9be8a5a0a7013',1,'fplot_core::plot_data_3d']]], - ['get_5fz_5fintersect_5fxy_113',['get_z_intersect_xy',['../structfplot__core_1_1plot__3d.html#af09cbbc43c987f15e906e5a1b5d0d8cc',1,'fplot_core::plot_3d']]], - ['get_5fzero_5faxis_114',['get_zero_axis',['../structfplot__core_1_1plot__axis.html#a26ec236090b21f9e30770de3a2487f56',1,'fplot_core::plot_axis']]], - ['get_5fzero_5faxis_5fline_5fwidth_115',['get_zero_axis_line_width',['../structfplot__core_1_1plot__axis.html#a89c204ec15cf6688768cc27252316228',1,'fplot_core::plot_axis']]], - ['gnuplot_5fdefault_5ffont_5fsize_116',['gnuplot_default_font_size',['../namespacefplot__core.html#af51438c2c528d43662a1456d4f9fbb33',1,'fplot_core']]], - ['gnuplot_5fdefault_5ffontname_117',['gnuplot_default_fontname',['../namespacefplot__core.html#a41bb6a9ffc3ebb502d54af9a7ce540e7',1,'fplot_core']]], - ['gnuplot_5fdefault_5fwindow_5fheight_118',['gnuplot_default_window_height',['../namespacefplot__core.html#a6210b9335ccb79ff288de84dd741f0e0',1,'fplot_core']]], - ['gnuplot_5fdefault_5fwindow_5fwidth_119',['gnuplot_default_window_width',['../namespacefplot__core.html#a45b6c532e70244ebf23ff21eb596223b',1,'fplot_core']]], - ['gnuplot_5fmax_5flabel_5flength_120',['gnuplot_max_label_length',['../namespacefplot__core.html#a7e9ac1526f3f84a70eb10c98aff73610',1,'fplot_core']]], - ['gnuplot_5fmax_5fpath_5flength_121',['gnuplot_max_path_length',['../namespacefplot__core.html#a40ff0463a668b977d2fab03d3d8a6dde',1,'fplot_core']]], - ['gnuplot_5fterminal_5flatex_122',['gnuplot_terminal_latex',['../namespacefplot__core.html#adadfa5448d65da7362e445ee1fe61b10',1,'fplot_core']]], - ['gnuplot_5fterminal_5fpng_123',['gnuplot_terminal_png',['../namespacefplot__core.html#af1ace6143d83970cbfe69d7289c427d9',1,'fplot_core']]], - ['gnuplot_5fterminal_5fqt_124',['gnuplot_terminal_qt',['../namespacefplot__core.html#a512870ac9b979c4b0ea2804fbbb02a7d',1,'fplot_core']]], - ['gnuplot_5fterminal_5fwin32_125',['gnuplot_terminal_win32',['../namespacefplot__core.html#acf7693c9998a266f3cf50510b2cc06e9',1,'fplot_core']]], - ['gnuplot_5fterminal_5fwxt_126',['gnuplot_terminal_wxt',['../namespacefplot__core.html#a127138d0cab0e51e9c5f3fdcfdf033ac',1,'fplot_core']]], - ['green_127',['green',['../structfplot__core_1_1color.html#aa710db5291759d15263ecfb69a8d693c',1,'fplot_core::color']]], - ['grey_5fcolormap_128',['grey_colormap',['../structfplot__core_1_1grey__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html deleted file mode 100644 index af52f82..0000000 --- a/docs/html/search/all_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js deleted file mode 100644 index fa74e08..0000000 --- a/docs/html/search/all_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hot_5fcolormap_0',['hot_colormap',['../structfplot__core_1_1hot__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html deleted file mode 100644 index cf2b5df..0000000 --- a/docs/html/search/all_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js deleted file mode 100644 index 16efcb2..0000000 --- a/docs/html/search/all_8.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['initialize_0',['initialize',['../structfplot__core_1_1plot.html#ada6347bd02ef1b85a1206ef1a6a72f91',1,'fplot_core::plot::initialize()'],['../structfplot__core_1_1plot__2d.html#a14de301a52d28381d2e20e8b61e7b90f',1,'fplot_core::plot_2d::initialize()'],['../structfplot__core_1_1plot__3d.html#af2f00319633a96dfc5961129671126f1',1,'fplot_core::plot_3d::initialize()'],['../structfplot__core_1_1surface__plot.html#afdc405472449e47ac82e3cc7af3bd63d',1,'fplot_core::surface_plot::initialize()'],['../structfplot__core_1_1multiplot.html#a765c22060cbe884515bc3a73bfef30f7',1,'fplot_core::multiplot::initialize()'],['../structfplot__core_1_1plot__polar.html#a6d386c4b4669e96aa128e17b0d0e3e86',1,'fplot_core::plot_polar::initialize()']]], - ['is_5ftitle_5fdefined_1',['is_title_defined',['../structfplot__core_1_1plot__axis.html#a726c620a8c7921f455900cb5bec1e0c7',1,'fplot_core::plot_axis::is_title_defined()'],['../structfplot__core_1_1plot.html#a49cd3527b815c57b7f0aaf163686c385',1,'fplot_core::plot::is_title_defined()'],['../structfplot__core_1_1multiplot.html#a77d68800c07166876bd9dae972caf094',1,'fplot_core::multiplot::is_title_defined()']]] -]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html deleted file mode 100644 index 690785a..0000000 --- a/docs/html/search/all_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js deleted file mode 100644 index 23c8f48..0000000 --- a/docs/html/search/all_9.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['latex_5fterminal_0',['latex_terminal',['../structfplot__core_1_1latex__terminal.html',1,'fplot_core']]], - ['legend_1',['legend',['../structfplot__core_1_1legend.html',1,'fplot_core']]], - ['legend_5farrange_5fhorizontally_2',['legend_arrange_horizontally',['../namespacefplot__core.html#aec8d0376074fdd025c81e810bc4ffc42',1,'fplot_core']]], - ['legend_5farrange_5fvertically_3',['legend_arrange_vertically',['../namespacefplot__core.html#aaf0ef9b39969cd446f0fbb9b53dc6615',1,'fplot_core']]], - ['legend_5fbottom_4',['legend_bottom',['../namespacefplot__core.html#afaa74509b5150505854f6f411109dfdb',1,'fplot_core']]], - ['legend_5fcenter_5',['legend_center',['../namespacefplot__core.html#a0ec74b411859c62e7bf0c1df535d39a5',1,'fplot_core']]], - ['legend_5fleft_6',['legend_left',['../namespacefplot__core.html#a63d667dd9f14cc6ec61c999dd5dda272',1,'fplot_core']]], - ['legend_5fright_7',['legend_right',['../namespacefplot__core.html#a99373c8db502d4106c9597f3303b6fa9',1,'fplot_core']]], - ['legend_5ftop_8',['legend_top',['../namespacefplot__core.html#aeddce321c79b9d2e69356b06ba656c88',1,'fplot_core']]], - ['line_5fdash_5fdot_5fdot_9',['line_dash_dot_dot',['../namespacefplot__core.html#ad6f904d0b43c5063d0f6b41d90abdbea',1,'fplot_core']]], - ['line_5fdash_5fdotted_10',['line_dash_dotted',['../namespacefplot__core.html#a18af0338b6f5f050d826afcf78918bc2',1,'fplot_core']]], - ['line_5fdashed_11',['line_dashed',['../namespacefplot__core.html#ae9305c0a47c3fb21e45154a0b9457353',1,'fplot_core']]], - ['line_5fdotted_12',['line_dotted',['../namespacefplot__core.html#ab81a32face043abe51b8740e56c816b2',1,'fplot_core']]], - ['line_5fsolid_13',['line_solid',['../namespacefplot__core.html#ac41508e74ce45d09f835bd676ea7d3d6',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html deleted file mode 100644 index f2f3d3a..0000000 --- a/docs/html/search/all_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js deleted file mode 100644 index 4dc55b9..0000000 --- a/docs/html/search/all_a.js +++ /dev/null @@ -1,117 +0,0 @@ -var searchData= -[ - ['m_5falpha_0',['m_alpha',['../structfplot__core_1_1plot__data__bar.html#ada9be13d82f4a51e832327bd586c8532',1,'fplot_core::plot_data_bar']]], - ['m_5fangle_1',['m_angle',['../structfplot__core_1_1plot__label.html#ad76a1f42a6fc7701e8eff8a10d456eb4',1,'fplot_core::plot_label']]], - ['m_5farrows_2',['m_arrows',['../structfplot__core_1_1plot.html#a4377389ba8b66d31852367a81eefee27',1,'fplot_core::plot']]], - ['m_5farrowsize_3',['m_arrowsize',['../structfplot__core_1_1vector__field__plot__data.html#adb43db20bfd010f251c8141acf894e23',1,'fplot_core::vector_field_plot_data']]], - ['m_5fautoscale_4',['m_autoscale',['../structfplot__core_1_1plot__axis.html#ae7035c7f62f8ec51ac458edf459655c2',1,'fplot_core::plot_axis::m_autoscale'],['../structfplot__core_1_1plot__polar.html#aae0b529ac9a469cd9ec3e04a125894e7',1,'fplot_core::plot_polar::m_autoscale']]], - ['m_5faxisequal_5',['m_axisequal',['../structfplot__core_1_1plot.html#a9a39b7ef7066651e8acd9cf4777941b0',1,'fplot_core::plot']]], - ['m_5faxislabels_6',['m_axislabels',['../structfplot__core_1_1plot__data__bar.html#ad6ae990580ab689aebe3e4114d650f5f',1,'fplot_core::plot_data_bar']]], - ['m_5faxiswidth_7',['m_axiswidth',['../structfplot__core_1_1plot__axis.html#ac9130dccdf4506356085dc77982f23eb',1,'fplot_core::plot_axis']]], - ['m_5fazimuth_8',['m_azimuth',['../structfplot__core_1_1plot__3d.html#a31e7daa0c6029d65bbe6dfc370e09f75',1,'fplot_core::plot_3d']]], - ['m_5fbardata_9',['m_bardata',['../structfplot__core_1_1plot__data__bar.html#ae3afc4495088f5ec9a7f0414470d97b0',1,'fplot_core::plot_data_bar']]], - ['m_5fbarwidth_10',['m_barwidth',['../structfplot__core_1_1plot__bar.html#a11075431e357389d21760413660a69de',1,'fplot_core::plot_bar']]], - ['m_5fbincount_11',['m_bincount',['../structfplot__core_1_1plot__data__histogram.html#a2ea6672bfb4cdfcf27f3a731f4c6cf4f',1,'fplot_core::plot_data_histogram']]], - ['m_5fbox_12',['m_box',['../structfplot__core_1_1legend.html#a195d911a2ffb3e4d8d8229b21745db72',1,'fplot_core::legend::m_box'],['../structfplot__core_1_1plot__data__error__bars.html#a0e904bfb3fe7d81b6776040af4461f8e',1,'fplot_core::plot_data_error_bars::m_box']]], - ['m_5fcolor_13',['m_color',['../structfplot__core_1_1plot__data__colored.html#aa24c061813c26938c9001c049f6aa40f',1,'fplot_core::plot_data_colored']]], - ['m_5fcolorindex_14',['m_colorindex',['../structfplot__core_1_1plot__data__colored.html#a65e7ab13ce7635e4367dca109b168f76',1,'fplot_core::plot_data_colored::m_colorindex'],['../structfplot__core_1_1plot.html#a423c6b5d5a4077e12672a789d0dd07f4',1,'fplot_core::plot::m_colorindex']]], - ['m_5fcolormap_15',['m_colormap',['../structfplot__core_1_1plot.html#a124d1fc324d2ac66811305862a1818bd',1,'fplot_core::plot']]], - ['m_5fcols_16',['m_cols',['../structfplot__core_1_1multiplot.html#ac43b0757815bd163133a4863314725f9',1,'fplot_core::multiplot']]], - ['m_5fcontour_17',['m_contour',['../structfplot__core_1_1surface__plot.html#a07676b9f7be385dbfb2fcc9c547e86e1',1,'fplot_core::surface_plot']]], - ['m_5fcsys_18',['m_csys',['../structfplot__core_1_1plot__3d.html#a13ce047bd142425ca9c96fd57d126231',1,'fplot_core::plot_3d']]], - ['m_5fdata_19',['m_data',['../structfplot__core_1_1plot.html#a955e9ed1d0626325807467f18928f7af',1,'fplot_core::plot::m_data'],['../structfplot__core_1_1plot__data__2d.html#a35abd4e024ea4e55c55dedcab8e5e3bf',1,'fplot_core::plot_data_2d::m_data'],['../structfplot__core_1_1plot__data__3d.html#a05d33e3351193d2e471083589d3ccb60',1,'fplot_core::plot_data_3d::m_data'],['../structfplot__core_1_1plot__data__error__bars.html#a3082871ea6a5b153a9f9a1dc36ef42f9',1,'fplot_core::plot_data_error_bars::m_data'],['../structfplot__core_1_1vector__field__plot__data.html#ab8f9fd516cb896988615cd6a378eb7e1',1,'fplot_core::vector_field_plot_data::m_data'],['../structfplot__core_1_1filled__plot__data.html#a0237475fa98251222f26abe67f43cf61',1,'fplot_core::filled_plot_data::m_data']]], - ['m_5fdatadependentcolors_20',['m_datadependentcolors',['../structfplot__core_1_1scatter__plot__data.html#a5177e61ef1056be4a7be88c85d129554',1,'fplot_core::scatter_plot_data']]], - ['m_5fdefaultticlabels_21',['m_defaultticlabels',['../structfplot__core_1_1plot__axis.html#af7ffb68c817546118481d46b513397b4',1,'fplot_core::plot_axis']]], - ['m_5fdrawborder_22',['m_drawborder',['../structfplot__core_1_1colormap.html#a3995a2a4d9661f991749686740db28ea',1,'fplot_core::colormap::m_drawborder'],['../structfplot__core_1_1plot.html#aa6041d60ec2b7939ff62dfe315c533bb',1,'fplot_core::plot::m_drawborder']]], - ['m_5fdrawline_23',['m_drawline',['../structfplot__core_1_1scatter__plot__data.html#a06df1b2ace5394328f5cc69c56aae2fe',1,'fplot_core::scatter_plot_data']]], - ['m_5fdrawmarkers_24',['m_drawmarkers',['../structfplot__core_1_1scatter__plot__data.html#ab22889699bb2ac1e437760ae3053e61f',1,'fplot_core::scatter_plot_data']]], - ['m_5felevation_25',['m_elevation',['../structfplot__core_1_1plot__3d.html#a20016816cd703ecc6902755c9506f954',1,'fplot_core::plot_3d']]], - ['m_5ffilled_26',['m_filled',['../structfplot__core_1_1plot__data__bar.html#ab390e7a9d6d8a0ca0ee2e42397e8da36',1,'fplot_core::plot_data_bar']]], - ['m_5ffilledcurve_27',['m_filledcurve',['../structfplot__core_1_1scatter__plot__data.html#ae502a1cb64b81989b2ae30e0498fb2a3',1,'fplot_core::scatter_plot_data']]], - ['m_5ffilledheads_28',['m_filledheads',['../structfplot__core_1_1vector__field__plot__data.html#abfd90138c5821640f049c79d587c6939',1,'fplot_core::vector_field_plot_data']]], - ['m_5ffname_29',['m_fname',['../structfplot__core_1_1png__terminal.html#acea6ab706e5e45c059be85af178adb77',1,'fplot_core::png_terminal::m_fname'],['../structfplot__core_1_1latex__terminal.html#a13910c1c0e215397ebc3125423f2ad3b',1,'fplot_core::latex_terminal::m_fname']]], - ['m_5ffontname_30',['m_fontname',['../structfplot__core_1_1terminal.html#a65c25946f36a8146b5d189cad922259e',1,'fplot_core::terminal']]], - ['m_5ffontsize_31',['m_fontsize',['../structfplot__core_1_1terminal.html#a92e1f3f32996f5ca36f87a4ca73e8406',1,'fplot_core::terminal']]], - ['m_5fhastitle_32',['m_hastitle',['../structfplot__core_1_1terminal.html#a313c30a86f2e84b24394fc88802ac073',1,'fplot_core::terminal::m_hastitle'],['../structfplot__core_1_1plot__axis.html#afaee6697e2ae5d4c15274ef6d1b1bebf',1,'fplot_core::plot_axis::m_hastitle'],['../structfplot__core_1_1plot.html#a3e292f8044d1c963bde7a45a5fd091f5',1,'fplot_core::plot::m_hastitle'],['../structfplot__core_1_1multiplot.html#a6d0402f03382c3bf29b50d4f06fad597',1,'fplot_core::multiplot::m_hastitle']]], - ['m_5fhorizontal_33',['m_horizontal',['../structfplot__core_1_1colormap.html#a85b7ea506d0dfd74b7a851e190e5e9e0',1,'fplot_core::colormap']]], - ['m_5fhorzposition_34',['m_horzposition',['../structfplot__core_1_1legend.html#a4751dde9054923257d25204e3924d11b',1,'fplot_core::legend']]], - ['m_5fid_35',['m_id',['../structfplot__core_1_1windows__terminal.html#af215f20aa2e4e2de14bed3f928a4f40f',1,'fplot_core::windows_terminal::m_id'],['../structfplot__core_1_1qt__terminal.html#ae7f815fdba921412c5befb8778584079',1,'fplot_core::qt_terminal::m_id'],['../structfplot__core_1_1wxt__terminal.html#a1d5b03366bc38e5ae7dab696b40d5ccb',1,'fplot_core::wxt_terminal::m_id'],['../structfplot__core_1_1png__terminal.html#ab960a72618e8aaa0fdda0290b11c33d2',1,'fplot_core::png_terminal::m_id'],['../structfplot__core_1_1latex__terminal.html#a3f10978cef31279b35dda56bdb5bca48',1,'fplot_core::latex_terminal::m_id'],['../structfplot__core_1_1x__axis.html#a1ba3cb85ef3bbd932fa6ada1442aa73f',1,'fplot_core::x_axis::m_id'],['../structfplot__core_1_1y__axis.html#a14850c501203a783fb7aa0e7ac44e140',1,'fplot_core::y_axis::m_id'],['../structfplot__core_1_1y2__axis.html#a3d7f8ca15f441f30f988496c798483cb',1,'fplot_core::y2_axis::m_id'],['../structfplot__core_1_1z__axis.html#addc6091f267c1ac64cb7faaae05f2b63',1,'fplot_core::z_axis::m_id']]], - ['m_5findices_36',['m_indices',['../structfplot__core_1_1delaunay__tri__2d.html#abe18770a04e61374f94b679151c47314',1,'fplot_core::delaunay_tri_2d::m_indices'],['../structfplot__core_1_1plot__data__tri__2d.html#ab6d39a0103f193a8aa8b795144b7c5a9',1,'fplot_core::plot_data_tri_2d::m_indices'],['../structfplot__core_1_1tri__surface__plot__data.html#ae2f7495459a379be5318da146fb893ae',1,'fplot_core::tri_surface_plot_data::m_indices']]], - ['m_5finside_37',['m_inside',['../structfplot__core_1_1legend.html#adc69a36d330318bc97b7fae160cb7960',1,'fplot_core::legend']]], - ['m_5flabel_38',['m_label',['../structfplot__core_1_1colormap.html#a410c0452382dd1965701fd92f3c89db1',1,'fplot_core::colormap']]], - ['m_5flabels_39',['m_labels',['../structfplot__core_1_1plot.html#a749f5e716823b818c276e26d301a43da',1,'fplot_core::plot']]], - ['m_5flayout_40',['m_layout',['../structfplot__core_1_1legend.html#aa0e3a0c975e39520a953b9e36a9336de',1,'fplot_core::legend']]], - ['m_5flegend_41',['m_legend',['../structfplot__core_1_1plot.html#a58b6d2d703429e69ced42f71bb24b587',1,'fplot_core::plot']]], - ['m_5flightintensity_42',['m_lightintensity',['../structfplot__core_1_1surface__plot.html#a899848b6087f3c257c23d22779ff86b8',1,'fplot_core::surface_plot']]], - ['m_5flimits_43',['m_limits',['../structfplot__core_1_1plot__axis.html#a103b7151710f1dca0a4f3a59ab4fc910',1,'fplot_core::plot_axis']]], - ['m_5flinestyle_44',['m_linestyle',['../structfplot__core_1_1scatter__plot__data.html#ad6526edc0a71a3f3a52c90ba6bf2a7b4',1,'fplot_core::scatter_plot_data::m_linestyle'],['../structfplot__core_1_1plot__data__tri__2d.html#afe3e3bbe14b41a52103b5d059936cf07',1,'fplot_core::plot_data_tri_2d::m_linestyle']]], - ['m_5flinewidth_45',['m_linewidth',['../structfplot__core_1_1scatter__plot__data.html#a5f0a764e897869a8b40e5572cf643eff',1,'fplot_core::scatter_plot_data::m_linewidth'],['../structfplot__core_1_1plot__data__tri__2d.html#a64ecd7d92fb4ac2fadcf5103e8e1287e',1,'fplot_core::plot_data_tri_2d::m_linewidth']]], - ['m_5flogscale_46',['m_logscale',['../structfplot__core_1_1plot__axis.html#ae0308633db7a5bc2aa9dfc5aebc0f871',1,'fplot_core::plot_axis']]], - ['m_5fmarkerfrequency_47',['m_markerfrequency',['../structfplot__core_1_1scatter__plot__data.html#afd73c87e0c8333d8e2af840d73aa5467',1,'fplot_core::scatter_plot_data']]], - ['m_5fmarkersize_48',['m_markersize',['../structfplot__core_1_1scatter__plot__data.html#ac32e05719b497dca629b92ccaa2bc40a',1,'fplot_core::scatter_plot_data']]], - ['m_5fmarkertype_49',['m_markertype',['../structfplot__core_1_1scatter__plot__data.html#a5cf90a01f00ed353e00df87c099999ce',1,'fplot_core::scatter_plot_data']]], - ['m_5fmaxrad_50',['m_maxrad',['../structfplot__core_1_1plot__polar.html#a0df675cfa213da3a32e6fa441cec713c',1,'fplot_core::plot_polar']]], - ['m_5fminrad_51',['m_minrad',['../structfplot__core_1_1plot__polar.html#a0e25b033c0faf43fdb1fbb1cd3518f44',1,'fplot_core::plot_polar']]], - ['m_5fname_52',['m_name',['../structfplot__core_1_1plot__data.html#a216bccf5c14d8633926484770e49112a',1,'fplot_core::plot_data']]], - ['m_5fnumberfmt_53',['m_numberfmt',['../structfplot__core_1_1plot__data__histogram.html#aaf1eb78a557ce9d002aaab7ff552a053',1,'fplot_core::plot_data_histogram']]], - ['m_5fopaque_54',['m_opaque',['../structfplot__core_1_1legend.html#a48c213368dcf6ee0cc202c450fbffc4b',1,'fplot_core::legend']]], - ['m_5fplots_55',['m_plots',['../structfplot__core_1_1multiplot.html#af9b41a50d6394721ff548622aa61725d',1,'fplot_core::multiplot']]], - ['m_5fposition_56',['m_position',['../structfplot__core_1_1plot__label.html#a5387d3494c65621d93b54c232e593e49',1,'fplot_core::plot_label']]], - ['m_5frange_57',['m_range',['../structfplot__core_1_1plot__data__error__bars.html#afa0a49c315b65a212f8b3c5dc3ee448d',1,'fplot_core::plot_data_error_bars']]], - ['m_5frows_58',['m_rows',['../structfplot__core_1_1multiplot.html#a65d63e8ce7aa0d1976f8bca150bb33d3',1,'fplot_core::multiplot']]], - ['m_5fset2square_59',['m_set2square',['../structfplot__core_1_1plot__2d.html#a9cd3bd4fc18c1c07e7cb76ca1cf60d7b',1,'fplot_core::plot_2d']]], - ['m_5fsetmap_60',['m_setmap',['../structfplot__core_1_1plot__3d.html#a626a696690a0f9f9851b1764efb1a048',1,'fplot_core::plot_3d']]], - ['m_5fshow_61',['m_show',['../structfplot__core_1_1legend.html#ad57a162b33234017fcacbf6fb5b8c261',1,'fplot_core::legend']]], - ['m_5fshowcolorbar_62',['m_showcolorbar',['../structfplot__core_1_1plot.html#a2835b94785e566562783f2b0e1162c58',1,'fplot_core::plot']]], - ['m_5fshowgrid_63',['m_showgrid',['../structfplot__core_1_1plot.html#a1bb6dd426e8a18a2db83063e68d8270b',1,'fplot_core::plot']]], - ['m_5fshowhidden_64',['m_showhidden',['../structfplot__core_1_1surface__plot.html#ac881849ed85ad0b25e59c00204aa0960',1,'fplot_core::surface_plot']]], - ['m_5fshowtics_65',['m_showtics',['../structfplot__core_1_1colormap.html#ad6a6afb42b139b250b55772c57c4e0bc',1,'fplot_core::colormap']]], - ['m_5fsimplifydata_66',['m_simplifydata',['../structfplot__core_1_1scatter__plot__data.html#a98d9bfb493e1dae5462ac95979fbcbb4',1,'fplot_core::scatter_plot_data']]], - ['m_5fsimplifyfactor_67',['m_simplifyfactor',['../structfplot__core_1_1scatter__plot__data.html#a307b01a8a110ab7a676ac51c05d3074b',1,'fplot_core::scatter_plot_data']]], - ['m_5fsmooth_68',['m_smooth',['../structfplot__core_1_1surface__plot.html#ac54f0f8105db3eb118eb8a05b7ca7857',1,'fplot_core::surface_plot']]], - ['m_5fspecular_69',['m_specular',['../structfplot__core_1_1surface__plot.html#a33443c0ebe2f233cdeb90a2eed6267ad',1,'fplot_core::surface_plot']]], - ['m_5ftermid_70',['m_termid',['../structfplot__core_1_1terminal.html#a3a008d4ce638c31b5fca9866912e7637',1,'fplot_core::terminal']]], - ['m_5fterminal_71',['m_terminal',['../structfplot__core_1_1plot.html#a132bcac346e1cc2fd85c0685ccf7718b',1,'fplot_core::plot::m_terminal'],['../structfplot__core_1_1multiplot.html#a9bae2b4eddaa75ff61ac0abe77175eb1',1,'fplot_core::multiplot::m_terminal']]], - ['m_5ftext_72',['m_text',['../structfplot__core_1_1plot__label.html#a468e4487a8dc9645e105f93f95035f75',1,'fplot_core::plot_label']]], - ['m_5fthetadirection_73',['m_thetadirection',['../structfplot__core_1_1plot__polar.html#a1a0d0c47ed00a432cf4d1911c282a624',1,'fplot_core::plot_polar']]], - ['m_5fthetastart_74',['m_thetastart',['../structfplot__core_1_1plot__polar.html#a1ed3b2f0f0abc341f8da7215764567b9',1,'fplot_core::plot_polar']]], - ['m_5fticlabelfmt_75',['m_ticlabelfmt',['../structfplot__core_1_1plot__axis.html#a3c72c7ce3d24ebdd12ee8d29c85e507f',1,'fplot_core::plot_axis']]], - ['m_5fticsin_76',['m_ticsin',['../structfplot__core_1_1plot.html#a344af6120545e8a12af51866e44709c1',1,'fplot_core::plot']]], - ['m_5ftitle_77',['m_title',['../structfplot__core_1_1terminal.html#af1bc227957d1404beefc0d106cfa72be',1,'fplot_core::terminal::m_title'],['../structfplot__core_1_1plot__axis.html#a42ca46716cc307a467698534f2ce77c7',1,'fplot_core::plot_axis::m_title'],['../structfplot__core_1_1plot.html#a212e144bbc88f69b516a0c268b09c501',1,'fplot_core::plot::m_title'],['../structfplot__core_1_1multiplot.html#ae7b5636092a710de62e0d2ba4eef9752',1,'fplot_core::multiplot::m_title']]], - ['m_5ftransparency_78',['m_transparency',['../structfplot__core_1_1surface__plot.html#acf55e49e1212536b0bca656c8d5f302d',1,'fplot_core::surface_plot']]], - ['m_5fuseautocolor_79',['m_useautocolor',['../structfplot__core_1_1plot__data__colored.html#af7888aadd5a7fa64a6af7875e35eb4b0',1,'fplot_core::plot_data_colored']]], - ['m_5fuseaxislabels_80',['m_useaxislabels',['../structfplot__core_1_1plot__data__bar.html#a5651040ed1984f555b236f97e513c52d',1,'fplot_core::plot_data_bar']]], - ['m_5fuselighting_81',['m_uselighting',['../structfplot__core_1_1surface__plot.html#ad25c21f74ffc0f3b18bce8207621ba70',1,'fplot_core::surface_plot']]], - ['m_5fusevariablesizepoints_82',['m_usevariablesizepoints',['../structfplot__core_1_1scatter__plot__data.html#a720cc3f633f78c871e76ea19b34fe6da',1,'fplot_core::scatter_plot_data']]], - ['m_5fusey2_83',['m_usey2',['../structfplot__core_1_1plot__data__2d.html#a94c27807c2a4c6403514fe5a387624be',1,'fplot_core::plot_data_2d::m_usey2'],['../structfplot__core_1_1plot__2d.html#a5fe52108ffac0ca723f0061111082338',1,'fplot_core::plot_2d::m_usey2'],['../structfplot__core_1_1plot__data__bar.html#a51124b26f051de4150eee0b120942da5',1,'fplot_core::plot_data_bar::m_usey2'],['../structfplot__core_1_1filled__plot__data.html#ae7a3febf099878ab798ce2abf7eba1d9',1,'fplot_core::filled_plot_data::m_usey2']]], - ['m_5fvertposition_84',['m_vertposition',['../structfplot__core_1_1legend.html#add3185b4f64fb74583931a94e4dfb23a',1,'fplot_core::legend']]], - ['m_5fvisible_85',['m_visible',['../structfplot__core_1_1plot__label.html#a83e92e7f824f33f14d4a8f2552f3d28e',1,'fplot_core::plot_label']]], - ['m_5fwindowheight_86',['m_windowheight',['../structfplot__core_1_1terminal.html#a019b0dcd0e49554333c3e71226a30559',1,'fplot_core::terminal']]], - ['m_5fwindowwidth_87',['m_windowwidth',['../structfplot__core_1_1terminal.html#ad4fc168e1f6bac6b589e41b5e4d5d676',1,'fplot_core::terminal']]], - ['m_5fwireframe_88',['m_wireframe',['../structfplot__core_1_1surface__plot__data.html#aa7856569c70fa73c451702de74e3fab6',1,'fplot_core::surface_plot_data::m_wireframe'],['../structfplot__core_1_1tri__surface__plot__data.html#ab488110fbd8508f9c34b62430577dfaf',1,'fplot_core::tri_surface_plot_data::m_wireframe']]], - ['m_5fx_89',['m_x',['../structfplot__core_1_1surface__plot__data.html#aab0f3a84a1a1f29f56da00e954b384e6',1,'fplot_core::surface_plot_data::m_x'],['../structfplot__core_1_1delaunay__tri__2d.html#aaf1c5b0b6f8d17889152d7dc068da75e',1,'fplot_core::delaunay_tri_2d::m_x'],['../structfplot__core_1_1plot__data__tri__2d.html#a7759843e01d8bd9c38aaab6ebbee3968',1,'fplot_core::plot_data_tri_2d::m_x'],['../structfplot__core_1_1tri__surface__plot__data.html#a0d748864ab5f589fdcac1bfa61ac06e1',1,'fplot_core::tri_surface_plot_data::m_x']]], - ['m_5fxaxis_90',['m_xaxis',['../structfplot__core_1_1plot__2d.html#a5c4e65a6726f52d0f2f037615b9250bd',1,'fplot_core::plot_2d::m_xaxis'],['../structfplot__core_1_1plot__3d.html#afd5e9b00e8e1146c9fb84e0d0117c2e3',1,'fplot_core::plot_3d::m_xaxis']]], - ['m_5fxbars_91',['m_xbars',['../structfplot__core_1_1plot__data__error__bars.html#ace03eab48e42aab5b8570d612adc4a75',1,'fplot_core::plot_data_error_bars']]], - ['m_5fy_92',['m_y',['../structfplot__core_1_1surface__plot__data.html#a82294e25bd1321370f5f55e2051bd000',1,'fplot_core::surface_plot_data::m_y'],['../structfplot__core_1_1delaunay__tri__2d.html#a854c12c20c36fc7e9a9dee2e1702bae7',1,'fplot_core::delaunay_tri_2d::m_y'],['../structfplot__core_1_1plot__data__tri__2d.html#a3ee0322ab193a26b6d2e4bdf46894ce3',1,'fplot_core::plot_data_tri_2d::m_y'],['../structfplot__core_1_1tri__surface__plot__data.html#a23462d63b8ffe52541d975e443044f4a',1,'fplot_core::tri_surface_plot_data::m_y']]], - ['m_5fy2axis_93',['m_y2axis',['../structfplot__core_1_1plot__2d.html#a3079dfde8daa66c4a79e3d3454b40e2c',1,'fplot_core::plot_2d']]], - ['m_5fyaxis_94',['m_yaxis',['../structfplot__core_1_1plot__2d.html#ad91b551d76ef69f571f87511de97a3e8',1,'fplot_core::plot_2d::m_yaxis'],['../structfplot__core_1_1plot__3d.html#ade01966b7cbc1f09297e329dafa69e58',1,'fplot_core::plot_3d::m_yaxis']]], - ['m_5fybars_95',['m_ybars',['../structfplot__core_1_1plot__data__error__bars.html#a372aea519cb462cc9e0e31cb5ef1aac9',1,'fplot_core::plot_data_error_bars']]], - ['m_5fz_96',['m_z',['../structfplot__core_1_1surface__plot__data.html#ab528d77583bf8dcde5ab0182f807e6d6',1,'fplot_core::surface_plot_data::m_z'],['../structfplot__core_1_1delaunay__tri__surface.html#a0961e14a2d4ed0d9a7d75e2e2f5619e3',1,'fplot_core::delaunay_tri_surface::m_z'],['../structfplot__core_1_1tri__surface__plot__data.html#a8201960050d3276b59d9bfad7d14ca10',1,'fplot_core::tri_surface_plot_data::m_z']]], - ['m_5fzaxis_97',['m_zaxis',['../structfplot__core_1_1plot__3d.html#acc0b113abeb246892dde2b8782eac0ca',1,'fplot_core::plot_3d']]], - ['m_5fzeroaxis_98',['m_zeroaxis',['../structfplot__core_1_1plot__axis.html#ae1841279b24ce9872404992f5f025265',1,'fplot_core::plot_axis']]], - ['m_5fzintersect_99',['m_zintersect',['../structfplot__core_1_1plot__3d.html#acfcd025c88ae8f15a5ae2ff86021f03c',1,'fplot_core::plot_3d']]], - ['marker_5fasterisk_100',['marker_asterisk',['../namespacefplot__core.html#ad201ee04e5b4c9dacac36626e9db5d17',1,'fplot_core']]], - ['marker_5fempty_5fcircle_101',['marker_empty_circle',['../namespacefplot__core.html#a03ed7e9b32fd8b4242e3c00ac9f1dd90',1,'fplot_core']]], - ['marker_5fempty_5fnabla_102',['marker_empty_nabla',['../namespacefplot__core.html#a1a127e0b722b34196914625744f531fb',1,'fplot_core']]], - ['marker_5fempty_5frhombus_103',['marker_empty_rhombus',['../namespacefplot__core.html#a130b91ed2576d346f9cfa882fce3a370',1,'fplot_core']]], - ['marker_5fempty_5fsquare_104',['marker_empty_square',['../namespacefplot__core.html#a1847a8539a108f2cc75250a0f6d18fc5',1,'fplot_core']]], - ['marker_5fempty_5ftriangle_105',['marker_empty_triangle',['../namespacefplot__core.html#aa8ce197691d6e257ca34c826287661ea',1,'fplot_core']]], - ['marker_5ffilled_5fcircle_106',['marker_filled_circle',['../namespacefplot__core.html#a958ef8c01819437c1bf72976fdf0408c',1,'fplot_core']]], - ['marker_5ffilled_5fnabla_107',['marker_filled_nabla',['../namespacefplot__core.html#a3206bef63b75d34ff4ddd604d347272a',1,'fplot_core']]], - ['marker_5ffilled_5frhombus_108',['marker_filled_rhombus',['../namespacefplot__core.html#a73e3a13a2500d31fe24f6a4e4e6abbe6',1,'fplot_core']]], - ['marker_5ffilled_5fsquare_109',['marker_filled_square',['../namespacefplot__core.html#a925e2ca369cd0c7794c38d6f2c0ae3fc',1,'fplot_core']]], - ['marker_5ffilled_5ftriangle_110',['marker_filled_triangle',['../namespacefplot__core.html#aee19422210a01b45b0a946072071aa89',1,'fplot_core']]], - ['marker_5fplus_111',['marker_plus',['../namespacefplot__core.html#a1c6bffe3a206bcc5400d7e339f482779',1,'fplot_core']]], - ['marker_5fx_112',['marker_x',['../namespacefplot__core.html#aa8584a251e760fd4545d03c0a4506fa6',1,'fplot_core']]], - ['multiplot_113',['multiplot',['../structfplot__core_1_1multiplot.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html deleted file mode 100644 index 14f3403..0000000 --- a/docs/html/search/all_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js deleted file mode 100644 index 048d9fd..0000000 --- a/docs/html/search/all_b.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['operator_28_2f_3d_29_0',['operator(/=)',['../interfacefplot__core_1_1operator_07_2_0a_08.html',1,'fplot_core']]], - ['operator_28_3d_3d_29_1',['operator(==)',['../interfacefplot__core_1_1operator_07_0a_0a_08.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html deleted file mode 100644 index da60ab8..0000000 --- a/docs/html/search/all_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js deleted file mode 100644 index e8d92f7..0000000 --- a/docs/html/search/all_c.js +++ /dev/null @@ -1,44 +0,0 @@ -var searchData= -[ - ['p2d_5fclean_5fup_0',['p2d_clean_up',['../structfplot__core_1_1plot__2d.html#aeb55d7671f449779041c822189e86048',1,'fplot_core::plot_2d']]], - ['p3d_5fclean_5fup_1',['p3d_clean_up',['../structfplot__core_1_1plot__3d.html#ab0e3abb763cf80ecc9af2d75e5c1035d',1,'fplot_core::plot_3d']]], - ['pa_5fget_5fstring_5fresult_2',['pa_get_string_result',['../interfacefplot__core_1_1pa__get__string__result.html',1,'fplot_core']]], - ['parula_5fcolormap_3',['parula_colormap',['../structfplot__core_1_1parula__colormap.html',1,'fplot_core']]], - ['pd_5fget_5fstring_5fresult_4',['pd_get_string_result',['../interfacefplot__core_1_1pd__get__string__result.html',1,'fplot_core']]], - ['plot_5',['plot',['../structfplot__core_1_1plot.html',1,'fplot_core']]], - ['plot_5f2d_6',['plot_2d',['../structfplot__core_1_1plot__2d.html',1,'fplot_core']]], - ['plot_5f3d_7',['plot_3d',['../structfplot__core_1_1plot__3d.html',1,'fplot_core']]], - ['plot_5farray_5fsize_5fmismatch_5ferror_8',['plot_array_size_mismatch_error',['../namespacefplot__core.html#a2747b79ccd539b6a6b0edf9bee970ece',1,'fplot_core']]], - ['plot_5farrow_9',['plot_arrow',['../structfplot__core_1_1plot__arrow.html',1,'fplot_core']]], - ['plot_5faxis_10',['plot_axis',['../structfplot__core_1_1plot__axis.html',1,'fplot_core']]], - ['plot_5fbar_11',['plot_bar',['../structfplot__core_1_1plot__bar.html',1,'fplot_core']]], - ['plot_5fdata_12',['plot_data',['../structfplot__core_1_1plot__data.html',1,'fplot_core']]], - ['plot_5fdata_5f2d_13',['plot_data_2d',['../structfplot__core_1_1plot__data__2d.html',1,'fplot_core']]], - ['plot_5fdata_5f3d_14',['plot_data_3d',['../structfplot__core_1_1plot__data__3d.html',1,'fplot_core']]], - ['plot_5fdata_5fbar_15',['plot_data_bar',['../structfplot__core_1_1plot__data__bar.html',1,'fplot_core']]], - ['plot_5fdata_5fcolored_16',['plot_data_colored',['../structfplot__core_1_1plot__data__colored.html',1,'fplot_core']]], - ['plot_5fdata_5ferror_5fbars_17',['plot_data_error_bars',['../structfplot__core_1_1plot__data__error__bars.html',1,'fplot_core']]], - ['plot_5fdata_5fhistogram_18',['plot_data_histogram',['../structfplot__core_1_1plot__data__histogram.html',1,'fplot_core']]], - ['plot_5fdata_5ftri_5f2d_19',['plot_data_tri_2d',['../structfplot__core_1_1plot__data__tri__2d.html',1,'fplot_core']]], - ['plot_5fgnuplot_5ffile_5ferror_20',['plot_gnuplot_file_error',['../namespacefplot__core.html#a964aa864e3984d866c12f75323bb6dc1',1,'fplot_core']]], - ['plot_5finvalid_5finput_5ferror_21',['plot_invalid_input_error',['../namespacefplot__core.html#ac53894e99cce3be3c2f7c8ef7e579e98',1,'fplot_core']]], - ['plot_5finvalid_5foperation_5ferror_22',['plot_invalid_operation_error',['../namespacefplot__core.html#adcbe99e541fc04356d322d562e5c67f0',1,'fplot_core']]], - ['plot_5flabel_23',['plot_label',['../structfplot__core_1_1plot__label.html',1,'fplot_core']]], - ['plot_5fobject_24',['plot_object',['../structfplot__core_1_1plot__object.html',1,'fplot_core']]], - ['plot_5fout_5fof_5fmemory_5ferror_25',['plot_out_of_memory_error',['../namespacefplot__core.html#a002195f1f56bc9edc1ec7dd51c3090d8',1,'fplot_core']]], - ['plot_5fpolar_26',['plot_polar',['../structfplot__core_1_1plot__polar.html',1,'fplot_core']]], - ['plotdata_5fmax_5fname_5flength_27',['plotdata_max_name_length',['../namespacefplot__core.html#acfa29ac62a50b61ea009b20a898d45e5',1,'fplot_core']]], - ['png_5fterminal_28',['png_terminal',['../structfplot__core_1_1png__terminal.html',1,'fplot_core']]], - ['polar_5ftheta_5fbottom_29',['polar_theta_bottom',['../namespacefplot__core.html#af3ed8d21802d919dd891a4ea8af0ec91',1,'fplot_core']]], - ['polar_5ftheta_5fccw_30',['polar_theta_ccw',['../namespacefplot__core.html#ae803ea1ff95802b0295be3661e11ce98',1,'fplot_core']]], - ['polar_5ftheta_5fcw_31',['polar_theta_cw',['../namespacefplot__core.html#aff8546dbedb11e1fdf11e0ccdc8d6df0',1,'fplot_core']]], - ['polar_5ftheta_5fleft_32',['polar_theta_left',['../namespacefplot__core.html#a783a98c4f406054602d757133e496c19',1,'fplot_core']]], - ['polar_5ftheta_5fright_33',['polar_theta_right',['../namespacefplot__core.html#ab582c30f182b32ad10fb85a2cdee5a2b',1,'fplot_core']]], - ['polar_5ftheta_5ftop_34',['polar_theta_top',['../namespacefplot__core.html#a4c5d751fa6cfbf02b759a3858d0858f4',1,'fplot_core']]], - ['pop_35',['pop',['../structfplot__core_1_1plot.html#ad33c34e40f57938ecd001e808bf23faa',1,'fplot_core::plot']]], - ['pop_5farrow_36',['pop_arrow',['../structfplot__core_1_1plot.html#acbc277a0af6af597663ea0121ecfbdfa',1,'fplot_core::plot']]], - ['pop_5flabel_37',['pop_label',['../structfplot__core_1_1plot.html#a3b8d7885c017cdea67018693824d2a28',1,'fplot_core::plot']]], - ['push_38',['push',['../structfplot__core_1_1plot.html#a4d990dba35771bb91c4b369e749359b1',1,'fplot_core::plot']]], - ['push_5farrow_39',['push_arrow',['../structfplot__core_1_1plot.html#ac9e18069b5f30cdf389bd2d875e9160a',1,'fplot_core::plot']]], - ['push_5flabel_40',['push_label',['../structfplot__core_1_1plot.html#a52aebc916dcd0daee352bd121f44571b',1,'fplot_core::plot']]] -]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html deleted file mode 100644 index bc376fe..0000000 --- a/docs/html/search/all_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js deleted file mode 100644 index d2e2271..0000000 --- a/docs/html/search/all_d.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['qt_5fterminal_0',['qt_terminal',['../structfplot__core_1_1qt__terminal.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html deleted file mode 100644 index 2e3c74d..0000000 --- a/docs/html/search/all_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js deleted file mode 100644 index d19cce1..0000000 --- a/docs/html/search/all_e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['rainbow_5fcolormap_0',['rainbow_colormap',['../structfplot__core_1_1rainbow__colormap.html',1,'fplot_core']]], - ['red_1',['red',['../structfplot__core_1_1color.html#a5533de88a3f68d6fafd38c0624bb76c8',1,'fplot_core::color']]] -]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html deleted file mode 100644 index 246f8ab..0000000 --- a/docs/html/search/all_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js deleted file mode 100644 index 0122205..0000000 --- a/docs/html/search/all_f.js +++ /dev/null @@ -1,95 +0,0 @@ -var searchData= -[ - ['save_5ffile_0',['save_file',['../structfplot__core_1_1plot.html#a7e9f2ba3cabac241fc87b08cab6a7964',1,'fplot_core::plot::save_file()'],['../structfplot__core_1_1multiplot.html#a4ffe414eeb41cfb1c6a4090efe0308b6',1,'fplot_core::multiplot::save_file()']]], - ['scatter_5fplot_5fdata_1',['scatter_plot_data',['../structfplot__core_1_1scatter__plot__data.html',1,'fplot_core']]], - ['set_2',['set',['../structfplot__core_1_1plot.html#a60f699ff08a69ffd0639e02cef732fbc',1,'fplot_core::plot::set()'],['../structfplot__core_1_1multiplot.html#a24b7e0d33ad3c66d3031bc0c2c307677',1,'fplot_core::multiplot::set()']]], - ['set_5fallow_5fsmoothing_3',['set_allow_smoothing',['../structfplot__core_1_1surface__plot.html#a9e04fc534b0506d32401d21a695efbae',1,'fplot_core::surface_plot']]], - ['set_5fangle_4',['set_angle',['../structfplot__core_1_1plot__label.html#aa53c460db5af43102ac096d2e9af5fdb',1,'fplot_core::plot_label']]], - ['set_5farrow_5',['set_arrow',['../structfplot__core_1_1plot.html#a97b39f1d655613d423431a225b9ac525',1,'fplot_core::plot']]], - ['set_5farrow_5fsize_6',['set_arrow_size',['../structfplot__core_1_1vector__field__plot__data.html#ac744dea773420c6600c3306311ef2d93',1,'fplot_core::vector_field_plot_data']]], - ['set_5fautoscale_7',['set_autoscale',['../structfplot__core_1_1plot__axis.html#a31ba8659f53c12145bf26884f929a3b6',1,'fplot_core::plot_axis::set_autoscale()'],['../structfplot__core_1_1plot__polar.html#aad0eaf7bd5100040899825fe1281ab86',1,'fplot_core::plot_polar::set_autoscale()']]], - ['set_5faxis_5fequal_8',['set_axis_equal',['../structfplot__core_1_1plot.html#a3ab0098ecdd19537b4b4810e584d6178',1,'fplot_core::plot']]], - ['set_5fazimuth_9',['set_azimuth',['../structfplot__core_1_1plot__3d.html#a925a7a5484ce7fde36ce80e2199f2c2b',1,'fplot_core::plot_3d']]], - ['set_5fcolor_10',['set_color',['../structfplot__core_1_1plot__arrow.html#a62bd3548d5aad7e4a4bc1cc58c3a6935',1,'fplot_core::plot_arrow']]], - ['set_5fcolormap_11',['set_colormap',['../structfplot__core_1_1custom__colormap.html#ae4c07ac867f7fd74ca4219a7e859d0e8',1,'fplot_core::custom_colormap::set_colormap()'],['../structfplot__core_1_1plot.html#a6a2220252ff39e46984cdd41f2f2d408',1,'fplot_core::plot::set_colormap()']]], - ['set_5fcoordinate_5fsystem_12',['set_coordinate_system',['../structfplot__core_1_1plot__3d.html#a66d6237275dbe689d7411ddced7e22c9',1,'fplot_core::plot_3d']]], - ['set_5fdraw_5fagainst_5fy2_13',['set_draw_against_y2',['../structfplot__core_1_1plot__data__2d.html#a77e6f48e4bac69edcf0275d6ad13e550',1,'fplot_core::plot_data_2d::set_draw_against_y2()'],['../structfplot__core_1_1filled__plot__data.html#aecc19b2be5696b2210ea1c7b7bd58a58',1,'fplot_core::filled_plot_data::set_draw_against_y2()']]], - ['set_5fdraw_5fborder_14',['set_draw_border',['../structfplot__core_1_1legend.html#a081df8de03ccc8888b6169608d9b5f17',1,'fplot_core::legend::set_draw_border()'],['../structfplot__core_1_1colormap.html#acb679819160a82793304bcfdde53a623',1,'fplot_core::colormap::set_draw_border()'],['../structfplot__core_1_1plot.html#ae400616706a0cb419a5251c12174d822',1,'fplot_core::plot::set_draw_border()']]], - ['set_5fdraw_5finside_5faxes_15',['set_draw_inside_axes',['../structfplot__core_1_1legend.html#a89b548365548f1e7f0d8756b4145ad93',1,'fplot_core::legend']]], - ['set_5fdraw_5fline_16',['set_draw_line',['../structfplot__core_1_1scatter__plot__data.html#a4219776e9fb097422c3ec43122f031fb',1,'fplot_core::scatter_plot_data']]], - ['set_5fdraw_5fmarkers_17',['set_draw_markers',['../structfplot__core_1_1scatter__plot__data.html#a2d478600f6026a7515f89cb156896654',1,'fplot_core::scatter_plot_data']]], - ['set_5felevation_18',['set_elevation',['../structfplot__core_1_1plot__3d.html#a68d05b37ad04bb9627471b1c20a30c38',1,'fplot_core::plot_3d']]], - ['set_5ffilename_19',['set_filename',['../structfplot__core_1_1png__terminal.html#a11541efbe8bb3036b670ab5bfd234cb8',1,'fplot_core::png_terminal::set_filename()'],['../structfplot__core_1_1latex__terminal.html#a599576bce43bdcbead02d4958d6646ea',1,'fplot_core::latex_terminal::set_filename()']]], - ['set_5ffill_5farrow_20',['set_fill_arrow',['../structfplot__core_1_1vector__field__plot__data.html#aa1c31e27261ed54d1728c6d17a2c0db0',1,'fplot_core::vector_field_plot_data']]], - ['set_5ffill_5fcurve_21',['set_fill_curve',['../structfplot__core_1_1scatter__plot__data.html#a6305c7c347d54e042186e197e63d4572',1,'fplot_core::scatter_plot_data']]], - ['set_5ffont_5fname_22',['set_font_name',['../structfplot__core_1_1terminal.html#acd92729e62790df27b3c1003ef821593',1,'fplot_core::terminal::set_font_name()'],['../structfplot__core_1_1plot.html#a3687c06edaac5f2e47c3a04266effd1f',1,'fplot_core::plot::set_font_name()'],['../structfplot__core_1_1multiplot.html#a1ea580b7916e02cbb84a3ee6325802be',1,'fplot_core::multiplot::set_font_name()']]], - ['set_5ffont_5fsize_23',['set_font_size',['../structfplot__core_1_1terminal.html#a27f4875d74e90fef7f4555de55543abd',1,'fplot_core::terminal::set_font_size()'],['../structfplot__core_1_1plot.html#a755597835c9d424143b8942f4d699a34',1,'fplot_core::plot::set_font_size()'],['../structfplot__core_1_1multiplot.html#ad751ab2a57ec9af423468603a3fc5a75',1,'fplot_core::multiplot::set_font_size()']]], - ['set_5fhead_5fangle_24',['set_head_angle',['../structfplot__core_1_1plot__arrow.html#aa976a527ccaf267e9d5b7c06342a3b56',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5fback_5fangle_25',['set_head_back_angle',['../structfplot__core_1_1plot__arrow.html#aaff2d428d8feeda35da15f1c92bf624a',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5ffill_26',['set_head_fill',['../structfplot__core_1_1plot__arrow.html#add82908c1efdf34d701762bf29763a24',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5flocation_27',['set_head_location',['../structfplot__core_1_1plot__arrow.html#a49ab5d25adbf97b8b6aeb9172c68947a',1,'fplot_core::plot_arrow::set_head_locationpar_set_head_1'],['../structfplot__core_1_1plot__arrow.html#aaa8b4e0f0e2e7138a4fb849989bd7753',1,'fplot_core::plot_arrow::set_head_locationpar_set_head_2'],['../structfplot__core_1_1plot__arrow.html#a2a90f330e8f387beff52a66cd48b1ef3',1,'fplot_core::plot_arrow::set_head_locationpar_set_head_3']]], - ['set_5fhead_5fsize_28',['set_head_size',['../structfplot__core_1_1plot__arrow.html#ab2aa4033c8337c3307ea4036a6e10d16',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5ftype_29',['set_head_type',['../structfplot__core_1_1plot__arrow.html#adfe5552a5c01b59b9bc1025d8e583a57',1,'fplot_core::plot_arrow']]], - ['set_5fhorizontal_30',['set_horizontal',['../structfplot__core_1_1colormap.html#a8530b43520ee1929a510dc8aec57e324',1,'fplot_core::colormap']]], - ['set_5fhorizontal_5fposition_31',['set_horizontal_position',['../structfplot__core_1_1legend.html#a39f311ee80c51cbc637cc946c7a44397',1,'fplot_core::legend']]], - ['set_5fis_5flog_5fscaled_32',['set_is_log_scaled',['../structfplot__core_1_1plot__axis.html#a7ea2e86ed7e730aacad368f67c247a79',1,'fplot_core::plot_axis']]], - ['set_5fis_5fopaque_33',['set_is_opaque',['../structfplot__core_1_1legend.html#af006f78db694a74d57a9861f038b3971',1,'fplot_core::legend']]], - ['set_5fis_5fvisible_34',['set_is_visible',['../structfplot__core_1_1plot__label.html#acc5b95b081e578d0d05e9ee768579ba9',1,'fplot_core::plot_label::set_is_visible()'],['../structfplot__core_1_1plot__arrow.html#a15fa92a1a0ba898995bfcc2e5b5ee790',1,'fplot_core::plot_arrow::set_is_visible()'],['../structfplot__core_1_1legend.html#aa9c45f3a136694b9e8c0c3c83d9a7cd8',1,'fplot_core::legend::set_is_visible()']]], - ['set_5flabel_35',['set_label',['../structfplot__core_1_1colormap.html#ac595c1361a36891870faf9d676a66d78',1,'fplot_core::colormap::set_label()'],['../structfplot__core_1_1plot.html#a1bae57bcb9098707fba5267fa22a433d',1,'fplot_core::plot::set_label()']]], - ['set_5flayout_36',['set_layout',['../structfplot__core_1_1legend.html#a24b91299a6a9382c91a15b0093e1cdaa',1,'fplot_core::legend']]], - ['set_5flight_5fintensity_37',['set_light_intensity',['../structfplot__core_1_1surface__plot.html#aadd6772415d91480a12ee88a49216cc7',1,'fplot_core::surface_plot']]], - ['set_5flimits_38',['set_limits',['../structfplot__core_1_1plot__axis.html#ac4636b37253874b8b072c7916cac4686',1,'fplot_core::plot_axis']]], - ['set_5fline_5fcolor_39',['set_line_color',['../structfplot__core_1_1plot__data__colored.html#ac266099a66e8f024d142e14a8c5077c2',1,'fplot_core::plot_data_colored']]], - ['set_5fline_5fstyle_40',['set_line_style',['../structfplot__core_1_1plot__arrow.html#aceea0ccadce0c4737eaad80ac0a10b98',1,'fplot_core::plot_arrow::set_line_style()'],['../structfplot__core_1_1scatter__plot__data.html#ab03c2603a873c9065c83650ac7b59577',1,'fplot_core::scatter_plot_data::set_line_style()'],['../structfplot__core_1_1plot__data__tri__2d.html#a83fd7aeaaf49e87feca48e47e45dc4f0',1,'fplot_core::plot_data_tri_2d::set_line_style()']]], - ['set_5fline_5fwidth_41',['set_line_width',['../structfplot__core_1_1plot__arrow.html#a48af7ed9faba3494666634819c1b0078',1,'fplot_core::plot_arrow::set_line_width()'],['../structfplot__core_1_1scatter__plot__data.html#ad2169acc049adff557adfa5a7da7a047',1,'fplot_core::scatter_plot_data::set_line_width()'],['../structfplot__core_1_1plot__data__tri__2d.html#a89979cf628a8d1bbe58616a134d84de4',1,'fplot_core::plot_data_tri_2d::set_line_width()']]], - ['set_5fmarker_5ffrequency_42',['set_marker_frequency',['../structfplot__core_1_1scatter__plot__data.html#afbe660fce6672bf6dc20f3f594a14361',1,'fplot_core::scatter_plot_data']]], - ['set_5fmarker_5fscaling_43',['set_marker_scaling',['../structfplot__core_1_1scatter__plot__data.html#afc01fb76af6a0a422b9a9f8571959e88',1,'fplot_core::scatter_plot_data']]], - ['set_5fmarker_5fstyle_44',['set_marker_style',['../structfplot__core_1_1scatter__plot__data.html#a149b23714fce0691b4131c7701ff6166',1,'fplot_core::scatter_plot_data']]], - ['set_5fmove_5fto_5ffront_45',['set_move_to_front',['../structfplot__core_1_1plot__arrow.html#a835f541854392fcdfa62e42a40d0f1be',1,'fplot_core::plot_arrow']]], - ['set_5fname_46',['set_name',['../structfplot__core_1_1plot__data.html#a94aed3f692e4f61414f2681cc105ee52',1,'fplot_core::plot_data']]], - ['set_5fplot_5fwindow_5fnumber_47',['set_plot_window_number',['../structfplot__core_1_1terminal.html#a97e236d25bfdfb88c47aac07ac636baf',1,'fplot_core::terminal']]], - ['set_5fposition_48',['set_position',['../structfplot__core_1_1plot__label.html#a2ad61a55279d21ae6ebc29ee1fd0b464',1,'fplot_core::plot_label']]], - ['set_5fradial_5flimits_49',['set_radial_limits',['../structfplot__core_1_1plot__polar.html#a00dbfab2c6a3dc1f814d076574e5fd17',1,'fplot_core::plot_polar']]], - ['set_5fshow_5fcolorbar_50',['set_show_colorbar',['../structfplot__core_1_1plot.html#a6f9b326354b3d8dfa707e871a7519713',1,'fplot_core::plot']]], - ['set_5fshow_5fcontours_51',['set_show_contours',['../structfplot__core_1_1surface__plot.html#a8aeebb0ceda2d5f18c960bea089f2c58',1,'fplot_core::surface_plot']]], - ['set_5fshow_5fgridlines_52',['set_show_gridlines',['../structfplot__core_1_1plot.html#a929a7d1f892cd92b7ce9387adb4168c0',1,'fplot_core::plot']]], - ['set_5fshow_5fhidden_53',['set_show_hidden',['../structfplot__core_1_1surface__plot.html#a4dfb89ce7bea300b0baf615df28666be',1,'fplot_core::surface_plot']]], - ['set_5fshow_5ftics_54',['set_show_tics',['../structfplot__core_1_1colormap.html#a4cfc2819c20b439ba562026d5ca54615',1,'fplot_core::colormap']]], - ['set_5fsimplification_5ffactor_55',['set_simplification_factor',['../structfplot__core_1_1scatter__plot__data.html#a8a4056fe6969456124db007f962b9c7b',1,'fplot_core::scatter_plot_data']]], - ['set_5fsimplify_5fdata_56',['set_simplify_data',['../structfplot__core_1_1scatter__plot__data.html#a1fd9079ccba6a8227501584208f2991e',1,'fplot_core::scatter_plot_data']]], - ['set_5fspecular_5fintensity_57',['set_specular_intensity',['../structfplot__core_1_1surface__plot.html#ab40b141891860f87ec370bba31d83b8a',1,'fplot_core::surface_plot']]], - ['set_5fsquare_5faxes_58',['set_square_axes',['../structfplot__core_1_1plot__2d.html#afc8ab071b8c099aebcf795a3cf10fe9e',1,'fplot_core::plot_2d']]], - ['set_5ftail_5flocation_59',['set_tail_location',['../structfplot__core_1_1plot__arrow.html#aca84bef4ddb730b1fed90d2386874b7a',1,'fplot_core::plot_arrow::set_tail_locationpar_set_tail_1'],['../structfplot__core_1_1plot__arrow.html#a452292e58f05cd3afdcdb38c858799d8',1,'fplot_core::plot_arrow::set_tail_locationpar_set_tail_2'],['../structfplot__core_1_1plot__arrow.html#a255beb96b7024c5bb7cd9ef41836ae94',1,'fplot_core::plot_arrow::set_tail_locationpar_set_tail_3']]], - ['set_5ftext_60',['set_text',['../structfplot__core_1_1plot__label.html#ae23e191969f98f47b32ee694fe22c993',1,'fplot_core::plot_label']]], - ['set_5ftheta_5fdirection_61',['set_theta_direction',['../structfplot__core_1_1plot__polar.html#ab1bf8924f14b0833ca12ded69d6df738',1,'fplot_core::plot_polar']]], - ['set_5ftheta_5fstart_5fposition_62',['set_theta_start_position',['../structfplot__core_1_1plot__polar.html#a6c09839428e51e17d6ad88608d1d92ae',1,'fplot_core::plot_polar']]], - ['set_5ftic_5flabel_5fformat_63',['set_tic_label_format',['../structfplot__core_1_1plot__axis.html#a65519918c3bc51c7c55856f4ab70de47',1,'fplot_core::plot_axis']]], - ['set_5ftics_5finward_64',['set_tics_inward',['../structfplot__core_1_1plot.html#aa9b08eb0848255279f04d7ff4c5bf5f2',1,'fplot_core::plot']]], - ['set_5ftitle_65',['set_title',['../structfplot__core_1_1terminal.html#a4c433fb993c05ba8f2485d76dac5d571',1,'fplot_core::terminal::set_title()'],['../structfplot__core_1_1plot__axis.html#ae48c3bbf59663fd54efc7b814d4e1662',1,'fplot_core::plot_axis::set_title()'],['../structfplot__core_1_1plot.html#a1925b89a6abe05c4728c839844b507f1',1,'fplot_core::plot::set_title()'],['../structfplot__core_1_1multiplot.html#a22818257b677d5f45a1ac13435cc27ae',1,'fplot_core::multiplot::set_title()']]], - ['set_5ftransparency_66',['set_transparency',['../structfplot__core_1_1surface__plot.html#a94436759af21d4fcd87a2358e4afe569',1,'fplot_core::surface_plot']]], - ['set_5fuse_5fdata_5fdependent_5fcolors_67',['set_use_data_dependent_colors',['../structfplot__core_1_1scatter__plot__data.html#a9ea43c66bf884fc5380dc82b178e2634',1,'fplot_core::scatter_plot_data']]], - ['set_5fuse_5fdefault_5fsize_68',['set_use_default_size',['../structfplot__core_1_1plot__arrow.html#afa8a544cb4f1d33d35518d65b1303543',1,'fplot_core::plot_arrow']]], - ['set_5fuse_5fdefault_5ftic_5flabel_5fformat_69',['set_use_default_tic_label_format',['../structfplot__core_1_1plot__axis.html#a5fb4b8b807033d2d7e81ee3e7077a1e5',1,'fplot_core::plot_axis']]], - ['set_5fuse_5ferror_5fbox_70',['set_use_error_box',['../structfplot__core_1_1plot__data__error__bars.html#a86f2731ad612871fea02c6a8a4d1e7c1',1,'fplot_core::plot_data_error_bars']]], - ['set_5fuse_5flighting_71',['set_use_lighting',['../structfplot__core_1_1surface__plot.html#a238591a3e35fea687b802ee34d3f3bdf',1,'fplot_core::surface_plot']]], - ['set_5fuse_5fmap_5fview_72',['set_use_map_view',['../structfplot__core_1_1plot__3d.html#a702f48c41af5fa7b33d1555904ca5823',1,'fplot_core::plot_3d']]], - ['set_5fuse_5fvariable_5fsize_5fpoints_73',['set_use_variable_size_points',['../structfplot__core_1_1scatter__plot__data.html#a4b8720c814de24f0a8c54de333f6b192',1,'fplot_core::scatter_plot_data']]], - ['set_5fuse_5fwireframe_74',['set_use_wireframe',['../structfplot__core_1_1surface__plot__data.html#a2dd4d9da621cc049e8d9acb772d64b27',1,'fplot_core::surface_plot_data::set_use_wireframe()'],['../structfplot__core_1_1tri__surface__plot__data.html#a920b578a7bd5dda514379761daad8d87',1,'fplot_core::tri_surface_plot_data::set_use_wireframe()']]], - ['set_5fuse_5fy2_5faxis_75',['set_use_y2_axis',['../structfplot__core_1_1plot__2d.html#a60849bb67d78d07ebb62ae2aedd298ad',1,'fplot_core::plot_2d']]], - ['set_5fvertical_5fposition_76',['set_vertical_position',['../structfplot__core_1_1legend.html#aafce387b80da438eb00b49107bcde5df',1,'fplot_core::legend']]], - ['set_5fwindow_5fheight_77',['set_window_height',['../structfplot__core_1_1terminal.html#a7bfbe230aacd2ebfc66a48f45e3b7c02',1,'fplot_core::terminal']]], - ['set_5fwindow_5fwidth_78',['set_window_width',['../structfplot__core_1_1terminal.html#adc7393357e996438ef5afec36dde7054',1,'fplot_core::terminal']]], - ['set_5fx_79',['set_x',['../structfplot__core_1_1scatter__plot__data.html#a767bed829c0dc83b2b265910b3834608',1,'fplot_core::scatter_plot_data::set_x()'],['../structfplot__core_1_1plot__data__2d.html#aa605fb042bd378ebf5ba6fd94563d13a',1,'fplot_core::plot_data_2d::set_x()'],['../structfplot__core_1_1plot__data__3d.html#a1013a895c610e3f412701624c60c18a4',1,'fplot_core::plot_data_3d::set_x()'],['../structfplot__core_1_1surface__plot__data.html#a2ef34c8a632cf6fdb9f6247eaf817d57',1,'fplot_core::surface_plot_data::set_x()']]], - ['set_5fy_80',['set_y',['../structfplot__core_1_1scatter__plot__data.html#a313f4dd3f4a4596772901c0cfbf15a97',1,'fplot_core::scatter_plot_data::set_y()'],['../structfplot__core_1_1plot__data__2d.html#a28d89209520ffd1728ff34aaa853f314',1,'fplot_core::plot_data_2d::set_y()'],['../structfplot__core_1_1plot__data__3d.html#abcaab55223d65976eb07ab58908ccd66',1,'fplot_core::plot_data_3d::set_y()'],['../structfplot__core_1_1surface__plot__data.html#a4d709bdb48e019c6a7f167e2712a11e9',1,'fplot_core::surface_plot_data::set_y()']]], - ['set_5fz_81',['set_z',['../structfplot__core_1_1plot__data__3d.html#a5adf3d8c20b3b839a76175ca986fcff4',1,'fplot_core::plot_data_3d::set_z()'],['../structfplot__core_1_1surface__plot__data.html#a32ff64443790d15faf76401d2c06c0f9',1,'fplot_core::surface_plot_data::set_z()']]], - ['set_5fz_5fintersect_5fxy_82',['set_z_intersect_xy',['../structfplot__core_1_1plot__3d.html#a58f3645f94801662c0f10736804da580',1,'fplot_core::plot_3d']]], - ['set_5fzero_5faxis_83',['set_zero_axis',['../structfplot__core_1_1plot__axis.html#a19f1868adac5ac661c5b7d33d02f35c9',1,'fplot_core::plot_axis']]], - ['set_5fzero_5faxis_5fline_5fwidth_84',['set_zero_axis_line_width',['../structfplot__core_1_1plot__axis.html#abd2dce525007a33e050ccb0c92024824',1,'fplot_core::plot_axis']]], - ['simplify_5fpolyline_85',['simplify_polyline',['../interfacefplot__core_1_1simplify__polyline.html',1,'fplot_core']]], - ['spd_5fget_5fint_5fvalue_86',['spd_get_int_value',['../interfacefplot__core_1_1spd__get__int__value.html',1,'fplot_core']]], - ['spd_5fget_5fstring_5fresult_87',['spd_get_string_result',['../interfacefplot__core_1_1spd__get__string__result.html',1,'fplot_core']]], - ['spd_5fget_5fvalue_88',['spd_get_value',['../interfacefplot__core_1_1spd__get__value.html',1,'fplot_core']]], - ['spd_5fset_5fvalue_89',['spd_set_value',['../interfacefplot__core_1_1spd__set__value.html',1,'fplot_core']]], - ['surface_5fplot_90',['surface_plot',['../structfplot__core_1_1surface__plot.html',1,'fplot_core']]], - ['surface_5fplot_5fdata_91',['surface_plot_data',['../structfplot__core_1_1surface__plot__data.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html deleted file mode 100644 index f7e4c14..0000000 --- a/docs/html/search/classes_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js deleted file mode 100644 index d0fccb9..0000000 --- a/docs/html/search/classes_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['assignment_28_3d_29_0',['assignment(=)',['../interfacefplot__core_1_1assignment_07_0a_08.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html deleted file mode 100644 index c7ff4b3..0000000 --- a/docs/html/search/classes_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js deleted file mode 100644 index 4bfbd0c..0000000 --- a/docs/html/search/classes_1.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['cm_5fget_5fstring_5fresult_0',['cm_get_string_result',['../interfacefplot__core_1_1cm__get__string__result.html',1,'fplot_core']]], - ['color_1',['color',['../structfplot__core_1_1color.html',1,'fplot_core']]], - ['colormap_2',['colormap',['../structfplot__core_1_1colormap.html',1,'fplot_core']]], - ['cool_5fcolormap_3',['cool_colormap',['../structfplot__core_1_1cool__colormap.html',1,'fplot_core']]], - ['custom_5fcolormap_4',['custom_colormap',['../structfplot__core_1_1custom__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_10.html b/docs/html/search/classes_10.html deleted file mode 100644 index abf37f5..0000000 --- a/docs/html/search/classes_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_10.js b/docs/html/search/classes_10.js deleted file mode 100644 index 17bc0fe..0000000 --- a/docs/html/search/classes_10.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['windows_5fterminal_0',['windows_terminal',['../structfplot__core_1_1windows__terminal.html',1,'fplot_core']]], - ['wxt_5fterminal_1',['wxt_terminal',['../structfplot__core_1_1wxt__terminal.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_11.html b/docs/html/search/classes_11.html deleted file mode 100644 index 29283b0..0000000 --- a/docs/html/search/classes_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_11.js b/docs/html/search/classes_11.js deleted file mode 100644 index 8596b67..0000000 --- a/docs/html/search/classes_11.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['x_5faxis_0',['x_axis',['../structfplot__core_1_1x__axis.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_12.js b/docs/html/search/classes_12.js deleted file mode 100644 index ebd6bba..0000000 --- a/docs/html/search/classes_12.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['y2_5faxis_0',['y2_axis',['../structfplot__core_1_1y2__axis.html',1,'fplot_core']]], - ['y_5faxis_1',['y_axis',['../structfplot__core_1_1y__axis.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_13.js b/docs/html/search/classes_13.js deleted file mode 100644 index f3d6cb5..0000000 --- a/docs/html/search/classes_13.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['z_5faxis_0',['z_axis',['../structfplot__core_1_1z__axis.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html deleted file mode 100644 index 0d1e8a0..0000000 --- a/docs/html/search/classes_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js deleted file mode 100644 index 660391e..0000000 --- a/docs/html/search/classes_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['delaunay_5ftri_5f2d_0',['delaunay_tri_2d',['../structfplot__core_1_1delaunay__tri__2d.html',1,'fplot_core']]], - ['delaunay_5ftri_5fsurface_1',['delaunay_tri_surface',['../structfplot__core_1_1delaunay__tri__surface.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html deleted file mode 100644 index 2102545..0000000 --- a/docs/html/search/classes_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js deleted file mode 100644 index ee0ff6f..0000000 --- a/docs/html/search/classes_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['earth_5fcolormap_0',['earth_colormap',['../structfplot__core_1_1earth__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_4.html b/docs/html/search/classes_4.html deleted file mode 100644 index 095ab59..0000000 --- a/docs/html/search/classes_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js deleted file mode 100644 index 52c5c44..0000000 --- a/docs/html/search/classes_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['filled_5fplot_5fdata_0',['filled_plot_data',['../structfplot__core_1_1filled__plot__data.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_5.html b/docs/html/search/classes_5.html deleted file mode 100644 index fc9cdc9..0000000 --- a/docs/html/search/classes_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_5.js b/docs/html/search/classes_5.js deleted file mode 100644 index 5f3460d..0000000 --- a/docs/html/search/classes_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['get_5fstring_5fresult_0',['get_string_result',['../interfacefplot__core_1_1get__string__result.html',1,'fplot_core']]], - ['grey_5fcolormap_1',['grey_colormap',['../structfplot__core_1_1grey__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_6.html b/docs/html/search/classes_6.html deleted file mode 100644 index 1ecfddd..0000000 --- a/docs/html/search/classes_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_6.js b/docs/html/search/classes_6.js deleted file mode 100644 index fa74e08..0000000 --- a/docs/html/search/classes_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hot_5fcolormap_0',['hot_colormap',['../structfplot__core_1_1hot__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_7.html b/docs/html/search/classes_7.html deleted file mode 100644 index 0fc6fc3..0000000 --- a/docs/html/search/classes_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_7.js b/docs/html/search/classes_7.js deleted file mode 100644 index 37e5f71..0000000 --- a/docs/html/search/classes_7.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['latex_5fterminal_0',['latex_terminal',['../structfplot__core_1_1latex__terminal.html',1,'fplot_core']]], - ['legend_1',['legend',['../structfplot__core_1_1legend.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_8.html b/docs/html/search/classes_8.html deleted file mode 100644 index ac8af7d..0000000 --- a/docs/html/search/classes_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_8.js b/docs/html/search/classes_8.js deleted file mode 100644 index ddb0599..0000000 --- a/docs/html/search/classes_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['multiplot_0',['multiplot',['../structfplot__core_1_1multiplot.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_9.html b/docs/html/search/classes_9.html deleted file mode 100644 index 86cad04..0000000 --- a/docs/html/search/classes_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_9.js b/docs/html/search/classes_9.js deleted file mode 100644 index 048d9fd..0000000 --- a/docs/html/search/classes_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['operator_28_2f_3d_29_0',['operator(/=)',['../interfacefplot__core_1_1operator_07_2_0a_08.html',1,'fplot_core']]], - ['operator_28_3d_3d_29_1',['operator(==)',['../interfacefplot__core_1_1operator_07_0a_0a_08.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_a.html b/docs/html/search/classes_a.html deleted file mode 100644 index 4201e97..0000000 --- a/docs/html/search/classes_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_a.js b/docs/html/search/classes_a.js deleted file mode 100644 index de66f67..0000000 --- a/docs/html/search/classes_a.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['pa_5fget_5fstring_5fresult_0',['pa_get_string_result',['../interfacefplot__core_1_1pa__get__string__result.html',1,'fplot_core']]], - ['parula_5fcolormap_1',['parula_colormap',['../structfplot__core_1_1parula__colormap.html',1,'fplot_core']]], - ['pd_5fget_5fstring_5fresult_2',['pd_get_string_result',['../interfacefplot__core_1_1pd__get__string__result.html',1,'fplot_core']]], - ['plot_3',['plot',['../structfplot__core_1_1plot.html',1,'fplot_core']]], - ['plot_5f2d_4',['plot_2d',['../structfplot__core_1_1plot__2d.html',1,'fplot_core']]], - ['plot_5f3d_5',['plot_3d',['../structfplot__core_1_1plot__3d.html',1,'fplot_core']]], - ['plot_5farrow_6',['plot_arrow',['../structfplot__core_1_1plot__arrow.html',1,'fplot_core']]], - ['plot_5faxis_7',['plot_axis',['../structfplot__core_1_1plot__axis.html',1,'fplot_core']]], - ['plot_5fbar_8',['plot_bar',['../structfplot__core_1_1plot__bar.html',1,'fplot_core']]], - ['plot_5fdata_9',['plot_data',['../structfplot__core_1_1plot__data.html',1,'fplot_core']]], - ['plot_5fdata_5f2d_10',['plot_data_2d',['../structfplot__core_1_1plot__data__2d.html',1,'fplot_core']]], - ['plot_5fdata_5f3d_11',['plot_data_3d',['../structfplot__core_1_1plot__data__3d.html',1,'fplot_core']]], - ['plot_5fdata_5fbar_12',['plot_data_bar',['../structfplot__core_1_1plot__data__bar.html',1,'fplot_core']]], - ['plot_5fdata_5fcolored_13',['plot_data_colored',['../structfplot__core_1_1plot__data__colored.html',1,'fplot_core']]], - ['plot_5fdata_5ferror_5fbars_14',['plot_data_error_bars',['../structfplot__core_1_1plot__data__error__bars.html',1,'fplot_core']]], - ['plot_5fdata_5fhistogram_15',['plot_data_histogram',['../structfplot__core_1_1plot__data__histogram.html',1,'fplot_core']]], - ['plot_5fdata_5ftri_5f2d_16',['plot_data_tri_2d',['../structfplot__core_1_1plot__data__tri__2d.html',1,'fplot_core']]], - ['plot_5flabel_17',['plot_label',['../structfplot__core_1_1plot__label.html',1,'fplot_core']]], - ['plot_5fobject_18',['plot_object',['../structfplot__core_1_1plot__object.html',1,'fplot_core']]], - ['plot_5fpolar_19',['plot_polar',['../structfplot__core_1_1plot__polar.html',1,'fplot_core']]], - ['png_5fterminal_20',['png_terminal',['../structfplot__core_1_1png__terminal.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_b.html b/docs/html/search/classes_b.html deleted file mode 100644 index f88a578..0000000 --- a/docs/html/search/classes_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_b.js b/docs/html/search/classes_b.js deleted file mode 100644 index d2e2271..0000000 --- a/docs/html/search/classes_b.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['qt_5fterminal_0',['qt_terminal',['../structfplot__core_1_1qt__terminal.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_c.html b/docs/html/search/classes_c.html deleted file mode 100644 index fa0cf4d..0000000 --- a/docs/html/search/classes_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_c.js b/docs/html/search/classes_c.js deleted file mode 100644 index fb76893..0000000 --- a/docs/html/search/classes_c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['rainbow_5fcolormap_0',['rainbow_colormap',['../structfplot__core_1_1rainbow__colormap.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_d.html b/docs/html/search/classes_d.html deleted file mode 100644 index 0b6b137..0000000 --- a/docs/html/search/classes_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_d.js b/docs/html/search/classes_d.js deleted file mode 100644 index 8b445a6..0000000 --- a/docs/html/search/classes_d.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['scatter_5fplot_5fdata_0',['scatter_plot_data',['../structfplot__core_1_1scatter__plot__data.html',1,'fplot_core']]], - ['simplify_5fpolyline_1',['simplify_polyline',['../interfacefplot__core_1_1simplify__polyline.html',1,'fplot_core']]], - ['spd_5fget_5fint_5fvalue_2',['spd_get_int_value',['../interfacefplot__core_1_1spd__get__int__value.html',1,'fplot_core']]], - ['spd_5fget_5fstring_5fresult_3',['spd_get_string_result',['../interfacefplot__core_1_1spd__get__string__result.html',1,'fplot_core']]], - ['spd_5fget_5fvalue_4',['spd_get_value',['../interfacefplot__core_1_1spd__get__value.html',1,'fplot_core']]], - ['spd_5fset_5fvalue_5',['spd_set_value',['../interfacefplot__core_1_1spd__set__value.html',1,'fplot_core']]], - ['surface_5fplot_6',['surface_plot',['../structfplot__core_1_1surface__plot.html',1,'fplot_core']]], - ['surface_5fplot_5fdata_7',['surface_plot_data',['../structfplot__core_1_1surface__plot__data.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_e.html b/docs/html/search/classes_e.html deleted file mode 100644 index 2e42779..0000000 --- a/docs/html/search/classes_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_e.js b/docs/html/search/classes_e.js deleted file mode 100644 index 654a4a2..0000000 --- a/docs/html/search/classes_e.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['term_5fget_5fstring_5fresult_0',['term_get_string_result',['../interfacefplot__core_1_1term__get__string__result.html',1,'fplot_core']]], - ['terminal_1',['terminal',['../structfplot__core_1_1terminal.html',1,'fplot_core']]], - ['tri_5fsurface_5fplot_5fdata_2',['tri_surface_plot_data',['../structfplot__core_1_1tri__surface__plot__data.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/classes_f.html b/docs/html/search/classes_f.html deleted file mode 100644 index e664ccd..0000000 --- a/docs/html/search/classes_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_f.js b/docs/html/search/classes_f.js deleted file mode 100644 index adf0ba7..0000000 --- a/docs/html/search/classes_f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['vector_5ffield_5fplot_5fdata_0',['vector_field_plot_data',['../structfplot__core_1_1vector__field__plot__data.html',1,'fplot_core']]] -]; diff --git a/docs/html/search/close.png b/docs/html/search/close.png deleted file mode 100644 index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg deleted file mode 100644 index 337d6cc..0000000 --- a/docs/html/search/close.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html deleted file mode 100644 index e17c711..0000000 --- a/docs/html/search/functions_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js deleted file mode 100644 index c26c3c3..0000000 --- a/docs/html/search/functions_0.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['clear_5fall_0',['clear_all',['../structfplot__core_1_1plot.html#a34d776a2c321b9ac7676945d95990e16',1,'fplot_core::plot']]], - ['clear_5fall_5flabels_1',['clear_all_labels',['../structfplot__core_1_1plot.html#abf9538a6514fb1ed53d5715aacd58e2a',1,'fplot_core::plot']]], - ['clear_5farrows_2',['clear_arrows',['../structfplot__core_1_1plot.html#aef6ccd30310590087ea05f427a799b80',1,'fplot_core::plot']]], - ['copy_5ffrom_3',['copy_from',['../structfplot__core_1_1color.html#a08fa8d6f601ba8641ec91e1f43e1c586',1,'fplot_core::color']]], - ['create_4',['create',['../structfplot__core_1_1delaunay__tri__2d.html#aba77dca84f08dbfb2b115d9d9fdd9aba',1,'fplot_core::delaunay_tri_2d']]] -]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html deleted file mode 100644 index 0ddac0a..0000000 --- a/docs/html/search/functions_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js deleted file mode 100644 index 1ddd4c1..0000000 --- a/docs/html/search/functions_1.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['define_5fdata_0',['define_data',['../structfplot__core_1_1plot__data__2d.html#aff2e615bf20ac66b403695ce10e5be4d',1,'fplot_core::plot_data_2d::define_datapd2d_set_data_1'],['../structfplot__core_1_1plot__data__2d.html#a4ef9823b92c13db70504897adac11e70',1,'fplot_core::plot_data_2d::define_datapd2d_set_data_2'],['../structfplot__core_1_1plot__data__3d.html#ade9ee50a99ab15f4cfcc8a0ecd75e69c',1,'fplot_core::plot_data_3d::define_data()'],['../structfplot__core_1_1surface__plot__data.html#a1dbe06af4e164ada4b80277e70d0320e',1,'fplot_core::surface_plot_data::define_data()'],['../structfplot__core_1_1plot__data__tri__2d.html#a3ce95ac57b2dfda69e754d7314d5e113',1,'fplot_core::plot_data_tri_2d::define_data()'],['../structfplot__core_1_1tri__surface__plot__data.html#ad2fa70d7577676babf477c89d3562060',1,'fplot_core::tri_surface_plot_data::define_data()'],['../structfplot__core_1_1vector__field__plot__data.html#a833b60ff6a9ca8c533e089f2968d335e',1,'fplot_core::vector_field_plot_data::define_data()'],['../structfplot__core_1_1filled__plot__data.html#a3913a71653b75380dc1012c5006d773b',1,'fplot_core::filled_plot_data::define_data()']]], - ['define_5ffunction_5fvalues_1',['define_function_values',['../structfplot__core_1_1delaunay__tri__surface.html#a79ce4c8ed7d243417890fc037f474170',1,'fplot_core::delaunay_tri_surface']]], - ['define_5fx_5ferror_5fdata_2',['define_x_error_data',['../structfplot__core_1_1plot__data__error__bars.html#a897524f1b8098654b9963e1d62b69910',1,'fplot_core::plot_data_error_bars::define_x_error_datapde_define_x_err'],['../structfplot__core_1_1plot__data__error__bars.html#a43b64e7f217392ce49969bbed71a940d',1,'fplot_core::plot_data_error_bars::define_x_error_datapde_define_x_err_lim']]], - ['define_5fxy_5ferror_5fdata_3',['define_xy_error_data',['../structfplot__core_1_1plot__data__error__bars.html#a49891b23e0387645cbea89ad2405c1c9',1,'fplot_core::plot_data_error_bars::define_xy_error_datapde_define_xy_err'],['../structfplot__core_1_1plot__data__error__bars.html#ac0fb40f8ce85f194948a10d91b887d58',1,'fplot_core::plot_data_error_bars::define_xy_error_datapde_define_xy_err_lim']]], - ['define_5fy_5ferror_5fdata_4',['define_y_error_data',['../structfplot__core_1_1plot__data__error__bars.html#a8312de543a61854de5f12c25329f0e49',1,'fplot_core::plot_data_error_bars::define_y_error_datapde_define_y_err'],['../structfplot__core_1_1plot__data__error__bars.html#a8549600a4cd1d3a124292939252f08ba',1,'fplot_core::plot_data_error_bars::define_y_error_datapde_define_y_err_lim']]], - ['draw_5',['draw',['../structfplot__core_1_1plot.html#a9d4351a5ce5288b8f1b8a0e67d5bc5b2',1,'fplot_core::plot::draw()'],['../structfplot__core_1_1multiplot.html#a37bd89e10d4dcf8a97577713eaeb4143',1,'fplot_core::multiplot::draw()']]] -]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html deleted file mode 100644 index 2737c5a..0000000 --- a/docs/html/search/functions_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js deleted file mode 100644 index d82a2ab..0000000 --- a/docs/html/search/functions_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['evaluate_0',['evaluate',['../structfplot__core_1_1delaunay__tri__surface.html#a7f77f147b8d68123f4a782ffa7bdd0be',1,'fplot_core::delaunay_tri_surface::evaluatedts_interp_1'],['../structfplot__core_1_1delaunay__tri__surface.html#aaed4c47865165797dab80d6fd11762b8',1,'fplot_core::delaunay_tri_surface::evaluatedts_interp_2']]] -]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html deleted file mode 100644 index 6da86e7..0000000 --- a/docs/html/search/functions_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js deleted file mode 100644 index ffaee33..0000000 --- a/docs/html/search/functions_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['find_5ftriangle_0',['find_triangle',['../structfplot__core_1_1delaunay__tri__2d.html#aa0c1780f8231cd2abf87151a1914a318',1,'fplot_core::delaunay_tri_2d']]], - ['free_5fresources_1',['free_resources',['../structfplot__core_1_1plot.html#a8747b4e5569b5a025ba6264252358cfd',1,'fplot_core::plot']]] -]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html deleted file mode 100644 index 911304e..0000000 --- a/docs/html/search/functions_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js deleted file mode 100644 index 8227adb..0000000 --- a/docs/html/search/functions_4.js +++ /dev/null @@ -1,118 +0,0 @@ -var searchData= -[ - ['get_0',['get',['../structfplot__core_1_1plot.html#aa98ef8753bb01d52623636be3b496129',1,'fplot_core::plot::get()'],['../structfplot__core_1_1multiplot.html#a3cb5a2d2f473e118f6adeb481cc8ae80',1,'fplot_core::multiplot::get()']]], - ['get_5fallow_5fsmoothing_1',['get_allow_smoothing',['../structfplot__core_1_1surface__plot.html#abb567cd750a1388b1130514713fc8c38',1,'fplot_core::surface_plot']]], - ['get_5fangle_2',['get_angle',['../structfplot__core_1_1plot__label.html#a1363a76ce4b2124cf606610f34c5289d',1,'fplot_core::plot_label']]], - ['get_5farrow_3',['get_arrow',['../structfplot__core_1_1plot.html#a95d3fb67a1e5a8be3881c98ef3dc88bd',1,'fplot_core::plot']]], - ['get_5farrow_5fcount_4',['get_arrow_count',['../structfplot__core_1_1plot.html#a3e928c6fed0bfd47b4875fa409f592c2',1,'fplot_core::plot']]], - ['get_5farrow_5fsize_5',['get_arrow_size',['../structfplot__core_1_1vector__field__plot__data.html#aa081611ba3786ab60023567662d1ab39',1,'fplot_core::vector_field_plot_data']]], - ['get_5fautoscale_6',['get_autoscale',['../structfplot__core_1_1plot__axis.html#aaaf9ace8a7b41b32aaee34f103e10ca0',1,'fplot_core::plot_axis::get_autoscale()'],['../structfplot__core_1_1plot__polar.html#adb315455f8ef25ef6a861b02ee4ef771',1,'fplot_core::plot_polar::get_autoscale()']]], - ['get_5faxes_5fstring_7',['get_axes_string',['../structfplot__core_1_1scatter__plot__data.html#a7ab0b579124a815634cbdcac8c81dde0',1,'fplot_core::scatter_plot_data::get_axes_string()'],['../structfplot__core_1_1plot__data__2d.html#abff268284715672d150a629a1f91f3fe',1,'fplot_core::plot_data_2d::get_axes_string()'],['../structfplot__core_1_1plot__data__3d.html#aafb795e54877133e338807877845ee53',1,'fplot_core::plot_data_3d::get_axes_string()'],['../structfplot__core_1_1filled__plot__data.html#a032e1917321920d2a04cf03b03f67946',1,'fplot_core::filled_plot_data::get_axes_string()']]], - ['get_5faxis_5fequal_8',['get_axis_equal',['../structfplot__core_1_1plot.html#ac7bc0d5bc86c478ec9cf19345b84c5ed',1,'fplot_core::plot']]], - ['get_5fazimuth_9',['get_azimuth',['../structfplot__core_1_1plot__3d.html#acee2c2a674fa5aadb08211e4a18a0d5a',1,'fplot_core::plot_3d']]], - ['get_5fcolor_10',['get_color',['../structfplot__core_1_1plot__arrow.html#a419e8b0aae89c5f8fd11c93787209bca',1,'fplot_core::plot_arrow']]], - ['get_5fcolor_5fdata_11',['get_color_data',['../structfplot__core_1_1plot__data__2d.html#a44277af64f3ac00c1b8891d9ab07d097',1,'fplot_core::plot_data_2d::get_color_data()'],['../structfplot__core_1_1plot__data__3d.html#a85627d579d5879fcbe35d3129e9035c3',1,'fplot_core::plot_data_3d::get_color_data()']]], - ['get_5fcolor_5fstring_12',['get_color_string',['../structfplot__core_1_1colormap.html#a03f0bef95c6a9c61ad04c63b84f8b6d5',1,'fplot_core::colormap::get_color_string()'],['../structfplot__core_1_1rainbow__colormap.html#a3acc19f954331a6310d5eb3425519f75',1,'fplot_core::rainbow_colormap::get_color_string()'],['../structfplot__core_1_1hot__colormap.html#af5a6ff4e313cf7c2f2b0091e8d25396b',1,'fplot_core::hot_colormap::get_color_string()'],['../structfplot__core_1_1cool__colormap.html#ab2806549f28dd4a194d79904497f03ce',1,'fplot_core::cool_colormap::get_color_string()'],['../structfplot__core_1_1parula__colormap.html#aab47b0c74c9a87e1a42b792cac59355e',1,'fplot_core::parula_colormap::get_color_string()'],['../structfplot__core_1_1grey__colormap.html#aec585307d1ab8f9fb7a039ac9695f58f',1,'fplot_core::grey_colormap::get_color_string()'],['../structfplot__core_1_1earth__colormap.html#ab54eea4aa31fdbb7368e0245143200ea',1,'fplot_core::earth_colormap::get_color_string()'],['../structfplot__core_1_1custom__colormap.html#acfb9922b4fc8f462310c166156b7d898',1,'fplot_core::custom_colormap::get_color_stringcustom_get_clr']]], - ['get_5fcolormap_13',['get_colormap',['../structfplot__core_1_1custom__colormap.html#ae99878b9e1218314af1adc982af6092d',1,'fplot_core::custom_colormap::get_colormap()'],['../structfplot__core_1_1plot.html#a132b8951071c0f8f15a0282625c2975e',1,'fplot_core::plot::get_colormap()']]], - ['get_5fcolumn_5fcount_14',['get_column_count',['../structfplot__core_1_1multiplot.html#afa4b9ef0d7c48a5d0365fd14147a0945',1,'fplot_core::multiplot']]], - ['get_5fcommand_5fstring_15',['get_command_string',['../structfplot__core_1_1plot__object.html#a986486fd0e463722c0d2e46d765d19d3',1,'fplot_core::plot_object::get_command_string()'],['../structfplot__core_1_1plot__label.html#a24d375efbdb3f3a4859a4f9752fa6999',1,'fplot_core::plot_label::get_command_string()'],['../structfplot__core_1_1plot__arrow.html#acdc8d52f5af979888d88401811f7f199',1,'fplot_core::plot_arrow::get_command_string()'],['../structfplot__core_1_1terminal.html#a5167d5b60a3a9dde0ddfdd9bd6a41f9c',1,'fplot_core::terminal::get_command_string()'],['../structfplot__core_1_1png__terminal.html#a54f5f9a908cdfb83a849015ca574b22f',1,'fplot_core::png_terminal::get_command_string()'],['../structfplot__core_1_1latex__terminal.html#a7b000e38ed8bb89bdeb10077855714a6',1,'fplot_core::latex_terminal::get_command_string()'],['../structfplot__core_1_1plot__axis.html#a00d4833c85b699bdff381ae05100cf6a',1,'fplot_core::plot_axis::get_command_string()'],['../structfplot__core_1_1legend.html#af7e10649da6f0aeb6c94ddad33496ed4',1,'fplot_core::legend::get_command_string()'],['../structfplot__core_1_1colormap.html#a6c06d5831f8e2bb173f2cabfc89b471e',1,'fplot_core::colormap::get_command_string()'],['../structfplot__core_1_1plot.html#a9a16fc8a4c67e031c1202754f32d1153',1,'fplot_core::plot::get_command_string()'],['../structfplot__core_1_1scatter__plot__data.html#a38752353ad9e2129840b07df8836e400',1,'fplot_core::scatter_plot_data::get_command_string()'],['../structfplot__core_1_1surface__plot__data.html#ac7a97a7065529fbf23cc78ed003d3e6b',1,'fplot_core::surface_plot_data::get_command_string()'],['../structfplot__core_1_1plot__2d.html#a82afa27b47f88385d430dd3c9b145d20',1,'fplot_core::plot_2d::get_command_string()'],['../structfplot__core_1_1plot__3d.html#a374d3655b53b1f429d2db81f375b8d86',1,'fplot_core::plot_3d::get_command_string()'],['../structfplot__core_1_1surface__plot.html#a1fc12a0c4034588eb95d67b8dc3d010b',1,'fplot_core::surface_plot::get_command_string()'],['../structfplot__core_1_1multiplot.html#a38da5245525925cd37f7dc32a88aedd7',1,'fplot_core::multiplot::get_command_string()'],['../structfplot__core_1_1plot__data__error__bars.html#ab80a5fe8b5abe4ed9b18594ad11b4e43',1,'fplot_core::plot_data_error_bars::get_command_string()'],['../structfplot__core_1_1plot__data__bar.html#a9711b599bf9cb178ed7c45ec1588aa46',1,'fplot_core::plot_data_bar::get_command_string()'],['../structfplot__core_1_1plot__bar.html#aaf330bd04f03f6f56e8c74b00bdd123e',1,'fplot_core::plot_bar::get_command_string()'],['../structfplot__core_1_1plot__data__tri__2d.html#afc5f53c3238bd1dfd1a5a0c3ade8c567',1,'fplot_core::plot_data_tri_2d::get_command_string()'],['../structfplot__core_1_1tri__surface__plot__data.html#a469efa44e12737b0ec95737f5cd3aabb',1,'fplot_core::tri_surface_plot_data::get_command_string()'],['../structfplot__core_1_1vector__field__plot__data.html#acb5a624f5190d33c63bef21abd6d191e',1,'fplot_core::vector_field_plot_data::get_command_string()'],['../structfplot__core_1_1plot__polar.html#ad1a4a767c50e8fe86d5526d45b95f794',1,'fplot_core::plot_polar::get_command_string()'],['../structfplot__core_1_1filled__plot__data.html#a5a173b2b8171077de2d77ee10a24904b',1,'fplot_core::filled_plot_data::get_command_string()']]], - ['get_5fcoordinate_5fsystem_16',['get_coordinate_system',['../structfplot__core_1_1plot__3d.html#a56ffdd5bb6cd107c22bc8a699681d993',1,'fplot_core::plot_3d']]], - ['get_5fcount_17',['get_count',['../structfplot__core_1_1plot.html#a949ae875c30e1b06cb86bb7bb8958e73',1,'fplot_core::plot::get_count()'],['../structfplot__core_1_1scatter__plot__data.html#af220d3b0ebfaba65fb9c2b9326d39d0f',1,'fplot_core::scatter_plot_data::get_count()'],['../structfplot__core_1_1plot__data__2d.html#a99a502c8e85b4eedb161e2bcab2f88c6',1,'fplot_core::plot_data_2d::get_count()'],['../structfplot__core_1_1plot__data__3d.html#a98903845197a0e6985f61e24f62b970e',1,'fplot_core::plot_data_3d::get_count()'],['../structfplot__core_1_1plot__data__error__bars.html#a3cdda0b5155304b1ce26a99c1efbb965',1,'fplot_core::plot_data_error_bars::get_count()']]], - ['get_5fdata_5fstring_18',['get_data_string',['../structfplot__core_1_1plot__data.html#a5b4c937341b806a85419f5d6968aea2d',1,'fplot_core::plot_data::get_data_string()'],['../structfplot__core_1_1plot__data__2d.html#a198cd94a65ba98cbd2423b749a572154',1,'fplot_core::plot_data_2d::get_data_string()'],['../structfplot__core_1_1plot__data__3d.html#a55720af848b61039e8de8a7357800221',1,'fplot_core::plot_data_3d::get_data_string()'],['../structfplot__core_1_1surface__plot__data.html#a41149a1d16e0dfbdeda8667abf0f50c2',1,'fplot_core::surface_plot_data::get_data_string()'],['../structfplot__core_1_1plot__data__error__bars.html#aaf126505fb7cb60f95190dccc89d0d4a',1,'fplot_core::plot_data_error_bars::get_data_string()'],['../structfplot__core_1_1plot__data__bar.html#aa5fa7de9642e1f9e520b4a43cd6f7ae7',1,'fplot_core::plot_data_bar::get_data_string()'],['../structfplot__core_1_1plot__data__tri__2d.html#a6a3428fb27e8b2d557075e605781a5bc',1,'fplot_core::plot_data_tri_2d::get_data_string()'],['../structfplot__core_1_1tri__surface__plot__data.html#abf08b1c7f2c4980d238a2a8c649af522',1,'fplot_core::tri_surface_plot_data::get_data_string()'],['../structfplot__core_1_1vector__field__plot__data.html#a35f10299e5447c27a670ec648d4dff9a',1,'fplot_core::vector_field_plot_data::get_data_string()'],['../structfplot__core_1_1filled__plot__data.html#a1a29d4771e4255a27dc5236407d14144',1,'fplot_core::filled_plot_data::get_data_string()']]], - ['get_5fdraw_5fagainst_5fy2_19',['get_draw_against_y2',['../structfplot__core_1_1plot__data__2d.html#afcbdba943a724904ce1099d8c48c8b50',1,'fplot_core::plot_data_2d::get_draw_against_y2()'],['../structfplot__core_1_1filled__plot__data.html#a2946d6a05362b47c7f01603edf4a6690',1,'fplot_core::filled_plot_data::get_draw_against_y2()']]], - ['get_5fdraw_5fborder_20',['get_draw_border',['../structfplot__core_1_1legend.html#a1ed58a0a0f295b937932dc954d154464',1,'fplot_core::legend::get_draw_border()'],['../structfplot__core_1_1colormap.html#adfde936a6669f562b17fba87e8ae8588',1,'fplot_core::colormap::get_draw_border()'],['../structfplot__core_1_1plot.html#af6ce304fe4acb418af76d672f99c1fb9',1,'fplot_core::plot::get_draw_border()']]], - ['get_5fdraw_5finside_5faxes_21',['get_draw_inside_axes',['../structfplot__core_1_1legend.html#a88c74437f8906b6d1247e662b95d8a52',1,'fplot_core::legend']]], - ['get_5fdraw_5fline_22',['get_draw_line',['../structfplot__core_1_1scatter__plot__data.html#a5f8e8427299c380b69eef4207fdac6fd',1,'fplot_core::scatter_plot_data']]], - ['get_5fdraw_5fmarkers_23',['get_draw_markers',['../structfplot__core_1_1scatter__plot__data.html#aa78996b052703cd440b579a3f19c0323',1,'fplot_core::scatter_plot_data']]], - ['get_5felevation_24',['get_elevation',['../structfplot__core_1_1plot__3d.html#a6a5612c5ea70d90368de4e738e662ee8',1,'fplot_core::plot_3d']]], - ['get_5ffilename_25',['get_filename',['../structfplot__core_1_1png__terminal.html#af9f9678ab852cd1cdf1ba93607045ad0',1,'fplot_core::png_terminal::get_filename()'],['../structfplot__core_1_1latex__terminal.html#a4a9465f48c206d9953fd9540b9d28129',1,'fplot_core::latex_terminal::get_filename()']]], - ['get_5ffill_5farrow_26',['get_fill_arrow',['../structfplot__core_1_1vector__field__plot__data.html#ac83b7d14395a9c7894ae89f86c3aeb96',1,'fplot_core::vector_field_plot_data']]], - ['get_5ffill_5fcurve_27',['get_fill_curve',['../structfplot__core_1_1scatter__plot__data.html#a574f1a94ca7ad3fbb1a1da445a50cbee',1,'fplot_core::scatter_plot_data']]], - ['get_5ffont_5fname_28',['get_font_name',['../structfplot__core_1_1terminal.html#a4958475366c740ba22f15aea8ca61efb',1,'fplot_core::terminal::get_font_name()'],['../structfplot__core_1_1plot.html#af6528d0d7a8e62f968e8818012732b09',1,'fplot_core::plot::get_font_name()'],['../structfplot__core_1_1multiplot.html#ae37d626915c86f2068a90aa643b7ec7d',1,'fplot_core::multiplot::get_font_name()']]], - ['get_5ffont_5fsize_29',['get_font_size',['../structfplot__core_1_1terminal.html#a1d21543a70c7aa857b8f6104671d3770',1,'fplot_core::terminal::get_font_size()'],['../structfplot__core_1_1plot.html#abc559881bc8d4bea9b716964e37e92ed',1,'fplot_core::plot::get_font_size()'],['../structfplot__core_1_1multiplot.html#a31171ee8993d645c5e8d60212002e1b1',1,'fplot_core::multiplot::get_font_size()']]], - ['get_5fhead_5fangle_30',['get_head_angle',['../structfplot__core_1_1plot__arrow.html#a2ac66de42f97cf794d6184c9e092f85e',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5fback_5fangle_31',['get_head_back_angle',['../structfplot__core_1_1plot__arrow.html#abfd19a819ab33659213588cd0d7dfe9c',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5ffill_32',['get_head_fill',['../structfplot__core_1_1plot__arrow.html#a4cd206c5596dbab50b91472260646f29',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5flocation_33',['get_head_location',['../structfplot__core_1_1plot__arrow.html#a65d9efb1c3a6874ffb9745b6ba67d9ae',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5fsize_34',['get_head_size',['../structfplot__core_1_1plot__arrow.html#a80eff3e2ee043866d69c4074006e00d2',1,'fplot_core::plot_arrow']]], - ['get_5fhead_5ftype_35',['get_head_type',['../structfplot__core_1_1plot__arrow.html#a3c95cde3a7e4748f8a2906ec9404d477',1,'fplot_core::plot_arrow']]], - ['get_5fhorizontal_36',['get_horizontal',['../structfplot__core_1_1colormap.html#a11e1d8c4d776814ba9b931dea5eba55f',1,'fplot_core::colormap']]], - ['get_5fhorizontal_5fposition_37',['get_horizontal_position',['../structfplot__core_1_1legend.html#a6e4a288471d81d99105f2781dbc0944a',1,'fplot_core::legend']]], - ['get_5fid_5fstring_38',['get_id_string',['../structfplot__core_1_1terminal.html#a806a00204a80a6cc2676d2fd05179ba4',1,'fplot_core::terminal::get_id_string()'],['../structfplot__core_1_1windows__terminal.html#aa9422d9df32df6bae76145d27663f32b',1,'fplot_core::windows_terminal::get_id_string()'],['../structfplot__core_1_1qt__terminal.html#a2544ce4552975f086ec0f20ae702657d',1,'fplot_core::qt_terminal::get_id_string()'],['../structfplot__core_1_1wxt__terminal.html#aeea16e93a4be79e2687a207c405db431',1,'fplot_core::wxt_terminal::get_id_string()'],['../structfplot__core_1_1png__terminal.html#a7fc33aaa61a2ecd8d1786b573c1194e9',1,'fplot_core::png_terminal::get_id_string()'],['../structfplot__core_1_1latex__terminal.html#ae59d44e616fbad4e93bf1fc7159a44d2',1,'fplot_core::latex_terminal::get_id_string()'],['../structfplot__core_1_1plot__axis.html#a503b9d12d8a13992bdcf2d2698a90b10',1,'fplot_core::plot_axis::get_id_string()'],['../structfplot__core_1_1x__axis.html#a7cb8753743161cd7e18a3df9721b5129',1,'fplot_core::x_axis::get_id_string()'],['../structfplot__core_1_1y__axis.html#a0e82d7adc90762d6885b22d2abb9651b',1,'fplot_core::y_axis::get_id_string()'],['../structfplot__core_1_1y2__axis.html#afa3ce73eceaade01e8b3488e5dac9eea',1,'fplot_core::y2_axis::get_id_string()'],['../structfplot__core_1_1z__axis.html#a9a72041ffd57f8e2cb109e4d49d0f922',1,'fplot_core::z_axis::get_id_string()']]], - ['get_5findices_39',['get_indices',['../structfplot__core_1_1delaunay__tri__2d.html#a2a39c08bcaa4819d25684d8dbb3ee508',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fis_5flog_5fscaled_40',['get_is_log_scaled',['../structfplot__core_1_1plot__axis.html#a1826e039d7a1726fc8c19a5215158708',1,'fplot_core::plot_axis']]], - ['get_5fis_5fopaque_41',['get_is_opaque',['../structfplot__core_1_1legend.html#a116ec03262065d54826f531c5b2e636e',1,'fplot_core::legend']]], - ['get_5fis_5fvisible_42',['get_is_visible',['../structfplot__core_1_1plot__label.html#a6a58bbc93d4a081c10b912da6273fa03',1,'fplot_core::plot_label::get_is_visible()'],['../structfplot__core_1_1plot__arrow.html#aa8b6628e7136aa166c1e6205dc4dc169',1,'fplot_core::plot_arrow::get_is_visible()'],['../structfplot__core_1_1legend.html#aba8ff6b836a1fd2fefe41fc58751834b',1,'fplot_core::legend::get_is_visible()']]], - ['get_5flabel_43',['get_label',['../structfplot__core_1_1colormap.html#ae06b58a108c1805c3ab2138dc31bd326',1,'fplot_core::colormap::get_label()'],['../structfplot__core_1_1plot.html#a05d9262e904709835f79533d63eba64e',1,'fplot_core::plot::get_labelplt_get_label']]], - ['get_5flabel_5fcount_44',['get_label_count',['../structfplot__core_1_1plot.html#ab6240e8f98ecc508d3bc39adc44e8a6c',1,'fplot_core::plot']]], - ['get_5flayout_45',['get_layout',['../structfplot__core_1_1legend.html#a0692cc15c73eac64351831d3d4d28eb0',1,'fplot_core::legend']]], - ['get_5flegend_46',['get_legend',['../structfplot__core_1_1plot.html#abf7fb454462b1d553fe3995575f77d15',1,'fplot_core::plot']]], - ['get_5flight_5fintensity_47',['get_light_intensity',['../structfplot__core_1_1surface__plot.html#a23afb86c55364a3669f9e995d256c55c',1,'fplot_core::surface_plot']]], - ['get_5flimits_48',['get_limits',['../structfplot__core_1_1plot__axis.html#a025972a1e5bdd167cfd1e605798f3236',1,'fplot_core::plot_axis']]], - ['get_5fline_5fcolor_49',['get_line_color',['../structfplot__core_1_1plot__data__colored.html#aafd241043c19b55b90412b77766da1bd',1,'fplot_core::plot_data_colored']]], - ['get_5fline_5fstyle_50',['get_line_style',['../structfplot__core_1_1plot__arrow.html#a5689908ce348e110e19a14968bb41315',1,'fplot_core::plot_arrow::get_line_style()'],['../structfplot__core_1_1scatter__plot__data.html#a207dc9773f6dd173799dd607c4e321b6',1,'fplot_core::scatter_plot_data::get_line_style()'],['../structfplot__core_1_1plot__data__tri__2d.html#acd24f81dd3ea6e560ef8967762365c59',1,'fplot_core::plot_data_tri_2d::get_line_style()']]], - ['get_5fline_5fwidth_51',['get_line_width',['../structfplot__core_1_1plot__arrow.html#aa054166ee5ab324006aa3a79bcccb2d7',1,'fplot_core::plot_arrow::get_line_width()'],['../structfplot__core_1_1scatter__plot__data.html#acfab9f133dae8af4eee2a0151d3cb8e7',1,'fplot_core::scatter_plot_data::get_line_width()'],['../structfplot__core_1_1plot__data__tri__2d.html#a1d6f55f5124ea7fed1db1e1682415f72',1,'fplot_core::plot_data_tri_2d::get_line_width()']]], - ['get_5fmarker_5ffrequency_52',['get_marker_frequency',['../structfplot__core_1_1scatter__plot__data.html#abecca27ba9033242c9cb76692bb8d9ec',1,'fplot_core::scatter_plot_data']]], - ['get_5fmarker_5fscaling_53',['get_marker_scaling',['../structfplot__core_1_1scatter__plot__data.html#a3a09033deefd1c5d3157dff1a0b4c05d',1,'fplot_core::scatter_plot_data']]], - ['get_5fmarker_5fstyle_54',['get_marker_style',['../structfplot__core_1_1scatter__plot__data.html#af7386b5c9cecb7c57e619185f0284ee6',1,'fplot_core::scatter_plot_data']]], - ['get_5fmove_5fto_5ffront_55',['get_move_to_front',['../structfplot__core_1_1plot__arrow.html#a6beddd6f29376f864ed6515b2936badb',1,'fplot_core::plot_arrow']]], - ['get_5fname_56',['get_name',['../structfplot__core_1_1plot__data.html#a445f80b716146d6087d2f1adaa4b98bf',1,'fplot_core::plot_data']]], - ['get_5fplot_5fcount_57',['get_plot_count',['../structfplot__core_1_1multiplot.html#a354b6419ea8889d27a789c11d19d30ae',1,'fplot_core::multiplot']]], - ['get_5fplot_5fwindow_5fnumber_58',['get_plot_window_number',['../structfplot__core_1_1terminal.html#a791d7842cbb35ef499cbc9089f5921eb',1,'fplot_core::terminal']]], - ['get_5fplot_5fx_5ferror_5fbars_59',['get_plot_x_error_bars',['../structfplot__core_1_1plot__data__error__bars.html#a680ba7316765bc7c4b00c603ccf96a05',1,'fplot_core::plot_data_error_bars']]], - ['get_5fplot_5fy_5ferror_5fbars_60',['get_plot_y_error_bars',['../structfplot__core_1_1plot__data__error__bars.html#a44eac08eca6a448fb2424a3ca4e9b3cc',1,'fplot_core::plot_data_error_bars']]], - ['get_5fpoint_5fcount_61',['get_point_count',['../structfplot__core_1_1delaunay__tri__2d.html#ae0e68fb12ac6ce70da9bf03a4f77778d',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fpoint_5fsize_5fdata_62',['get_point_size_data',['../structfplot__core_1_1plot__data__2d.html#a703b322285b948322b82b1450ddb89f3',1,'fplot_core::plot_data_2d::get_point_size_data()'],['../structfplot__core_1_1plot__data__3d.html#ae49068baed9bb95fed74268ea24ac3ac',1,'fplot_core::plot_data_3d::get_point_size_data()']]], - ['get_5fpoints_5fx_63',['get_points_x',['../structfplot__core_1_1delaunay__tri__2d.html#abdaa5a6e385627ba0c0525c4b9d7427b',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fpoints_5fy_64',['get_points_y',['../structfplot__core_1_1delaunay__tri__2d.html#acaac501f173450d34594d3b6f36caa51',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fpoints_5fz_65',['get_points_z',['../structfplot__core_1_1delaunay__tri__surface.html#a87a65ab9d6e614217b738e40bcca3688',1,'fplot_core::delaunay_tri_surface']]], - ['get_5fposition_66',['get_position',['../structfplot__core_1_1plot__label.html#a683715b72ba17d79b0f7f75ce6223ab2',1,'fplot_core::plot_label']]], - ['get_5fradial_5flimits_67',['get_radial_limits',['../structfplot__core_1_1plot__polar.html#a24177754fa37e095f2500a8f0d9cf269',1,'fplot_core::plot_polar']]], - ['get_5frow_5fcount_68',['get_row_count',['../structfplot__core_1_1multiplot.html#af8e5de63b2d4424ef31c6454f0b4a441',1,'fplot_core::multiplot']]], - ['get_5fshow_5fcolorbar_69',['get_show_colorbar',['../structfplot__core_1_1plot.html#a5b11d0a4762b08daa7176b50d2d445fd',1,'fplot_core::plot']]], - ['get_5fshow_5fcontours_70',['get_show_contours',['../structfplot__core_1_1surface__plot.html#a3a41ac572a7b31cf23e582ee8023d651',1,'fplot_core::surface_plot']]], - ['get_5fshow_5fgridlines_71',['get_show_gridlines',['../structfplot__core_1_1plot.html#ad6c6e15a4b1d960252b5bfe1d380a5f3',1,'fplot_core::plot']]], - ['get_5fshow_5fhidden_72',['get_show_hidden',['../structfplot__core_1_1surface__plot.html#ab30c5358ab2f8852753150774befd898',1,'fplot_core::surface_plot']]], - ['get_5fshow_5ftics_73',['get_show_tics',['../structfplot__core_1_1colormap.html#a0800d95684d4756cae09f365a8e93b5d',1,'fplot_core::colormap']]], - ['get_5fsimplification_5ffactor_74',['get_simplification_factor',['../structfplot__core_1_1scatter__plot__data.html#a9e1b45badadfa1bda1b20ea8d9a2f1fe',1,'fplot_core::scatter_plot_data']]], - ['get_5fsimplify_5fdata_75',['get_simplify_data',['../structfplot__core_1_1scatter__plot__data.html#a0d0755bca68c8c758bc7f5ab880f65e3',1,'fplot_core::scatter_plot_data']]], - ['get_5fsize_76',['get_size',['../structfplot__core_1_1surface__plot__data.html#a3a90bfbfccf24c272e1bd151167cf8ae',1,'fplot_core::surface_plot_data']]], - ['get_5fspecular_5fintensity_77',['get_specular_intensity',['../structfplot__core_1_1surface__plot.html#a88ad210fb239e4ef9943c805b73add68',1,'fplot_core::surface_plot']]], - ['get_5fsquare_5faxes_78',['get_square_axes',['../structfplot__core_1_1plot__2d.html#ae408393a833c5978996701ab198ba0bb',1,'fplot_core::plot_2d']]], - ['get_5ftail_5flocation_79',['get_tail_location',['../structfplot__core_1_1plot__arrow.html#a4ad925efaa9bb101c20799ba29028d52',1,'fplot_core::plot_arrow']]], - ['get_5fterminal_80',['get_terminal',['../structfplot__core_1_1plot.html#ad2401d852a81076fe72cf8a808fde792',1,'fplot_core::plot::get_terminal()'],['../structfplot__core_1_1multiplot.html#a3e773ed8f697086383a91cfc88be412b',1,'fplot_core::multiplot::get_terminal()']]], - ['get_5ftext_81',['get_text',['../structfplot__core_1_1plot__label.html#a7c60aed4792e8700e1154e213d0cb92e',1,'fplot_core::plot_label']]], - ['get_5ftheta_5fdirection_82',['get_theta_direction',['../structfplot__core_1_1plot__polar.html#aa2baa0c84a23e7c3069ce2fcd4050e7e',1,'fplot_core::plot_polar']]], - ['get_5ftheta_5fstart_5fposition_83',['get_theta_start_position',['../structfplot__core_1_1plot__polar.html#afeb1ddee4cb09260fd4f92a4e70e8e18',1,'fplot_core::plot_polar']]], - ['get_5ftic_5flabel_5fformat_84',['get_tic_label_format',['../structfplot__core_1_1plot__axis.html#adf896e948d36fc834734ba6abccbe9d1',1,'fplot_core::plot_axis']]], - ['get_5ftics_5finward_85',['get_tics_inward',['../structfplot__core_1_1plot.html#a688f3645c69308cf608231a21b0aed64',1,'fplot_core::plot']]], - ['get_5ftitle_86',['get_title',['../structfplot__core_1_1terminal.html#ac706187861e60e83f2d327ed86175bb3',1,'fplot_core::terminal::get_title()'],['../structfplot__core_1_1plot__axis.html#af93e4f7ff1f6ea1823a45a92a272f91c',1,'fplot_core::plot_axis::get_title()'],['../structfplot__core_1_1plot.html#a133ef2de58d480ba1a3192cc26a5c58d',1,'fplot_core::plot::get_title()'],['../structfplot__core_1_1multiplot.html#a53b06b534a0fd70fb17323ec5bb9b063',1,'fplot_core::multiplot::get_title()']]], - ['get_5ftransparency_87',['get_transparency',['../structfplot__core_1_1surface__plot.html#a16dbdc679951a0f58e449349d7d5c3c0',1,'fplot_core::surface_plot']]], - ['get_5ftriangle_5fcount_88',['get_triangle_count',['../structfplot__core_1_1delaunay__tri__2d.html#a74c3e196311190b91f8889f756edf630',1,'fplot_core::delaunay_tri_2d']]], - ['get_5fuse_5fdata_5fdependent_5fcolors_89',['get_use_data_dependent_colors',['../structfplot__core_1_1scatter__plot__data.html#a65e5e58525b877b9bfd4873dc7b2e9e4',1,'fplot_core::scatter_plot_data::get_use_data_dependent_colors()'],['../structfplot__core_1_1vector__field__plot__data.html#a1c8d0b54c39a88ec703fe887395d9de1',1,'fplot_core::vector_field_plot_data::get_use_data_dependent_colors()']]], - ['get_5fuse_5fdefault_5fsize_90',['get_use_default_size',['../structfplot__core_1_1plot__arrow.html#aacd237f46dd75db4cd7da3e6149b4dae',1,'fplot_core::plot_arrow']]], - ['get_5fuse_5fdefault_5ftic_5flabel_5fformat_91',['get_use_default_tic_label_format',['../structfplot__core_1_1plot__axis.html#a43b1a4ecac087b3b84d9019383d1030e',1,'fplot_core::plot_axis']]], - ['get_5fuse_5ferror_5fbox_92',['get_use_error_box',['../structfplot__core_1_1plot__data__error__bars.html#a8420ea83599f290a9cd54754b292b2b4',1,'fplot_core::plot_data_error_bars']]], - ['get_5fuse_5flighting_93',['get_use_lighting',['../structfplot__core_1_1surface__plot.html#a66de771aa5424068059cc90db5150393',1,'fplot_core::surface_plot']]], - ['get_5fuse_5fmap_5fview_94',['get_use_map_view',['../structfplot__core_1_1plot__3d.html#ad61ad94ee9d573d1d51aa8cf463c59b4',1,'fplot_core::plot_3d']]], - ['get_5fuse_5frange_95',['get_use_range',['../structfplot__core_1_1plot__data__error__bars.html#adba3954ad57120529148371629340091',1,'fplot_core::plot_data_error_bars']]], - ['get_5fuse_5fvariable_5fsize_5fpoints_96',['get_use_variable_size_points',['../structfplot__core_1_1scatter__plot__data.html#ae7263aa5d4f1fb5fdd8941a7c69a19a3',1,'fplot_core::scatter_plot_data']]], - ['get_5fuse_5fwireframe_97',['get_use_wireframe',['../structfplot__core_1_1surface__plot__data.html#a0d2cebb75afa92984e700aaa36251683',1,'fplot_core::surface_plot_data::get_use_wireframe()'],['../structfplot__core_1_1tri__surface__plot__data.html#a3fc771c7f1bdb8104ae08fabf6c665dd',1,'fplot_core::tri_surface_plot_data::get_use_wireframe()']]], - ['get_5fuse_5fy2_5faxis_98',['get_use_y2_axis',['../structfplot__core_1_1plot__2d.html#a90474e948b36c694223ab528dedcd2bc',1,'fplot_core::plot_2d']]], - ['get_5fvertical_5fposition_99',['get_vertical_position',['../structfplot__core_1_1legend.html#abb44e0b424ee3a9170fc4ddecf39c481',1,'fplot_core::legend']]], - ['get_5fwindow_5fheight_100',['get_window_height',['../structfplot__core_1_1terminal.html#ab368a38267c496220bea42ea79be8413',1,'fplot_core::terminal']]], - ['get_5fwindow_5fwidth_101',['get_window_width',['../structfplot__core_1_1terminal.html#adc47a1a1c7156f8f2adf8510193ee26c',1,'fplot_core::terminal']]], - ['get_5fx_102',['get_x',['../structfplot__core_1_1scatter__plot__data.html#a12a4a9e221cd17546332eab66ee3587f',1,'fplot_core::scatter_plot_data::get_x()'],['../structfplot__core_1_1plot__data__2d.html#a83fd2bbcc7a8db64d64fa2e4f8540698',1,'fplot_core::plot_data_2d::get_x()'],['../structfplot__core_1_1plot__data__3d.html#a73ca5dfd8f294a9c6b5f84767bebaad2',1,'fplot_core::plot_data_3d::get_x()'],['../structfplot__core_1_1surface__plot__data.html#aaf4084060174d016296cf8cedc37b34a',1,'fplot_core::surface_plot_data::get_x()']]], - ['get_5fx_5faxis_103',['get_x_axis',['../structfplot__core_1_1plot__2d.html#af162aeb3b01f1d64c741889a0cd58cc8',1,'fplot_core::plot_2d::get_x_axis()'],['../structfplot__core_1_1plot__3d.html#afe5605d48034ee94fbaf08af6d47e59f',1,'fplot_core::plot_3d::get_x_axis()']]], - ['get_5fx_5fdata_104',['get_x_data',['../structfplot__core_1_1plot__data__2d.html#a191daa9d59fb985eae560be76e826d2c',1,'fplot_core::plot_data_2d::get_x_data()'],['../structfplot__core_1_1plot__data__3d.html#a13c7c8e4c4ecb9fb80aee24b75a5cff3',1,'fplot_core::plot_data_3d::get_x_data()']]], - ['get_5fy_105',['get_y',['../structfplot__core_1_1scatter__plot__data.html#a593db6ad20d55e9f6240d66713352a26',1,'fplot_core::scatter_plot_data::get_y()'],['../structfplot__core_1_1plot__data__2d.html#a97d6c5a96add7522152fe8b3146081d6',1,'fplot_core::plot_data_2d::get_y()'],['../structfplot__core_1_1plot__data__3d.html#a487acf51a34ff00fe81c8b9156fafc5a',1,'fplot_core::plot_data_3d::get_y()'],['../structfplot__core_1_1surface__plot__data.html#ae6395f27b33c147226f04afdd4d08471',1,'fplot_core::surface_plot_data::get_y()']]], - ['get_5fy2_5faxis_106',['get_y2_axis',['../structfplot__core_1_1plot__2d.html#a3f312d0ddd992171e7fef6ac7b142698',1,'fplot_core::plot_2d']]], - ['get_5fy_5faxis_107',['get_y_axis',['../structfplot__core_1_1plot__2d.html#ab423155405406198f9d01bbba1311baf',1,'fplot_core::plot_2d::get_y_axis()'],['../structfplot__core_1_1plot__3d.html#ad39ce86017565371155ce84eacfd2086',1,'fplot_core::plot_3d::get_y_axis()']]], - ['get_5fy_5fdata_108',['get_y_data',['../structfplot__core_1_1plot__data__2d.html#a1f46fa50e4d2a1eaff9d881b614f3122',1,'fplot_core::plot_data_2d::get_y_data()'],['../structfplot__core_1_1plot__data__3d.html#a88c4206070248fb431e0456945669bae',1,'fplot_core::plot_data_3d::get_y_datapd3d_get_y_array']]], - ['get_5fz_109',['get_z',['../structfplot__core_1_1plot__data__3d.html#a6513639ef9e865478e7fcfd556aa1111',1,'fplot_core::plot_data_3d::get_z()'],['../structfplot__core_1_1surface__plot__data.html#a9405a52b7728bef74de50586d23b2f28',1,'fplot_core::surface_plot_data::get_z()']]], - ['get_5fz_5faxis_110',['get_z_axis',['../structfplot__core_1_1plot__3d.html#a3606b1bf32567c8ae6f02b644b2b36ab',1,'fplot_core::plot_3d']]], - ['get_5fz_5fdata_111',['get_z_data',['../structfplot__core_1_1plot__data__3d.html#aa9b1507e1841fda61fc9be8a5a0a7013',1,'fplot_core::plot_data_3d']]], - ['get_5fz_5fintersect_5fxy_112',['get_z_intersect_xy',['../structfplot__core_1_1plot__3d.html#af09cbbc43c987f15e906e5a1b5d0d8cc',1,'fplot_core::plot_3d']]], - ['get_5fzero_5faxis_113',['get_zero_axis',['../structfplot__core_1_1plot__axis.html#a26ec236090b21f9e30770de3a2487f56',1,'fplot_core::plot_axis']]], - ['get_5fzero_5faxis_5fline_5fwidth_114',['get_zero_axis_line_width',['../structfplot__core_1_1plot__axis.html#a89c204ec15cf6688768cc27252316228',1,'fplot_core::plot_axis']]] -]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html deleted file mode 100644 index 61b920d..0000000 --- a/docs/html/search/functions_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js deleted file mode 100644 index 16efcb2..0000000 --- a/docs/html/search/functions_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['initialize_0',['initialize',['../structfplot__core_1_1plot.html#ada6347bd02ef1b85a1206ef1a6a72f91',1,'fplot_core::plot::initialize()'],['../structfplot__core_1_1plot__2d.html#a14de301a52d28381d2e20e8b61e7b90f',1,'fplot_core::plot_2d::initialize()'],['../structfplot__core_1_1plot__3d.html#af2f00319633a96dfc5961129671126f1',1,'fplot_core::plot_3d::initialize()'],['../structfplot__core_1_1surface__plot.html#afdc405472449e47ac82e3cc7af3bd63d',1,'fplot_core::surface_plot::initialize()'],['../structfplot__core_1_1multiplot.html#a765c22060cbe884515bc3a73bfef30f7',1,'fplot_core::multiplot::initialize()'],['../structfplot__core_1_1plot__polar.html#a6d386c4b4669e96aa128e17b0d0e3e86',1,'fplot_core::plot_polar::initialize()']]], - ['is_5ftitle_5fdefined_1',['is_title_defined',['../structfplot__core_1_1plot__axis.html#a726c620a8c7921f455900cb5bec1e0c7',1,'fplot_core::plot_axis::is_title_defined()'],['../structfplot__core_1_1plot.html#a49cd3527b815c57b7f0aaf163686c385',1,'fplot_core::plot::is_title_defined()'],['../structfplot__core_1_1multiplot.html#a77d68800c07166876bd9dae972caf094',1,'fplot_core::multiplot::is_title_defined()']]] -]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html deleted file mode 100644 index dc70a4a..0000000 --- a/docs/html/search/functions_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js deleted file mode 100644 index 3d4fe48..0000000 --- a/docs/html/search/functions_6.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['p2d_5fclean_5fup_0',['p2d_clean_up',['../structfplot__core_1_1plot__2d.html#aeb55d7671f449779041c822189e86048',1,'fplot_core::plot_2d']]], - ['p3d_5fclean_5fup_1',['p3d_clean_up',['../structfplot__core_1_1plot__3d.html#ab0e3abb763cf80ecc9af2d75e5c1035d',1,'fplot_core::plot_3d']]], - ['pop_2',['pop',['../structfplot__core_1_1plot.html#ad33c34e40f57938ecd001e808bf23faa',1,'fplot_core::plot']]], - ['pop_5farrow_3',['pop_arrow',['../structfplot__core_1_1plot.html#acbc277a0af6af597663ea0121ecfbdfa',1,'fplot_core::plot']]], - ['pop_5flabel_4',['pop_label',['../structfplot__core_1_1plot.html#a3b8d7885c017cdea67018693824d2a28',1,'fplot_core::plot']]], - ['push_5',['push',['../structfplot__core_1_1plot.html#a4d990dba35771bb91c4b369e749359b1',1,'fplot_core::plot']]], - ['push_5farrow_6',['push_arrow',['../structfplot__core_1_1plot.html#ac9e18069b5f30cdf389bd2d875e9160a',1,'fplot_core::plot']]], - ['push_5flabel_7',['push_label',['../structfplot__core_1_1plot.html#a52aebc916dcd0daee352bd121f44571b',1,'fplot_core::plot']]] -]; diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html deleted file mode 100644 index 7de3106..0000000 --- a/docs/html/search/functions_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js deleted file mode 100644 index 85af585..0000000 --- a/docs/html/search/functions_7.js +++ /dev/null @@ -1,87 +0,0 @@ -var searchData= -[ - ['save_5ffile_0',['save_file',['../structfplot__core_1_1plot.html#a7e9f2ba3cabac241fc87b08cab6a7964',1,'fplot_core::plot::save_file()'],['../structfplot__core_1_1multiplot.html#a4ffe414eeb41cfb1c6a4090efe0308b6',1,'fplot_core::multiplot::save_file()']]], - ['set_1',['set',['../structfplot__core_1_1plot.html#a60f699ff08a69ffd0639e02cef732fbc',1,'fplot_core::plot::set()'],['../structfplot__core_1_1multiplot.html#a24b7e0d33ad3c66d3031bc0c2c307677',1,'fplot_core::multiplot::set()']]], - ['set_5fallow_5fsmoothing_2',['set_allow_smoothing',['../structfplot__core_1_1surface__plot.html#a9e04fc534b0506d32401d21a695efbae',1,'fplot_core::surface_plot']]], - ['set_5fangle_3',['set_angle',['../structfplot__core_1_1plot__label.html#aa53c460db5af43102ac096d2e9af5fdb',1,'fplot_core::plot_label']]], - ['set_5farrow_4',['set_arrow',['../structfplot__core_1_1plot.html#a97b39f1d655613d423431a225b9ac525',1,'fplot_core::plot']]], - ['set_5farrow_5fsize_5',['set_arrow_size',['../structfplot__core_1_1vector__field__plot__data.html#ac744dea773420c6600c3306311ef2d93',1,'fplot_core::vector_field_plot_data']]], - ['set_5fautoscale_6',['set_autoscale',['../structfplot__core_1_1plot__axis.html#a31ba8659f53c12145bf26884f929a3b6',1,'fplot_core::plot_axis::set_autoscale()'],['../structfplot__core_1_1plot__polar.html#aad0eaf7bd5100040899825fe1281ab86',1,'fplot_core::plot_polar::set_autoscale()']]], - ['set_5faxis_5fequal_7',['set_axis_equal',['../structfplot__core_1_1plot.html#a3ab0098ecdd19537b4b4810e584d6178',1,'fplot_core::plot']]], - ['set_5fazimuth_8',['set_azimuth',['../structfplot__core_1_1plot__3d.html#a925a7a5484ce7fde36ce80e2199f2c2b',1,'fplot_core::plot_3d']]], - ['set_5fcolor_9',['set_color',['../structfplot__core_1_1plot__arrow.html#a62bd3548d5aad7e4a4bc1cc58c3a6935',1,'fplot_core::plot_arrow']]], - ['set_5fcolormap_10',['set_colormap',['../structfplot__core_1_1custom__colormap.html#ae4c07ac867f7fd74ca4219a7e859d0e8',1,'fplot_core::custom_colormap::set_colormap()'],['../structfplot__core_1_1plot.html#a6a2220252ff39e46984cdd41f2f2d408',1,'fplot_core::plot::set_colormap()']]], - ['set_5fcoordinate_5fsystem_11',['set_coordinate_system',['../structfplot__core_1_1plot__3d.html#a66d6237275dbe689d7411ddced7e22c9',1,'fplot_core::plot_3d']]], - ['set_5fdraw_5fagainst_5fy2_12',['set_draw_against_y2',['../structfplot__core_1_1plot__data__2d.html#a77e6f48e4bac69edcf0275d6ad13e550',1,'fplot_core::plot_data_2d::set_draw_against_y2()'],['../structfplot__core_1_1filled__plot__data.html#aecc19b2be5696b2210ea1c7b7bd58a58',1,'fplot_core::filled_plot_data::set_draw_against_y2()']]], - ['set_5fdraw_5fborder_13',['set_draw_border',['../structfplot__core_1_1legend.html#a081df8de03ccc8888b6169608d9b5f17',1,'fplot_core::legend::set_draw_border()'],['../structfplot__core_1_1colormap.html#acb679819160a82793304bcfdde53a623',1,'fplot_core::colormap::set_draw_border()'],['../structfplot__core_1_1plot.html#ae400616706a0cb419a5251c12174d822',1,'fplot_core::plot::set_draw_border()']]], - ['set_5fdraw_5finside_5faxes_14',['set_draw_inside_axes',['../structfplot__core_1_1legend.html#a89b548365548f1e7f0d8756b4145ad93',1,'fplot_core::legend']]], - ['set_5fdraw_5fline_15',['set_draw_line',['../structfplot__core_1_1scatter__plot__data.html#a4219776e9fb097422c3ec43122f031fb',1,'fplot_core::scatter_plot_data']]], - ['set_5fdraw_5fmarkers_16',['set_draw_markers',['../structfplot__core_1_1scatter__plot__data.html#a2d478600f6026a7515f89cb156896654',1,'fplot_core::scatter_plot_data']]], - ['set_5felevation_17',['set_elevation',['../structfplot__core_1_1plot__3d.html#a68d05b37ad04bb9627471b1c20a30c38',1,'fplot_core::plot_3d']]], - ['set_5ffilename_18',['set_filename',['../structfplot__core_1_1png__terminal.html#a11541efbe8bb3036b670ab5bfd234cb8',1,'fplot_core::png_terminal::set_filename()'],['../structfplot__core_1_1latex__terminal.html#a599576bce43bdcbead02d4958d6646ea',1,'fplot_core::latex_terminal::set_filename()']]], - ['set_5ffill_5farrow_19',['set_fill_arrow',['../structfplot__core_1_1vector__field__plot__data.html#aa1c31e27261ed54d1728c6d17a2c0db0',1,'fplot_core::vector_field_plot_data']]], - ['set_5ffill_5fcurve_20',['set_fill_curve',['../structfplot__core_1_1scatter__plot__data.html#a6305c7c347d54e042186e197e63d4572',1,'fplot_core::scatter_plot_data']]], - ['set_5ffont_5fname_21',['set_font_name',['../structfplot__core_1_1terminal.html#acd92729e62790df27b3c1003ef821593',1,'fplot_core::terminal::set_font_name()'],['../structfplot__core_1_1plot.html#a3687c06edaac5f2e47c3a04266effd1f',1,'fplot_core::plot::set_font_name()'],['../structfplot__core_1_1multiplot.html#a1ea580b7916e02cbb84a3ee6325802be',1,'fplot_core::multiplot::set_font_name()']]], - ['set_5ffont_5fsize_22',['set_font_size',['../structfplot__core_1_1terminal.html#a27f4875d74e90fef7f4555de55543abd',1,'fplot_core::terminal::set_font_size()'],['../structfplot__core_1_1plot.html#a755597835c9d424143b8942f4d699a34',1,'fplot_core::plot::set_font_size()'],['../structfplot__core_1_1multiplot.html#ad751ab2a57ec9af423468603a3fc5a75',1,'fplot_core::multiplot::set_font_size()']]], - ['set_5fhead_5fangle_23',['set_head_angle',['../structfplot__core_1_1plot__arrow.html#aa976a527ccaf267e9d5b7c06342a3b56',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5fback_5fangle_24',['set_head_back_angle',['../structfplot__core_1_1plot__arrow.html#aaff2d428d8feeda35da15f1c92bf624a',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5ffill_25',['set_head_fill',['../structfplot__core_1_1plot__arrow.html#add82908c1efdf34d701762bf29763a24',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5flocation_26',['set_head_location',['../structfplot__core_1_1plot__arrow.html#a49ab5d25adbf97b8b6aeb9172c68947a',1,'fplot_core::plot_arrow::set_head_locationpar_set_head_1'],['../structfplot__core_1_1plot__arrow.html#aaa8b4e0f0e2e7138a4fb849989bd7753',1,'fplot_core::plot_arrow::set_head_locationpar_set_head_2'],['../structfplot__core_1_1plot__arrow.html#a2a90f330e8f387beff52a66cd48b1ef3',1,'fplot_core::plot_arrow::set_head_locationpar_set_head_3']]], - ['set_5fhead_5fsize_27',['set_head_size',['../structfplot__core_1_1plot__arrow.html#ab2aa4033c8337c3307ea4036a6e10d16',1,'fplot_core::plot_arrow']]], - ['set_5fhead_5ftype_28',['set_head_type',['../structfplot__core_1_1plot__arrow.html#adfe5552a5c01b59b9bc1025d8e583a57',1,'fplot_core::plot_arrow']]], - ['set_5fhorizontal_29',['set_horizontal',['../structfplot__core_1_1colormap.html#a8530b43520ee1929a510dc8aec57e324',1,'fplot_core::colormap']]], - ['set_5fhorizontal_5fposition_30',['set_horizontal_position',['../structfplot__core_1_1legend.html#a39f311ee80c51cbc637cc946c7a44397',1,'fplot_core::legend']]], - ['set_5fis_5flog_5fscaled_31',['set_is_log_scaled',['../structfplot__core_1_1plot__axis.html#a7ea2e86ed7e730aacad368f67c247a79',1,'fplot_core::plot_axis']]], - ['set_5fis_5fopaque_32',['set_is_opaque',['../structfplot__core_1_1legend.html#af006f78db694a74d57a9861f038b3971',1,'fplot_core::legend']]], - ['set_5fis_5fvisible_33',['set_is_visible',['../structfplot__core_1_1plot__label.html#acc5b95b081e578d0d05e9ee768579ba9',1,'fplot_core::plot_label::set_is_visible()'],['../structfplot__core_1_1plot__arrow.html#a15fa92a1a0ba898995bfcc2e5b5ee790',1,'fplot_core::plot_arrow::set_is_visible()'],['../structfplot__core_1_1legend.html#aa9c45f3a136694b9e8c0c3c83d9a7cd8',1,'fplot_core::legend::set_is_visible()']]], - ['set_5flabel_34',['set_label',['../structfplot__core_1_1colormap.html#ac595c1361a36891870faf9d676a66d78',1,'fplot_core::colormap::set_label()'],['../structfplot__core_1_1plot.html#a1bae57bcb9098707fba5267fa22a433d',1,'fplot_core::plot::set_label()']]], - ['set_5flayout_35',['set_layout',['../structfplot__core_1_1legend.html#a24b91299a6a9382c91a15b0093e1cdaa',1,'fplot_core::legend']]], - ['set_5flight_5fintensity_36',['set_light_intensity',['../structfplot__core_1_1surface__plot.html#aadd6772415d91480a12ee88a49216cc7',1,'fplot_core::surface_plot']]], - ['set_5flimits_37',['set_limits',['../structfplot__core_1_1plot__axis.html#ac4636b37253874b8b072c7916cac4686',1,'fplot_core::plot_axis']]], - ['set_5fline_5fcolor_38',['set_line_color',['../structfplot__core_1_1plot__data__colored.html#ac266099a66e8f024d142e14a8c5077c2',1,'fplot_core::plot_data_colored']]], - ['set_5fline_5fstyle_39',['set_line_style',['../structfplot__core_1_1plot__arrow.html#aceea0ccadce0c4737eaad80ac0a10b98',1,'fplot_core::plot_arrow::set_line_style()'],['../structfplot__core_1_1scatter__plot__data.html#ab03c2603a873c9065c83650ac7b59577',1,'fplot_core::scatter_plot_data::set_line_style()'],['../structfplot__core_1_1plot__data__tri__2d.html#a83fd7aeaaf49e87feca48e47e45dc4f0',1,'fplot_core::plot_data_tri_2d::set_line_style()']]], - ['set_5fline_5fwidth_40',['set_line_width',['../structfplot__core_1_1plot__arrow.html#a48af7ed9faba3494666634819c1b0078',1,'fplot_core::plot_arrow::set_line_width()'],['../structfplot__core_1_1scatter__plot__data.html#ad2169acc049adff557adfa5a7da7a047',1,'fplot_core::scatter_plot_data::set_line_width()'],['../structfplot__core_1_1plot__data__tri__2d.html#a89979cf628a8d1bbe58616a134d84de4',1,'fplot_core::plot_data_tri_2d::set_line_width()']]], - ['set_5fmarker_5ffrequency_41',['set_marker_frequency',['../structfplot__core_1_1scatter__plot__data.html#afbe660fce6672bf6dc20f3f594a14361',1,'fplot_core::scatter_plot_data']]], - ['set_5fmarker_5fscaling_42',['set_marker_scaling',['../structfplot__core_1_1scatter__plot__data.html#afc01fb76af6a0a422b9a9f8571959e88',1,'fplot_core::scatter_plot_data']]], - ['set_5fmarker_5fstyle_43',['set_marker_style',['../structfplot__core_1_1scatter__plot__data.html#a149b23714fce0691b4131c7701ff6166',1,'fplot_core::scatter_plot_data']]], - ['set_5fmove_5fto_5ffront_44',['set_move_to_front',['../structfplot__core_1_1plot__arrow.html#a835f541854392fcdfa62e42a40d0f1be',1,'fplot_core::plot_arrow']]], - ['set_5fname_45',['set_name',['../structfplot__core_1_1plot__data.html#a94aed3f692e4f61414f2681cc105ee52',1,'fplot_core::plot_data']]], - ['set_5fplot_5fwindow_5fnumber_46',['set_plot_window_number',['../structfplot__core_1_1terminal.html#a97e236d25bfdfb88c47aac07ac636baf',1,'fplot_core::terminal']]], - ['set_5fposition_47',['set_position',['../structfplot__core_1_1plot__label.html#a2ad61a55279d21ae6ebc29ee1fd0b464',1,'fplot_core::plot_label']]], - ['set_5fradial_5flimits_48',['set_radial_limits',['../structfplot__core_1_1plot__polar.html#a00dbfab2c6a3dc1f814d076574e5fd17',1,'fplot_core::plot_polar']]], - ['set_5fshow_5fcolorbar_49',['set_show_colorbar',['../structfplot__core_1_1plot.html#a6f9b326354b3d8dfa707e871a7519713',1,'fplot_core::plot']]], - ['set_5fshow_5fcontours_50',['set_show_contours',['../structfplot__core_1_1surface__plot.html#a8aeebb0ceda2d5f18c960bea089f2c58',1,'fplot_core::surface_plot']]], - ['set_5fshow_5fgridlines_51',['set_show_gridlines',['../structfplot__core_1_1plot.html#a929a7d1f892cd92b7ce9387adb4168c0',1,'fplot_core::plot']]], - ['set_5fshow_5fhidden_52',['set_show_hidden',['../structfplot__core_1_1surface__plot.html#a4dfb89ce7bea300b0baf615df28666be',1,'fplot_core::surface_plot']]], - ['set_5fshow_5ftics_53',['set_show_tics',['../structfplot__core_1_1colormap.html#a4cfc2819c20b439ba562026d5ca54615',1,'fplot_core::colormap']]], - ['set_5fsimplification_5ffactor_54',['set_simplification_factor',['../structfplot__core_1_1scatter__plot__data.html#a8a4056fe6969456124db007f962b9c7b',1,'fplot_core::scatter_plot_data']]], - ['set_5fsimplify_5fdata_55',['set_simplify_data',['../structfplot__core_1_1scatter__plot__data.html#a1fd9079ccba6a8227501584208f2991e',1,'fplot_core::scatter_plot_data']]], - ['set_5fspecular_5fintensity_56',['set_specular_intensity',['../structfplot__core_1_1surface__plot.html#ab40b141891860f87ec370bba31d83b8a',1,'fplot_core::surface_plot']]], - ['set_5fsquare_5faxes_57',['set_square_axes',['../structfplot__core_1_1plot__2d.html#afc8ab071b8c099aebcf795a3cf10fe9e',1,'fplot_core::plot_2d']]], - ['set_5ftail_5flocation_58',['set_tail_location',['../structfplot__core_1_1plot__arrow.html#aca84bef4ddb730b1fed90d2386874b7a',1,'fplot_core::plot_arrow::set_tail_locationpar_set_tail_1'],['../structfplot__core_1_1plot__arrow.html#a452292e58f05cd3afdcdb38c858799d8',1,'fplot_core::plot_arrow::set_tail_locationpar_set_tail_2'],['../structfplot__core_1_1plot__arrow.html#a255beb96b7024c5bb7cd9ef41836ae94',1,'fplot_core::plot_arrow::set_tail_locationpar_set_tail_3']]], - ['set_5ftext_59',['set_text',['../structfplot__core_1_1plot__label.html#ae23e191969f98f47b32ee694fe22c993',1,'fplot_core::plot_label']]], - ['set_5ftheta_5fdirection_60',['set_theta_direction',['../structfplot__core_1_1plot__polar.html#ab1bf8924f14b0833ca12ded69d6df738',1,'fplot_core::plot_polar']]], - ['set_5ftheta_5fstart_5fposition_61',['set_theta_start_position',['../structfplot__core_1_1plot__polar.html#a6c09839428e51e17d6ad88608d1d92ae',1,'fplot_core::plot_polar']]], - ['set_5ftic_5flabel_5fformat_62',['set_tic_label_format',['../structfplot__core_1_1plot__axis.html#a65519918c3bc51c7c55856f4ab70de47',1,'fplot_core::plot_axis']]], - ['set_5ftics_5finward_63',['set_tics_inward',['../structfplot__core_1_1plot.html#aa9b08eb0848255279f04d7ff4c5bf5f2',1,'fplot_core::plot']]], - ['set_5ftitle_64',['set_title',['../structfplot__core_1_1terminal.html#a4c433fb993c05ba8f2485d76dac5d571',1,'fplot_core::terminal::set_title()'],['../structfplot__core_1_1plot__axis.html#ae48c3bbf59663fd54efc7b814d4e1662',1,'fplot_core::plot_axis::set_title()'],['../structfplot__core_1_1plot.html#a1925b89a6abe05c4728c839844b507f1',1,'fplot_core::plot::set_title()'],['../structfplot__core_1_1multiplot.html#a22818257b677d5f45a1ac13435cc27ae',1,'fplot_core::multiplot::set_title()']]], - ['set_5ftransparency_65',['set_transparency',['../structfplot__core_1_1surface__plot.html#a94436759af21d4fcd87a2358e4afe569',1,'fplot_core::surface_plot']]], - ['set_5fuse_5fdata_5fdependent_5fcolors_66',['set_use_data_dependent_colors',['../structfplot__core_1_1scatter__plot__data.html#a9ea43c66bf884fc5380dc82b178e2634',1,'fplot_core::scatter_plot_data']]], - ['set_5fuse_5fdefault_5fsize_67',['set_use_default_size',['../structfplot__core_1_1plot__arrow.html#afa8a544cb4f1d33d35518d65b1303543',1,'fplot_core::plot_arrow']]], - ['set_5fuse_5fdefault_5ftic_5flabel_5fformat_68',['set_use_default_tic_label_format',['../structfplot__core_1_1plot__axis.html#a5fb4b8b807033d2d7e81ee3e7077a1e5',1,'fplot_core::plot_axis']]], - ['set_5fuse_5ferror_5fbox_69',['set_use_error_box',['../structfplot__core_1_1plot__data__error__bars.html#a86f2731ad612871fea02c6a8a4d1e7c1',1,'fplot_core::plot_data_error_bars']]], - ['set_5fuse_5flighting_70',['set_use_lighting',['../structfplot__core_1_1surface__plot.html#a238591a3e35fea687b802ee34d3f3bdf',1,'fplot_core::surface_plot']]], - ['set_5fuse_5fmap_5fview_71',['set_use_map_view',['../structfplot__core_1_1plot__3d.html#a702f48c41af5fa7b33d1555904ca5823',1,'fplot_core::plot_3d']]], - ['set_5fuse_5fvariable_5fsize_5fpoints_72',['set_use_variable_size_points',['../structfplot__core_1_1scatter__plot__data.html#a4b8720c814de24f0a8c54de333f6b192',1,'fplot_core::scatter_plot_data']]], - ['set_5fuse_5fwireframe_73',['set_use_wireframe',['../structfplot__core_1_1surface__plot__data.html#a2dd4d9da621cc049e8d9acb772d64b27',1,'fplot_core::surface_plot_data::set_use_wireframe()'],['../structfplot__core_1_1tri__surface__plot__data.html#a920b578a7bd5dda514379761daad8d87',1,'fplot_core::tri_surface_plot_data::set_use_wireframe()']]], - ['set_5fuse_5fy2_5faxis_74',['set_use_y2_axis',['../structfplot__core_1_1plot__2d.html#a60849bb67d78d07ebb62ae2aedd298ad',1,'fplot_core::plot_2d']]], - ['set_5fvertical_5fposition_75',['set_vertical_position',['../structfplot__core_1_1legend.html#aafce387b80da438eb00b49107bcde5df',1,'fplot_core::legend']]], - ['set_5fwindow_5fheight_76',['set_window_height',['../structfplot__core_1_1terminal.html#a7bfbe230aacd2ebfc66a48f45e3b7c02',1,'fplot_core::terminal']]], - ['set_5fwindow_5fwidth_77',['set_window_width',['../structfplot__core_1_1terminal.html#adc7393357e996438ef5afec36dde7054',1,'fplot_core::terminal']]], - ['set_5fx_78',['set_x',['../structfplot__core_1_1scatter__plot__data.html#a767bed829c0dc83b2b265910b3834608',1,'fplot_core::scatter_plot_data::set_x()'],['../structfplot__core_1_1plot__data__2d.html#aa605fb042bd378ebf5ba6fd94563d13a',1,'fplot_core::plot_data_2d::set_x()'],['../structfplot__core_1_1plot__data__3d.html#a1013a895c610e3f412701624c60c18a4',1,'fplot_core::plot_data_3d::set_x()'],['../structfplot__core_1_1surface__plot__data.html#a2ef34c8a632cf6fdb9f6247eaf817d57',1,'fplot_core::surface_plot_data::set_x()']]], - ['set_5fy_79',['set_y',['../structfplot__core_1_1scatter__plot__data.html#a313f4dd3f4a4596772901c0cfbf15a97',1,'fplot_core::scatter_plot_data::set_y()'],['../structfplot__core_1_1plot__data__2d.html#a28d89209520ffd1728ff34aaa853f314',1,'fplot_core::plot_data_2d::set_y()'],['../structfplot__core_1_1plot__data__3d.html#abcaab55223d65976eb07ab58908ccd66',1,'fplot_core::plot_data_3d::set_y()'],['../structfplot__core_1_1surface__plot__data.html#a4d709bdb48e019c6a7f167e2712a11e9',1,'fplot_core::surface_plot_data::set_y()']]], - ['set_5fz_80',['set_z',['../structfplot__core_1_1plot__data__3d.html#a5adf3d8c20b3b839a76175ca986fcff4',1,'fplot_core::plot_data_3d::set_z()'],['../structfplot__core_1_1surface__plot__data.html#a32ff64443790d15faf76401d2c06c0f9',1,'fplot_core::surface_plot_data::set_z()']]], - ['set_5fz_5fintersect_5fxy_81',['set_z_intersect_xy',['../structfplot__core_1_1plot__3d.html#a58f3645f94801662c0f10736804da580',1,'fplot_core::plot_3d']]], - ['set_5fzero_5faxis_82',['set_zero_axis',['../structfplot__core_1_1plot__axis.html#a19f1868adac5ac661c5b7d33d02f35c9',1,'fplot_core::plot_axis']]], - ['set_5fzero_5faxis_5fline_5fwidth_83',['set_zero_axis_line_width',['../structfplot__core_1_1plot__axis.html#abd2dce525007a33e050ccb0c92024824',1,'fplot_core::plot_axis']]] -]; diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html deleted file mode 100644 index 7422be2..0000000 --- a/docs/html/search/functions_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js deleted file mode 100644 index 85b979a..0000000 --- a/docs/html/search/functions_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['to_5fhex_5fstring_0',['to_hex_string',['../structfplot__core_1_1color.html#a82f6fa701820ba719c3e3266a4e6ebd0',1,'fplot_core::color']]] -]; diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html deleted file mode 100644 index 5ccec42..0000000 --- a/docs/html/search/functions_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js deleted file mode 100644 index 2602d8d..0000000 --- a/docs/html/search/functions_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['to_5fhex_5fstring_0',['to_hex_string',['../structfplot__core_1_1color.html#a42eb9db85bdfba9b95d4208a78a5c00e',1,'fplot_core::color']]], - ['to_5fstring_1',['to_string',['../structfplot__string__builder_1_1string__builder.html#ac2c78b1d71b5d922a3a02c910256a89a',1,'fplot_string_builder::string_builder']]] -]; diff --git a/docs/html/search/functions_a.html b/docs/html/search/functions_a.html deleted file mode 100644 index 3958eb7..0000000 --- a/docs/html/search/functions_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js deleted file mode 100644 index b05eb8d..0000000 --- a/docs/html/search/functions_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['za_5fget_5fid',['za_get_id',['../namespacefplot__core.html#a514f88ef7641f894dc122c73c759112f',1,'fplot_core']]] -]; diff --git a/docs/html/search/functions_b.html b/docs/html/search/functions_b.html deleted file mode 100644 index fa9cff5..0000000 --- a/docs/html/search/functions_b.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js deleted file mode 100644 index 6ed9920..0000000 --- a/docs/html/search/functions_b.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['y2a_5fget_5fid',['y2a_get_id',['../namespacefplot__core.html#a62c9f837dd159586219c04f07681224f',1,'fplot_core']]], - ['ya_5fget_5fid',['ya_get_id',['../namespacefplot__core.html#a5d91b63dd3d6b770639cfbf710a88f36',1,'fplot_core']]] -]; diff --git a/docs/html/search/functions_c.html b/docs/html/search/functions_c.html deleted file mode 100644 index fce7a6b..0000000 --- a/docs/html/search/functions_c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js deleted file mode 100644 index b05eb8d..0000000 --- a/docs/html/search/functions_c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['za_5fget_5fid',['za_get_id',['../namespacefplot__core.html#a514f88ef7641f894dc122c73c759112f',1,'fplot_core']]] -]; diff --git a/docs/html/search/functions_d.html b/docs/html/search/functions_d.html deleted file mode 100644 index 82b2b0c..0000000 --- a/docs/html/search/functions_d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js deleted file mode 100644 index b05eb8d..0000000 --- a/docs/html/search/functions_d.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['za_5fget_5fid',['za_get_id',['../namespacefplot__core.html#a514f88ef7641f894dc122c73c759112f',1,'fplot_core']]] -]; diff --git a/docs/html/search/functions_e.html b/docs/html/search/functions_e.html deleted file mode 100644 index cddb9bb..0000000 --- a/docs/html/search/functions_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_e.js b/docs/html/search/functions_e.js deleted file mode 100644 index 6ed9920..0000000 --- a/docs/html/search/functions_e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['y2a_5fget_5fid',['y2a_get_id',['../namespacefplot__core.html#a62c9f837dd159586219c04f07681224f',1,'fplot_core']]], - ['ya_5fget_5fid',['ya_get_id',['../namespacefplot__core.html#a5d91b63dd3d6b770639cfbf710a88f36',1,'fplot_core']]] -]; diff --git a/docs/html/search/functions_f.html b/docs/html/search/functions_f.html deleted file mode 100644 index 4967292..0000000 --- a/docs/html/search/functions_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_f.js b/docs/html/search/functions_f.js deleted file mode 100644 index b05eb8d..0000000 --- a/docs/html/search/functions_f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['za_5fget_5fid',['za_get_id',['../namespacefplot__core.html#a514f88ef7641f894dc122c73c759112f',1,'fplot_core']]] -]; diff --git a/docs/html/search/mag.svg b/docs/html/search/mag.svg deleted file mode 100644 index ffb6cf0..0000000 --- a/docs/html/search/mag.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - diff --git a/docs/html/search/mag_d.svg b/docs/html/search/mag_d.svg deleted file mode 100644 index 4122773..0000000 --- a/docs/html/search/mag_d.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png deleted file mode 100644 index 39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB$N=!mC_V~EE2vzPXI9ZnEo zd+1zHor@dYLod2Y{ z@R$7$Z!PXTbY$|@#T!bMzm?`b<(R`cbw(gxJHzu zB$lLFB^RXvDF!10LknF)BV7aY5JN*NBMU1-b8Q0yD+2>vd*|CI8glbfGSez?Ylunu RoetE%;OXk;vd$@?2>>CYplSdB diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg deleted file mode 100644 index 553dba8..0000000 --- a/docs/html/search/mag_sel.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - diff --git a/docs/html/search/mag_seld.svg b/docs/html/search/mag_seld.svg deleted file mode 100644 index c906f84..0000000 --- a/docs/html/search/mag_seld.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - diff --git a/docs/html/search/namespaces_0.html b/docs/html/search/namespaces_0.html deleted file mode 100644 index 76996d1..0000000 --- a/docs/html/search/namespaces_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/namespaces_0.js b/docs/html/search/namespaces_0.js deleted file mode 100644 index ff542e6..0000000 --- a/docs/html/search/namespaces_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['fplot_5fcore_0',['fplot_core',['../namespacefplot__core.html',1,'']]] -]; diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html deleted file mode 100644 index 4377320..0000000 --- a/docs/html/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/docs/html/search/search.css b/docs/html/search/search.css deleted file mode 100644 index 19f76f9..0000000 --- a/docs/html/search/search.css +++ /dev/null @@ -1,291 +0,0 @@ -/*---------------- Search Box positioning */ - -#main-menu > li:last-child { - /* This
  • object is the parent of the search bar */ - display: flex; - justify-content: center; - align-items: center; - height: 36px; - margin-right: 1em; -} - -/*---------------- Search box styling */ - -.SRPage * { - font-weight: normal; - line-height: normal; -} - -dark-mode-toggle { - margin-left: 5px; - display: flex; - float: right; -} - -#MSearchBox { - display: inline-block; - white-space : nowrap; - background: var(--search-background-color); - border-radius: 0.65em; - box-shadow: var(--search-box-shadow); - z-index: 102; -} - -#MSearchBox .left { - display: inline-block; - vertical-align: middle; - height: 1.4em; -} - -#MSearchSelect { - display: inline-block; - vertical-align: middle; - width: 20px; - height: 19px; - background-image: var(--search-magnification-select-image); - margin: 0 0 0 0.3em; - padding: 0; -} - -#MSearchSelectExt { - display: inline-block; - vertical-align: middle; - width: 10px; - height: 19px; - background-image: var(--search-magnification-image); - margin: 0 0 0 0.5em; - padding: 0; -} - - -#MSearchField { - display: inline-block; - vertical-align: middle; - width: 7.5em; - height: 19px; - margin: 0 0.15em; - padding: 0; - line-height: 1em; - border:none; - color: var(--search-foreground-color); - outline: none; - font-family: var(--font-family-search); - -webkit-border-radius: 0px; - border-radius: 0px; - background: none; -} - -@media(hover: none) { - /* to avoid zooming on iOS */ - #MSearchField { - font-size: 16px; - } -} - -#MSearchBox .right { - display: inline-block; - vertical-align: middle; - width: 1.4em; - height: 1.4em; -} - -#MSearchClose { - display: none; - font-size: inherit; - background : none; - border: none; - margin: 0; - padding: 0; - outline: none; - -} - -#MSearchCloseImg { - padding: 0.3em; - margin: 0; -} - -.MSearchBoxActive #MSearchField { - color: var(--search-active-color); -} - - - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid var(--search-filter-border-color); - background-color: var(--search-filter-background-color); - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt var(--font-family-search); - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: var(--font-family-monospace); - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: var(--search-filter-foreground-color); - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: var(--search-filter-foreground-color); - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: var(--search-filter-highlight-text-color); - background-color: var(--search-filter-highlight-bg-color); - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - /*width: 60ex;*/ - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid var(--search-results-border-color); - background-color: var(--search-results-background-color); - z-index:10000; - width: 300px; - height: 400px; - overflow: auto; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -div.SRPage { - margin: 5px 2px; - background-color: var(--search-results-background-color); -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: var(--search-results-foreground-color); - font-family: var(--font-family-search); - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: var(--search-results-foreground-color); - font-family: var(--font-family-search); - font-size: 8pt; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; - font-family: var(--font-family-search); -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; - font-family: var(--font-family-search); -} - -.SRResult { - display: none; -} - -div.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: var(--nav-gradient-active-image-parent); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/docs/html/search/search.js b/docs/html/search/search.js deleted file mode 100644 index 666af01..0000000 --- a/docs/html/search/search.js +++ /dev/null @@ -1,694 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -const SEARCH_COOKIE_NAME = ''+'search_grp'; - -const searchResults = new SearchResults(); - -/* A class handling everything associated with the search panel. - - Parameters: - name - The name of the global variable that will be - storing this instance. Is needed to be able to set timeouts. - resultPath - path to use for external files -*/ -function SearchBox(name, resultsPath, extension) { - if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } - if (!extension || extension == "") { extension = ".html"; } - - function getXPos(item) { - let x = 0; - if (item.offsetWidth) { - while (item && item!=document.body) { - x += item.offsetLeft; - item = item.offsetParent; - } - } - return x; - } - - function getYPos(item) { - let y = 0; - if (item.offsetWidth) { - while (item && item!=document.body) { - y += item.offsetTop; - item = item.offsetParent; - } - } - return y; - } - - // ---------- Instance variables - this.name = name; - this.resultsPath = resultsPath; - this.keyTimeout = 0; - this.keyTimeoutLength = 500; - this.closeSelectionTimeout = 300; - this.lastSearchValue = ""; - this.lastResultsPage = ""; - this.hideTimeout = 0; - this.searchIndex = 0; - this.searchActive = false; - this.extension = extension; - - // ----------- DOM Elements - - this.DOMSearchField = () => document.getElementById("MSearchField"); - this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); - this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); - this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); - this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); - this.DOMSearchClose = () => document.getElementById("MSearchClose"); - this.DOMSearchBox = () => document.getElementById("MSearchBox"); - - // ------------ Event Handlers - - // Called when focus is added or removed from the search field. - this.OnSearchFieldFocus = function(isActive) { - this.Activate(isActive); - } - - this.OnSearchSelectShow = function() { - const searchSelectWindow = this.DOMSearchSelectWindow(); - const searchField = this.DOMSearchSelect(); - - const left = getXPos(searchField); - const top = getYPos(searchField) + searchField.offsetHeight; - - // show search selection popup - searchSelectWindow.style.display='block'; - searchSelectWindow.style.left = left + 'px'; - searchSelectWindow.style.top = top + 'px'; - - // stop selection hide timer - if (this.hideTimeout) { - clearTimeout(this.hideTimeout); - this.hideTimeout=0; - } - return false; // to avoid "image drag" default event - } - - this.OnSearchSelectHide = function() { - this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), - this.closeSelectionTimeout); - } - - // Called when the content of the search field is changed. - this.OnSearchFieldChange = function(evt) { - if (this.keyTimeout) { // kill running timer - clearTimeout(this.keyTimeout); - this.keyTimeout = 0; - } - - const e = evt ? evt : window.event; // for IE - if (e.keyCode==40 || e.keyCode==13) { - if (e.shiftKey==1) { - this.OnSearchSelectShow(); - const win=this.DOMSearchSelectWindow(); - for (let i=0;i do a search - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) { - const e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) { // Up - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } else if (e.keyCode==13 || e.keyCode==27) { - e.stopPropagation(); - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() { - this.keyTimeout = 0; - - // strip leading whitespace - const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - const code = searchValue.toLowerCase().charCodeAt(0); - let idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair - idxChar = searchValue.substr(0, 2); - } - - let jsFile; - let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) { - const hexCode=idx.toString(16); - jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; - } - - const loadJS = function(url, impl, loc) { - const scriptTag = document.createElement('script'); - scriptTag.src = url; - scriptTag.onload = impl; - scriptTag.onreadystatechange = impl; - loc.appendChild(scriptTag); - } - - const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - const domSearchBox = this.DOMSearchBox(); - const domPopupSearchResults = this.DOMPopupSearchResults(); - const domSearchClose = this.DOMSearchClose(); - const resultsPath = this.resultsPath; - - const handleResults = function() { - document.getElementById("Loading").style.display="none"; - if (typeof searchData !== 'undefined') { - createResults(resultsPath); - document.getElementById("NoMatches").style.display="none"; - } - - if (idx!=-1) { - searchResults.Search(searchValue); - } else { // no file with search results => force empty search results - searchResults.Search('===='); - } - - if (domPopupSearchResultsWindow.style.display!='block') { - domSearchClose.style.display = 'inline-block'; - let left = getXPos(domSearchBox) + 150; - let top = getYPos(domSearchBox) + 20; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - const maxWidth = document.body.clientWidth; - const maxHeight = document.body.clientHeight; - let width = 300; - if (left<10) left=10; - if (width+left+8>maxWidth) width=maxWidth-left-8; - let height = 400; - if (height+top+8>maxHeight) height=maxHeight-top-8; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResultsWindow.style.height = height + 'px'; - } - } - - if (jsFile) { - loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); - } else { - handleResults(); - } - - this.lastSearchValue = searchValue; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) { - this.DOMSearchBox().className = 'MSearchBoxActive'; - this.searchActive = true; - } else if (!isActive) { // directly remove the panel - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - this.DOMSearchField().value = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults() { - - function convertToId(search) { - let result = ''; - for (let i=0;i. - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) { - const parentElement = document.getElementById(id); - let element = parentElement.firstChild; - - while (element && element!=parentElement) { - if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { - return element; - } - - if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { - element = element.firstChild; - } else if (element.nextSibling) { - element = element.nextSibling; - } else { - do { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) { - const element = this.FindChildElement(id); - if (element) { - if (element.style.display == 'block') { - element.style.display = 'none'; - } else { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) { - if (!search) { // get search word from URL - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - const resultRows = document.getElementsByTagName("div"); - let matches = 0; - - let i = 0; - while (i < resultRows.length) { - const row = resultRows.item(i); - if (row.className == "SRResult") { - let rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) { - row.style.display = 'block'; - matches++; - } else { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) { // no results - document.getElementById("NoMatches").style.display='block'; - } else { // at least one result - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) { - let focusItem; - for (;;) { - const focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { - break; - } else if (!focusItem) { // last element - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) { - let focusItem; - for (;;) { - const focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { - break; - } else if (!focusItem) { // last element - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) { - if (e.type == "keydown") { - this.repeatOn = false; - this.lastKey = e.keyCode; - } else if (e.type == "keypress") { - if (!this.repeatOn) { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } else if (e.type == "keyup") { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) { - const e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) { // Up - const newIndex = itemIndex-1; - let focusItem = this.NavPrev(newIndex); - if (focusItem) { - let child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') { // children visible - let n=0; - let tmpElem; - for (;;) { // search for last child - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) { - focusItem = tmpElem; - } else { // found it! - break; - } - n++; - } - } - } - if (focusItem) { - focusItem.focus(); - } else { // return focus to search field - document.getElementById("MSearchField").focus(); - } - } else if (this.lastKey==40) { // Down - const newIndex = itemIndex+1; - let focusItem; - const item = document.getElementById('Item'+itemIndex); - const elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') { // children visible - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } else if (this.lastKey==39) { // Right - const item = document.getElementById('Item'+itemIndex); - const elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } else if (this.lastKey==37) { // Left - const item = document.getElementById('Item'+itemIndex); - const elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } else if (this.lastKey==27) { // Escape - e.stopPropagation(); - searchBox.CloseResultsWindow(); - document.getElementById("MSearchField").focus(); - } else if (this.lastKey==13) { // Enter - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) { - const e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) { // Up - if (childIndex>0) { - const newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } else { // already at first child, jump to parent - document.getElementById('Item'+itemIndex).focus(); - } - } else if (this.lastKey==40) { // Down - const newIndex = childIndex+1; - let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) { // last child, jump to parent next parent - elem = this.NavNext(itemIndex+1); - } - if (elem) { - elem.focus(); - } - } else if (this.lastKey==27) { // Escape - e.stopPropagation(); - searchBox.CloseResultsWindow(); - document.getElementById("MSearchField").focus(); - } else if (this.lastKey==13) { // Enter - return true; - } - return false; - } -} - -function createResults(resultsPath) { - - function setKeyActions(elem,action) { - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); - } - - function setClassAttr(elem,attr) { - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); - } - - const results = document.getElementById("SRResults"); - results.innerHTML = ''; - searchData.forEach((elem,index) => { - const id = elem[0]; - const srResult = document.createElement('div'); - srResult.setAttribute('id','SR_'+id); - setClassAttr(srResult,'SRResult'); - const srEntry = document.createElement('div'); - setClassAttr(srEntry,'SREntry'); - const srLink = document.createElement('a'); - srLink.setAttribute('id','Item'+index); - setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); - setClassAttr(srLink,'SRSymbol'); - srLink.innerHTML = elem[1][0]; - srEntry.appendChild(srLink); - if (elem[1].length==2) { // single result - srLink.setAttribute('href',resultsPath+elem[1][1][0]); - srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); - if (elem[1][1][1]) { - srLink.setAttribute('target','_parent'); - } else { - srLink.setAttribute('target','_blank'); - } - const srScope = document.createElement('span'); - setClassAttr(srScope,'SRScope'); - srScope.innerHTML = elem[1][1][2]; - srEntry.appendChild(srScope); - } else { // multiple results - srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); - const srChildren = document.createElement('div'); - setClassAttr(srChildren,'SRChildren'); - for (let c=0; c(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W diff --git a/docs/html/search/search_r.png b/docs/html/search/search_r.png deleted file mode 100644 index 1af5d21ee13e070d7600f1c4657fde843b953a69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js deleted file mode 100644 index ef86578..0000000 --- a/docs/html/search/searchdata.js +++ /dev/null @@ -1,27 +0,0 @@ -var indexSectionsWithContent = -{ - 0: "abcdefghilmopqrstvwxyz", - 1: "acdefghlmopqrstvwxyz", - 2: "f", - 3: "cdefgipst", - 4: "abcglmpr" -}; - -var indexSectionNames = -{ - 0: "all", - 1: "classes", - 2: "namespaces", - 3: "functions", - 4: "variables" -}; - -var indexSectionLabels = -{ - 0: "All", - 1: "Classes", - 2: "Namespaces", - 3: "Functions", - 4: "Variables" -}; - diff --git a/docs/html/search/variables_0.html b/docs/html/search/variables_0.html deleted file mode 100644 index bf3eba5..0000000 --- a/docs/html/search/variables_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js deleted file mode 100644 index 014121c..0000000 --- a/docs/html/search/variables_0.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['arrow_5fbackhead_0',['arrow_backhead',['../namespacefplot__core.html#aec186fc30c149b713c7acbbae501b953',1,'fplot_core']]], - ['arrow_5fempty_1',['arrow_empty',['../namespacefplot__core.html#acf849bac7dab0385a49577f39cd17975',1,'fplot_core']]], - ['arrow_5ffilled_2',['arrow_filled',['../namespacefplot__core.html#a77694d28a29b78d1d4f43f2f813d81a9',1,'fplot_core']]], - ['arrow_5fhead_3',['arrow_head',['../namespacefplot__core.html#ae45226bcbf29c2c1d266891d9492b920',1,'fplot_core']]], - ['arrow_5fheads_4',['arrow_heads',['../namespacefplot__core.html#a9b29a68286be7fc5791e4b7baf472828',1,'fplot_core']]], - ['arrow_5fno_5fborder_5',['arrow_no_border',['../namespacefplot__core.html#a3cb539f373d8c9b192ffba3622bcf7f2',1,'fplot_core']]], - ['arrow_5fno_5ffill_6',['arrow_no_fill',['../namespacefplot__core.html#a466c7931f298261b528697ef344a4e87',1,'fplot_core']]], - ['arrow_5fno_5fhead_7',['arrow_no_head',['../namespacefplot__core.html#ab658b8b914c0cc925c93144eef215a03',1,'fplot_core']]] -]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html deleted file mode 100644 index 49fe59a..0000000 --- a/docs/html/search/variables_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js deleted file mode 100644 index 9ad09a7..0000000 --- a/docs/html/search/variables_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['blue_0',['blue',['../structfplot__core_1_1color.html#a208e32c7d0b0798118575c2234f4cc94',1,'fplot_core::color']]] -]; diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html deleted file mode 100644 index 0c8a18c..0000000 --- a/docs/html/search/variables_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js deleted file mode 100644 index 211dce8..0000000 --- a/docs/html/search/variables_2.js +++ /dev/null @@ -1,23 +0,0 @@ -var searchData= -[ - ['clr_5fblack_0',['clr_black',['../namespacefplot__core.html#a3f8775edb06de2a90c24009a67ef4f96',1,'fplot_core']]], - ['clr_5fblue_1',['clr_blue',['../namespacefplot__core.html#ae9f20ca4d21fdf9ba84f3b363f3e7d20',1,'fplot_core']]], - ['clr_5fcyan_2',['clr_cyan',['../namespacefplot__core.html#a700047d632ac642f6a949e44451bbc80',1,'fplot_core']]], - ['clr_5fgray_3',['clr_gray',['../namespacefplot__core.html#a828573f8099a6e695b05bb0678289f59',1,'fplot_core']]], - ['clr_5fgreen_4',['clr_green',['../namespacefplot__core.html#a0bd6481a613d00bfb7f92d7b906476dd',1,'fplot_core']]], - ['clr_5flime_5',['clr_lime',['../namespacefplot__core.html#a3f2351d27904192434e3ef78155e51e0',1,'fplot_core']]], - ['clr_5fmagenta_6',['clr_magenta',['../namespacefplot__core.html#a5100f36d74219c9ddc115d9b38d213c1',1,'fplot_core']]], - ['clr_5fmaroon_7',['clr_maroon',['../namespacefplot__core.html#ab68541e171cd4c283eeec74e5165f760',1,'fplot_core']]], - ['clr_5fnavy_8',['clr_navy',['../namespacefplot__core.html#adb6d3eb3275e9c564773cae821a1c4d3',1,'fplot_core']]], - ['clr_5folive_9',['clr_olive',['../namespacefplot__core.html#a7661753bfbb9a5e7ef11a79c279a59e2',1,'fplot_core']]], - ['clr_5forange_10',['clr_orange',['../namespacefplot__core.html#af0a79b640e25da7a7897ff87e2701f86',1,'fplot_core']]], - ['clr_5fpurple_11',['clr_purple',['../namespacefplot__core.html#aa9b8d3f8e41f9a35e05e57abe3e5baf9',1,'fplot_core']]], - ['clr_5fred_12',['clr_red',['../namespacefplot__core.html#a33f5d636354eb4187ba86154037e74e7',1,'fplot_core']]], - ['clr_5fsilver_13',['clr_silver',['../namespacefplot__core.html#a662574b11028022eac8158f9fc846ded',1,'fplot_core']]], - ['clr_5fteal_14',['clr_teal',['../namespacefplot__core.html#aa30407b5d837e2e2c191d99eb115c42b',1,'fplot_core']]], - ['clr_5fwhite_15',['clr_white',['../namespacefplot__core.html#a614ecb87618492f80d7ff4ba4324926b',1,'fplot_core']]], - ['clr_5fyellow_16',['clr_yellow',['../namespacefplot__core.html#a061a6ee4fd7602c096fd5016100ca378',1,'fplot_core']]], - ['coordinates_5fcartesian_17',['coordinates_cartesian',['../namespacefplot__core.html#a383aba6e97a1e427fcf4d2947c7687d3',1,'fplot_core']]], - ['coordinates_5fcylindrical_18',['coordinates_cylindrical',['../namespacefplot__core.html#a31baa8924c3ed9770c90b1ff8656da54',1,'fplot_core']]], - ['coordinates_5fspherical_19',['coordinates_spherical',['../namespacefplot__core.html#af20b219d77cbb2399a33f3981aa720bd',1,'fplot_core']]] -]; diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html deleted file mode 100644 index 19a31fc..0000000 --- a/docs/html/search/variables_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js deleted file mode 100644 index a694d3f..0000000 --- a/docs/html/search/variables_3.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['gnuplot_5fdefault_5ffont_5fsize_0',['gnuplot_default_font_size',['../namespacefplot__core.html#af51438c2c528d43662a1456d4f9fbb33',1,'fplot_core']]], - ['gnuplot_5fdefault_5ffontname_1',['gnuplot_default_fontname',['../namespacefplot__core.html#a41bb6a9ffc3ebb502d54af9a7ce540e7',1,'fplot_core']]], - ['gnuplot_5fdefault_5fwindow_5fheight_2',['gnuplot_default_window_height',['../namespacefplot__core.html#a6210b9335ccb79ff288de84dd741f0e0',1,'fplot_core']]], - ['gnuplot_5fdefault_5fwindow_5fwidth_3',['gnuplot_default_window_width',['../namespacefplot__core.html#a45b6c532e70244ebf23ff21eb596223b',1,'fplot_core']]], - ['gnuplot_5fmax_5flabel_5flength_4',['gnuplot_max_label_length',['../namespacefplot__core.html#a7e9ac1526f3f84a70eb10c98aff73610',1,'fplot_core']]], - ['gnuplot_5fmax_5fpath_5flength_5',['gnuplot_max_path_length',['../namespacefplot__core.html#a40ff0463a668b977d2fab03d3d8a6dde',1,'fplot_core']]], - ['gnuplot_5fterminal_5flatex_6',['gnuplot_terminal_latex',['../namespacefplot__core.html#adadfa5448d65da7362e445ee1fe61b10',1,'fplot_core']]], - ['gnuplot_5fterminal_5fpng_7',['gnuplot_terminal_png',['../namespacefplot__core.html#af1ace6143d83970cbfe69d7289c427d9',1,'fplot_core']]], - ['gnuplot_5fterminal_5fqt_8',['gnuplot_terminal_qt',['../namespacefplot__core.html#a512870ac9b979c4b0ea2804fbbb02a7d',1,'fplot_core']]], - ['gnuplot_5fterminal_5fwin32_9',['gnuplot_terminal_win32',['../namespacefplot__core.html#acf7693c9998a266f3cf50510b2cc06e9',1,'fplot_core']]], - ['gnuplot_5fterminal_5fwxt_10',['gnuplot_terminal_wxt',['../namespacefplot__core.html#a127138d0cab0e51e9c5f3fdcfdf033ac',1,'fplot_core']]], - ['green_11',['green',['../structfplot__core_1_1color.html#aa710db5291759d15263ecfb69a8d693c',1,'fplot_core::color']]] -]; diff --git a/docs/html/search/variables_4.html b/docs/html/search/variables_4.html deleted file mode 100644 index bdc37be..0000000 --- a/docs/html/search/variables_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js deleted file mode 100644 index d3aeb04..0000000 --- a/docs/html/search/variables_4.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['legend_5farrange_5fhorizontally_0',['legend_arrange_horizontally',['../namespacefplot__core.html#aec8d0376074fdd025c81e810bc4ffc42',1,'fplot_core']]], - ['legend_5farrange_5fvertically_1',['legend_arrange_vertically',['../namespacefplot__core.html#aaf0ef9b39969cd446f0fbb9b53dc6615',1,'fplot_core']]], - ['legend_5fbottom_2',['legend_bottom',['../namespacefplot__core.html#afaa74509b5150505854f6f411109dfdb',1,'fplot_core']]], - ['legend_5fcenter_3',['legend_center',['../namespacefplot__core.html#a0ec74b411859c62e7bf0c1df535d39a5',1,'fplot_core']]], - ['legend_5fleft_4',['legend_left',['../namespacefplot__core.html#a63d667dd9f14cc6ec61c999dd5dda272',1,'fplot_core']]], - ['legend_5fright_5',['legend_right',['../namespacefplot__core.html#a99373c8db502d4106c9597f3303b6fa9',1,'fplot_core']]], - ['legend_5ftop_6',['legend_top',['../namespacefplot__core.html#aeddce321c79b9d2e69356b06ba656c88',1,'fplot_core']]], - ['line_5fdash_5fdot_5fdot_7',['line_dash_dot_dot',['../namespacefplot__core.html#ad6f904d0b43c5063d0f6b41d90abdbea',1,'fplot_core']]], - ['line_5fdash_5fdotted_8',['line_dash_dotted',['../namespacefplot__core.html#a18af0338b6f5f050d826afcf78918bc2',1,'fplot_core']]], - ['line_5fdashed_9',['line_dashed',['../namespacefplot__core.html#ae9305c0a47c3fb21e45154a0b9457353',1,'fplot_core']]], - ['line_5fdotted_10',['line_dotted',['../namespacefplot__core.html#ab81a32face043abe51b8740e56c816b2',1,'fplot_core']]], - ['line_5fsolid_11',['line_solid',['../namespacefplot__core.html#ac41508e74ce45d09f835bd676ea7d3d6',1,'fplot_core']]] -]; diff --git a/docs/html/search/variables_5.html b/docs/html/search/variables_5.html deleted file mode 100644 index 6aa2249..0000000 --- a/docs/html/search/variables_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_5.js b/docs/html/search/variables_5.js deleted file mode 100644 index c5532fe..0000000 --- a/docs/html/search/variables_5.js +++ /dev/null @@ -1,116 +0,0 @@ -var searchData= -[ - ['m_5falpha_0',['m_alpha',['../structfplot__core_1_1plot__data__bar.html#ada9be13d82f4a51e832327bd586c8532',1,'fplot_core::plot_data_bar']]], - ['m_5fangle_1',['m_angle',['../structfplot__core_1_1plot__label.html#ad76a1f42a6fc7701e8eff8a10d456eb4',1,'fplot_core::plot_label']]], - ['m_5farrows_2',['m_arrows',['../structfplot__core_1_1plot.html#a4377389ba8b66d31852367a81eefee27',1,'fplot_core::plot']]], - ['m_5farrowsize_3',['m_arrowsize',['../structfplot__core_1_1vector__field__plot__data.html#adb43db20bfd010f251c8141acf894e23',1,'fplot_core::vector_field_plot_data']]], - ['m_5fautoscale_4',['m_autoscale',['../structfplot__core_1_1plot__axis.html#ae7035c7f62f8ec51ac458edf459655c2',1,'fplot_core::plot_axis::m_autoscale'],['../structfplot__core_1_1plot__polar.html#aae0b529ac9a469cd9ec3e04a125894e7',1,'fplot_core::plot_polar::m_autoscale']]], - ['m_5faxisequal_5',['m_axisequal',['../structfplot__core_1_1plot.html#a9a39b7ef7066651e8acd9cf4777941b0',1,'fplot_core::plot']]], - ['m_5faxislabels_6',['m_axislabels',['../structfplot__core_1_1plot__data__bar.html#ad6ae990580ab689aebe3e4114d650f5f',1,'fplot_core::plot_data_bar']]], - ['m_5faxiswidth_7',['m_axiswidth',['../structfplot__core_1_1plot__axis.html#ac9130dccdf4506356085dc77982f23eb',1,'fplot_core::plot_axis']]], - ['m_5fazimuth_8',['m_azimuth',['../structfplot__core_1_1plot__3d.html#a31e7daa0c6029d65bbe6dfc370e09f75',1,'fplot_core::plot_3d']]], - ['m_5fbardata_9',['m_bardata',['../structfplot__core_1_1plot__data__bar.html#ae3afc4495088f5ec9a7f0414470d97b0',1,'fplot_core::plot_data_bar']]], - ['m_5fbarwidth_10',['m_barwidth',['../structfplot__core_1_1plot__bar.html#a11075431e357389d21760413660a69de',1,'fplot_core::plot_bar']]], - ['m_5fbincount_11',['m_bincount',['../structfplot__core_1_1plot__data__histogram.html#a2ea6672bfb4cdfcf27f3a731f4c6cf4f',1,'fplot_core::plot_data_histogram']]], - ['m_5fbox_12',['m_box',['../structfplot__core_1_1legend.html#a195d911a2ffb3e4d8d8229b21745db72',1,'fplot_core::legend::m_box'],['../structfplot__core_1_1plot__data__error__bars.html#a0e904bfb3fe7d81b6776040af4461f8e',1,'fplot_core::plot_data_error_bars::m_box']]], - ['m_5fcolor_13',['m_color',['../structfplot__core_1_1plot__data__colored.html#aa24c061813c26938c9001c049f6aa40f',1,'fplot_core::plot_data_colored']]], - ['m_5fcolorindex_14',['m_colorindex',['../structfplot__core_1_1plot__data__colored.html#a65e7ab13ce7635e4367dca109b168f76',1,'fplot_core::plot_data_colored::m_colorindex'],['../structfplot__core_1_1plot.html#a423c6b5d5a4077e12672a789d0dd07f4',1,'fplot_core::plot::m_colorindex']]], - ['m_5fcolormap_15',['m_colormap',['../structfplot__core_1_1plot.html#a124d1fc324d2ac66811305862a1818bd',1,'fplot_core::plot']]], - ['m_5fcols_16',['m_cols',['../structfplot__core_1_1multiplot.html#ac43b0757815bd163133a4863314725f9',1,'fplot_core::multiplot']]], - ['m_5fcontour_17',['m_contour',['../structfplot__core_1_1surface__plot.html#a07676b9f7be385dbfb2fcc9c547e86e1',1,'fplot_core::surface_plot']]], - ['m_5fcsys_18',['m_csys',['../structfplot__core_1_1plot__3d.html#a13ce047bd142425ca9c96fd57d126231',1,'fplot_core::plot_3d']]], - ['m_5fdata_19',['m_data',['../structfplot__core_1_1plot.html#a955e9ed1d0626325807467f18928f7af',1,'fplot_core::plot::m_data'],['../structfplot__core_1_1plot__data__2d.html#a35abd4e024ea4e55c55dedcab8e5e3bf',1,'fplot_core::plot_data_2d::m_data'],['../structfplot__core_1_1plot__data__3d.html#a05d33e3351193d2e471083589d3ccb60',1,'fplot_core::plot_data_3d::m_data'],['../structfplot__core_1_1plot__data__error__bars.html#a3082871ea6a5b153a9f9a1dc36ef42f9',1,'fplot_core::plot_data_error_bars::m_data'],['../structfplot__core_1_1vector__field__plot__data.html#ab8f9fd516cb896988615cd6a378eb7e1',1,'fplot_core::vector_field_plot_data::m_data'],['../structfplot__core_1_1filled__plot__data.html#a0237475fa98251222f26abe67f43cf61',1,'fplot_core::filled_plot_data::m_data']]], - ['m_5fdatadependentcolors_20',['m_datadependentcolors',['../structfplot__core_1_1scatter__plot__data.html#a5177e61ef1056be4a7be88c85d129554',1,'fplot_core::scatter_plot_data']]], - ['m_5fdefaultticlabels_21',['m_defaultticlabels',['../structfplot__core_1_1plot__axis.html#af7ffb68c817546118481d46b513397b4',1,'fplot_core::plot_axis']]], - ['m_5fdrawborder_22',['m_drawborder',['../structfplot__core_1_1colormap.html#a3995a2a4d9661f991749686740db28ea',1,'fplot_core::colormap::m_drawborder'],['../structfplot__core_1_1plot.html#aa6041d60ec2b7939ff62dfe315c533bb',1,'fplot_core::plot::m_drawborder']]], - ['m_5fdrawline_23',['m_drawline',['../structfplot__core_1_1scatter__plot__data.html#a06df1b2ace5394328f5cc69c56aae2fe',1,'fplot_core::scatter_plot_data']]], - ['m_5fdrawmarkers_24',['m_drawmarkers',['../structfplot__core_1_1scatter__plot__data.html#ab22889699bb2ac1e437760ae3053e61f',1,'fplot_core::scatter_plot_data']]], - ['m_5felevation_25',['m_elevation',['../structfplot__core_1_1plot__3d.html#a20016816cd703ecc6902755c9506f954',1,'fplot_core::plot_3d']]], - ['m_5ffilled_26',['m_filled',['../structfplot__core_1_1plot__data__bar.html#ab390e7a9d6d8a0ca0ee2e42397e8da36',1,'fplot_core::plot_data_bar']]], - ['m_5ffilledcurve_27',['m_filledcurve',['../structfplot__core_1_1scatter__plot__data.html#ae502a1cb64b81989b2ae30e0498fb2a3',1,'fplot_core::scatter_plot_data']]], - ['m_5ffilledheads_28',['m_filledheads',['../structfplot__core_1_1vector__field__plot__data.html#abfd90138c5821640f049c79d587c6939',1,'fplot_core::vector_field_plot_data']]], - ['m_5ffname_29',['m_fname',['../structfplot__core_1_1png__terminal.html#acea6ab706e5e45c059be85af178adb77',1,'fplot_core::png_terminal::m_fname'],['../structfplot__core_1_1latex__terminal.html#a13910c1c0e215397ebc3125423f2ad3b',1,'fplot_core::latex_terminal::m_fname']]], - ['m_5ffontname_30',['m_fontname',['../structfplot__core_1_1terminal.html#a65c25946f36a8146b5d189cad922259e',1,'fplot_core::terminal']]], - ['m_5ffontsize_31',['m_fontsize',['../structfplot__core_1_1terminal.html#a92e1f3f32996f5ca36f87a4ca73e8406',1,'fplot_core::terminal']]], - ['m_5fhastitle_32',['m_hastitle',['../structfplot__core_1_1terminal.html#a313c30a86f2e84b24394fc88802ac073',1,'fplot_core::terminal::m_hastitle'],['../structfplot__core_1_1plot__axis.html#afaee6697e2ae5d4c15274ef6d1b1bebf',1,'fplot_core::plot_axis::m_hastitle'],['../structfplot__core_1_1plot.html#a3e292f8044d1c963bde7a45a5fd091f5',1,'fplot_core::plot::m_hastitle'],['../structfplot__core_1_1multiplot.html#a6d0402f03382c3bf29b50d4f06fad597',1,'fplot_core::multiplot::m_hastitle']]], - ['m_5fhorizontal_33',['m_horizontal',['../structfplot__core_1_1colormap.html#a85b7ea506d0dfd74b7a851e190e5e9e0',1,'fplot_core::colormap']]], - ['m_5fhorzposition_34',['m_horzposition',['../structfplot__core_1_1legend.html#a4751dde9054923257d25204e3924d11b',1,'fplot_core::legend']]], - ['m_5fid_35',['m_id',['../structfplot__core_1_1windows__terminal.html#af215f20aa2e4e2de14bed3f928a4f40f',1,'fplot_core::windows_terminal::m_id'],['../structfplot__core_1_1qt__terminal.html#ae7f815fdba921412c5befb8778584079',1,'fplot_core::qt_terminal::m_id'],['../structfplot__core_1_1wxt__terminal.html#a1d5b03366bc38e5ae7dab696b40d5ccb',1,'fplot_core::wxt_terminal::m_id'],['../structfplot__core_1_1png__terminal.html#ab960a72618e8aaa0fdda0290b11c33d2',1,'fplot_core::png_terminal::m_id'],['../structfplot__core_1_1latex__terminal.html#a3f10978cef31279b35dda56bdb5bca48',1,'fplot_core::latex_terminal::m_id'],['../structfplot__core_1_1x__axis.html#a1ba3cb85ef3bbd932fa6ada1442aa73f',1,'fplot_core::x_axis::m_id'],['../structfplot__core_1_1y__axis.html#a14850c501203a783fb7aa0e7ac44e140',1,'fplot_core::y_axis::m_id'],['../structfplot__core_1_1y2__axis.html#a3d7f8ca15f441f30f988496c798483cb',1,'fplot_core::y2_axis::m_id'],['../structfplot__core_1_1z__axis.html#addc6091f267c1ac64cb7faaae05f2b63',1,'fplot_core::z_axis::m_id']]], - ['m_5findices_36',['m_indices',['../structfplot__core_1_1delaunay__tri__2d.html#abe18770a04e61374f94b679151c47314',1,'fplot_core::delaunay_tri_2d::m_indices'],['../structfplot__core_1_1plot__data__tri__2d.html#ab6d39a0103f193a8aa8b795144b7c5a9',1,'fplot_core::plot_data_tri_2d::m_indices'],['../structfplot__core_1_1tri__surface__plot__data.html#ae2f7495459a379be5318da146fb893ae',1,'fplot_core::tri_surface_plot_data::m_indices']]], - ['m_5finside_37',['m_inside',['../structfplot__core_1_1legend.html#adc69a36d330318bc97b7fae160cb7960',1,'fplot_core::legend']]], - ['m_5flabel_38',['m_label',['../structfplot__core_1_1colormap.html#a410c0452382dd1965701fd92f3c89db1',1,'fplot_core::colormap']]], - ['m_5flabels_39',['m_labels',['../structfplot__core_1_1plot.html#a749f5e716823b818c276e26d301a43da',1,'fplot_core::plot']]], - ['m_5flayout_40',['m_layout',['../structfplot__core_1_1legend.html#aa0e3a0c975e39520a953b9e36a9336de',1,'fplot_core::legend']]], - ['m_5flegend_41',['m_legend',['../structfplot__core_1_1plot.html#a58b6d2d703429e69ced42f71bb24b587',1,'fplot_core::plot']]], - ['m_5flightintensity_42',['m_lightintensity',['../structfplot__core_1_1surface__plot.html#a899848b6087f3c257c23d22779ff86b8',1,'fplot_core::surface_plot']]], - ['m_5flimits_43',['m_limits',['../structfplot__core_1_1plot__axis.html#a103b7151710f1dca0a4f3a59ab4fc910',1,'fplot_core::plot_axis']]], - ['m_5flinestyle_44',['m_linestyle',['../structfplot__core_1_1scatter__plot__data.html#ad6526edc0a71a3f3a52c90ba6bf2a7b4',1,'fplot_core::scatter_plot_data::m_linestyle'],['../structfplot__core_1_1plot__data__tri__2d.html#afe3e3bbe14b41a52103b5d059936cf07',1,'fplot_core::plot_data_tri_2d::m_linestyle']]], - ['m_5flinewidth_45',['m_linewidth',['../structfplot__core_1_1scatter__plot__data.html#a5f0a764e897869a8b40e5572cf643eff',1,'fplot_core::scatter_plot_data::m_linewidth'],['../structfplot__core_1_1plot__data__tri__2d.html#a64ecd7d92fb4ac2fadcf5103e8e1287e',1,'fplot_core::plot_data_tri_2d::m_linewidth']]], - ['m_5flogscale_46',['m_logscale',['../structfplot__core_1_1plot__axis.html#ae0308633db7a5bc2aa9dfc5aebc0f871',1,'fplot_core::plot_axis']]], - ['m_5fmarkerfrequency_47',['m_markerfrequency',['../structfplot__core_1_1scatter__plot__data.html#afd73c87e0c8333d8e2af840d73aa5467',1,'fplot_core::scatter_plot_data']]], - ['m_5fmarkersize_48',['m_markersize',['../structfplot__core_1_1scatter__plot__data.html#ac32e05719b497dca629b92ccaa2bc40a',1,'fplot_core::scatter_plot_data']]], - ['m_5fmarkertype_49',['m_markertype',['../structfplot__core_1_1scatter__plot__data.html#a5cf90a01f00ed353e00df87c099999ce',1,'fplot_core::scatter_plot_data']]], - ['m_5fmaxrad_50',['m_maxrad',['../structfplot__core_1_1plot__polar.html#a0df675cfa213da3a32e6fa441cec713c',1,'fplot_core::plot_polar']]], - ['m_5fminrad_51',['m_minrad',['../structfplot__core_1_1plot__polar.html#a0e25b033c0faf43fdb1fbb1cd3518f44',1,'fplot_core::plot_polar']]], - ['m_5fname_52',['m_name',['../structfplot__core_1_1plot__data.html#a216bccf5c14d8633926484770e49112a',1,'fplot_core::plot_data']]], - ['m_5fnumberfmt_53',['m_numberfmt',['../structfplot__core_1_1plot__data__histogram.html#aaf1eb78a557ce9d002aaab7ff552a053',1,'fplot_core::plot_data_histogram']]], - ['m_5fopaque_54',['m_opaque',['../structfplot__core_1_1legend.html#a48c213368dcf6ee0cc202c450fbffc4b',1,'fplot_core::legend']]], - ['m_5fplots_55',['m_plots',['../structfplot__core_1_1multiplot.html#af9b41a50d6394721ff548622aa61725d',1,'fplot_core::multiplot']]], - ['m_5fposition_56',['m_position',['../structfplot__core_1_1plot__label.html#a5387d3494c65621d93b54c232e593e49',1,'fplot_core::plot_label']]], - ['m_5frange_57',['m_range',['../structfplot__core_1_1plot__data__error__bars.html#afa0a49c315b65a212f8b3c5dc3ee448d',1,'fplot_core::plot_data_error_bars']]], - ['m_5frows_58',['m_rows',['../structfplot__core_1_1multiplot.html#a65d63e8ce7aa0d1976f8bca150bb33d3',1,'fplot_core::multiplot']]], - ['m_5fset2square_59',['m_set2square',['../structfplot__core_1_1plot__2d.html#a9cd3bd4fc18c1c07e7cb76ca1cf60d7b',1,'fplot_core::plot_2d']]], - ['m_5fsetmap_60',['m_setmap',['../structfplot__core_1_1plot__3d.html#a626a696690a0f9f9851b1764efb1a048',1,'fplot_core::plot_3d']]], - ['m_5fshow_61',['m_show',['../structfplot__core_1_1legend.html#ad57a162b33234017fcacbf6fb5b8c261',1,'fplot_core::legend']]], - ['m_5fshowcolorbar_62',['m_showcolorbar',['../structfplot__core_1_1plot.html#a2835b94785e566562783f2b0e1162c58',1,'fplot_core::plot']]], - ['m_5fshowgrid_63',['m_showgrid',['../structfplot__core_1_1plot.html#a1bb6dd426e8a18a2db83063e68d8270b',1,'fplot_core::plot']]], - ['m_5fshowhidden_64',['m_showhidden',['../structfplot__core_1_1surface__plot.html#ac881849ed85ad0b25e59c00204aa0960',1,'fplot_core::surface_plot']]], - ['m_5fshowtics_65',['m_showtics',['../structfplot__core_1_1colormap.html#ad6a6afb42b139b250b55772c57c4e0bc',1,'fplot_core::colormap']]], - ['m_5fsimplifydata_66',['m_simplifydata',['../structfplot__core_1_1scatter__plot__data.html#a98d9bfb493e1dae5462ac95979fbcbb4',1,'fplot_core::scatter_plot_data']]], - ['m_5fsimplifyfactor_67',['m_simplifyfactor',['../structfplot__core_1_1scatter__plot__data.html#a307b01a8a110ab7a676ac51c05d3074b',1,'fplot_core::scatter_plot_data']]], - ['m_5fsmooth_68',['m_smooth',['../structfplot__core_1_1surface__plot.html#ac54f0f8105db3eb118eb8a05b7ca7857',1,'fplot_core::surface_plot']]], - ['m_5fspecular_69',['m_specular',['../structfplot__core_1_1surface__plot.html#a33443c0ebe2f233cdeb90a2eed6267ad',1,'fplot_core::surface_plot']]], - ['m_5ftermid_70',['m_termid',['../structfplot__core_1_1terminal.html#a3a008d4ce638c31b5fca9866912e7637',1,'fplot_core::terminal']]], - ['m_5fterminal_71',['m_terminal',['../structfplot__core_1_1plot.html#a132bcac346e1cc2fd85c0685ccf7718b',1,'fplot_core::plot::m_terminal'],['../structfplot__core_1_1multiplot.html#a9bae2b4eddaa75ff61ac0abe77175eb1',1,'fplot_core::multiplot::m_terminal']]], - ['m_5ftext_72',['m_text',['../structfplot__core_1_1plot__label.html#a468e4487a8dc9645e105f93f95035f75',1,'fplot_core::plot_label']]], - ['m_5fthetadirection_73',['m_thetadirection',['../structfplot__core_1_1plot__polar.html#a1a0d0c47ed00a432cf4d1911c282a624',1,'fplot_core::plot_polar']]], - ['m_5fthetastart_74',['m_thetastart',['../structfplot__core_1_1plot__polar.html#a1ed3b2f0f0abc341f8da7215764567b9',1,'fplot_core::plot_polar']]], - ['m_5fticlabelfmt_75',['m_ticlabelfmt',['../structfplot__core_1_1plot__axis.html#a3c72c7ce3d24ebdd12ee8d29c85e507f',1,'fplot_core::plot_axis']]], - ['m_5fticsin_76',['m_ticsin',['../structfplot__core_1_1plot.html#a344af6120545e8a12af51866e44709c1',1,'fplot_core::plot']]], - ['m_5ftitle_77',['m_title',['../structfplot__core_1_1terminal.html#af1bc227957d1404beefc0d106cfa72be',1,'fplot_core::terminal::m_title'],['../structfplot__core_1_1plot__axis.html#a42ca46716cc307a467698534f2ce77c7',1,'fplot_core::plot_axis::m_title'],['../structfplot__core_1_1plot.html#a212e144bbc88f69b516a0c268b09c501',1,'fplot_core::plot::m_title'],['../structfplot__core_1_1multiplot.html#ae7b5636092a710de62e0d2ba4eef9752',1,'fplot_core::multiplot::m_title']]], - ['m_5ftransparency_78',['m_transparency',['../structfplot__core_1_1surface__plot.html#acf55e49e1212536b0bca656c8d5f302d',1,'fplot_core::surface_plot']]], - ['m_5fuseautocolor_79',['m_useautocolor',['../structfplot__core_1_1plot__data__colored.html#af7888aadd5a7fa64a6af7875e35eb4b0',1,'fplot_core::plot_data_colored']]], - ['m_5fuseaxislabels_80',['m_useaxislabels',['../structfplot__core_1_1plot__data__bar.html#a5651040ed1984f555b236f97e513c52d',1,'fplot_core::plot_data_bar']]], - ['m_5fuselighting_81',['m_uselighting',['../structfplot__core_1_1surface__plot.html#ad25c21f74ffc0f3b18bce8207621ba70',1,'fplot_core::surface_plot']]], - ['m_5fusevariablesizepoints_82',['m_usevariablesizepoints',['../structfplot__core_1_1scatter__plot__data.html#a720cc3f633f78c871e76ea19b34fe6da',1,'fplot_core::scatter_plot_data']]], - ['m_5fusey2_83',['m_usey2',['../structfplot__core_1_1plot__data__2d.html#a94c27807c2a4c6403514fe5a387624be',1,'fplot_core::plot_data_2d::m_usey2'],['../structfplot__core_1_1plot__2d.html#a5fe52108ffac0ca723f0061111082338',1,'fplot_core::plot_2d::m_usey2'],['../structfplot__core_1_1plot__data__bar.html#a51124b26f051de4150eee0b120942da5',1,'fplot_core::plot_data_bar::m_usey2'],['../structfplot__core_1_1filled__plot__data.html#ae7a3febf099878ab798ce2abf7eba1d9',1,'fplot_core::filled_plot_data::m_usey2']]], - ['m_5fvertposition_84',['m_vertposition',['../structfplot__core_1_1legend.html#add3185b4f64fb74583931a94e4dfb23a',1,'fplot_core::legend']]], - ['m_5fvisible_85',['m_visible',['../structfplot__core_1_1plot__label.html#a83e92e7f824f33f14d4a8f2552f3d28e',1,'fplot_core::plot_label']]], - ['m_5fwindowheight_86',['m_windowheight',['../structfplot__core_1_1terminal.html#a019b0dcd0e49554333c3e71226a30559',1,'fplot_core::terminal']]], - ['m_5fwindowwidth_87',['m_windowwidth',['../structfplot__core_1_1terminal.html#ad4fc168e1f6bac6b589e41b5e4d5d676',1,'fplot_core::terminal']]], - ['m_5fwireframe_88',['m_wireframe',['../structfplot__core_1_1surface__plot__data.html#aa7856569c70fa73c451702de74e3fab6',1,'fplot_core::surface_plot_data::m_wireframe'],['../structfplot__core_1_1tri__surface__plot__data.html#ab488110fbd8508f9c34b62430577dfaf',1,'fplot_core::tri_surface_plot_data::m_wireframe']]], - ['m_5fx_89',['m_x',['../structfplot__core_1_1surface__plot__data.html#aab0f3a84a1a1f29f56da00e954b384e6',1,'fplot_core::surface_plot_data::m_x'],['../structfplot__core_1_1delaunay__tri__2d.html#aaf1c5b0b6f8d17889152d7dc068da75e',1,'fplot_core::delaunay_tri_2d::m_x'],['../structfplot__core_1_1plot__data__tri__2d.html#a7759843e01d8bd9c38aaab6ebbee3968',1,'fplot_core::plot_data_tri_2d::m_x'],['../structfplot__core_1_1tri__surface__plot__data.html#a0d748864ab5f589fdcac1bfa61ac06e1',1,'fplot_core::tri_surface_plot_data::m_x']]], - ['m_5fxaxis_90',['m_xaxis',['../structfplot__core_1_1plot__2d.html#a5c4e65a6726f52d0f2f037615b9250bd',1,'fplot_core::plot_2d::m_xaxis'],['../structfplot__core_1_1plot__3d.html#afd5e9b00e8e1146c9fb84e0d0117c2e3',1,'fplot_core::plot_3d::m_xaxis']]], - ['m_5fxbars_91',['m_xbars',['../structfplot__core_1_1plot__data__error__bars.html#ace03eab48e42aab5b8570d612adc4a75',1,'fplot_core::plot_data_error_bars']]], - ['m_5fy_92',['m_y',['../structfplot__core_1_1surface__plot__data.html#a82294e25bd1321370f5f55e2051bd000',1,'fplot_core::surface_plot_data::m_y'],['../structfplot__core_1_1delaunay__tri__2d.html#a854c12c20c36fc7e9a9dee2e1702bae7',1,'fplot_core::delaunay_tri_2d::m_y'],['../structfplot__core_1_1plot__data__tri__2d.html#a3ee0322ab193a26b6d2e4bdf46894ce3',1,'fplot_core::plot_data_tri_2d::m_y'],['../structfplot__core_1_1tri__surface__plot__data.html#a23462d63b8ffe52541d975e443044f4a',1,'fplot_core::tri_surface_plot_data::m_y']]], - ['m_5fy2axis_93',['m_y2axis',['../structfplot__core_1_1plot__2d.html#a3079dfde8daa66c4a79e3d3454b40e2c',1,'fplot_core::plot_2d']]], - ['m_5fyaxis_94',['m_yaxis',['../structfplot__core_1_1plot__2d.html#ad91b551d76ef69f571f87511de97a3e8',1,'fplot_core::plot_2d::m_yaxis'],['../structfplot__core_1_1plot__3d.html#ade01966b7cbc1f09297e329dafa69e58',1,'fplot_core::plot_3d::m_yaxis']]], - ['m_5fybars_95',['m_ybars',['../structfplot__core_1_1plot__data__error__bars.html#a372aea519cb462cc9e0e31cb5ef1aac9',1,'fplot_core::plot_data_error_bars']]], - ['m_5fz_96',['m_z',['../structfplot__core_1_1surface__plot__data.html#ab528d77583bf8dcde5ab0182f807e6d6',1,'fplot_core::surface_plot_data::m_z'],['../structfplot__core_1_1delaunay__tri__surface.html#a0961e14a2d4ed0d9a7d75e2e2f5619e3',1,'fplot_core::delaunay_tri_surface::m_z'],['../structfplot__core_1_1tri__surface__plot__data.html#a8201960050d3276b59d9bfad7d14ca10',1,'fplot_core::tri_surface_plot_data::m_z']]], - ['m_5fzaxis_97',['m_zaxis',['../structfplot__core_1_1plot__3d.html#acc0b113abeb246892dde2b8782eac0ca',1,'fplot_core::plot_3d']]], - ['m_5fzeroaxis_98',['m_zeroaxis',['../structfplot__core_1_1plot__axis.html#ae1841279b24ce9872404992f5f025265',1,'fplot_core::plot_axis']]], - ['m_5fzintersect_99',['m_zintersect',['../structfplot__core_1_1plot__3d.html#acfcd025c88ae8f15a5ae2ff86021f03c',1,'fplot_core::plot_3d']]], - ['marker_5fasterisk_100',['marker_asterisk',['../namespacefplot__core.html#ad201ee04e5b4c9dacac36626e9db5d17',1,'fplot_core']]], - ['marker_5fempty_5fcircle_101',['marker_empty_circle',['../namespacefplot__core.html#a03ed7e9b32fd8b4242e3c00ac9f1dd90',1,'fplot_core']]], - ['marker_5fempty_5fnabla_102',['marker_empty_nabla',['../namespacefplot__core.html#a1a127e0b722b34196914625744f531fb',1,'fplot_core']]], - ['marker_5fempty_5frhombus_103',['marker_empty_rhombus',['../namespacefplot__core.html#a130b91ed2576d346f9cfa882fce3a370',1,'fplot_core']]], - ['marker_5fempty_5fsquare_104',['marker_empty_square',['../namespacefplot__core.html#a1847a8539a108f2cc75250a0f6d18fc5',1,'fplot_core']]], - ['marker_5fempty_5ftriangle_105',['marker_empty_triangle',['../namespacefplot__core.html#aa8ce197691d6e257ca34c826287661ea',1,'fplot_core']]], - ['marker_5ffilled_5fcircle_106',['marker_filled_circle',['../namespacefplot__core.html#a958ef8c01819437c1bf72976fdf0408c',1,'fplot_core']]], - ['marker_5ffilled_5fnabla_107',['marker_filled_nabla',['../namespacefplot__core.html#a3206bef63b75d34ff4ddd604d347272a',1,'fplot_core']]], - ['marker_5ffilled_5frhombus_108',['marker_filled_rhombus',['../namespacefplot__core.html#a73e3a13a2500d31fe24f6a4e4e6abbe6',1,'fplot_core']]], - ['marker_5ffilled_5fsquare_109',['marker_filled_square',['../namespacefplot__core.html#a925e2ca369cd0c7794c38d6f2c0ae3fc',1,'fplot_core']]], - ['marker_5ffilled_5ftriangle_110',['marker_filled_triangle',['../namespacefplot__core.html#aee19422210a01b45b0a946072071aa89',1,'fplot_core']]], - ['marker_5fplus_111',['marker_plus',['../namespacefplot__core.html#a1c6bffe3a206bcc5400d7e339f482779',1,'fplot_core']]], - ['marker_5fx_112',['marker_x',['../namespacefplot__core.html#aa8584a251e760fd4545d03c0a4506fa6',1,'fplot_core']]] -]; diff --git a/docs/html/search/variables_6.html b/docs/html/search/variables_6.html deleted file mode 100644 index ce4a906..0000000 --- a/docs/html/search/variables_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_6.js b/docs/html/search/variables_6.js deleted file mode 100644 index 01fc0dd..0000000 --- a/docs/html/search/variables_6.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['plot_5farray_5fsize_5fmismatch_5ferror_0',['plot_array_size_mismatch_error',['../namespacefplot__core.html#a2747b79ccd539b6a6b0edf9bee970ece',1,'fplot_core']]], - ['plot_5fgnuplot_5ffile_5ferror_1',['plot_gnuplot_file_error',['../namespacefplot__core.html#a964aa864e3984d866c12f75323bb6dc1',1,'fplot_core']]], - ['plot_5finvalid_5finput_5ferror_2',['plot_invalid_input_error',['../namespacefplot__core.html#ac53894e99cce3be3c2f7c8ef7e579e98',1,'fplot_core']]], - ['plot_5finvalid_5foperation_5ferror_3',['plot_invalid_operation_error',['../namespacefplot__core.html#adcbe99e541fc04356d322d562e5c67f0',1,'fplot_core']]], - ['plot_5fout_5fof_5fmemory_5ferror_4',['plot_out_of_memory_error',['../namespacefplot__core.html#a002195f1f56bc9edc1ec7dd51c3090d8',1,'fplot_core']]], - ['plotdata_5fmax_5fname_5flength_5',['plotdata_max_name_length',['../namespacefplot__core.html#acfa29ac62a50b61ea009b20a898d45e5',1,'fplot_core']]], - ['polar_5ftheta_5fbottom_6',['polar_theta_bottom',['../namespacefplot__core.html#af3ed8d21802d919dd891a4ea8af0ec91',1,'fplot_core']]], - ['polar_5ftheta_5fccw_7',['polar_theta_ccw',['../namespacefplot__core.html#ae803ea1ff95802b0295be3661e11ce98',1,'fplot_core']]], - ['polar_5ftheta_5fcw_8',['polar_theta_cw',['../namespacefplot__core.html#aff8546dbedb11e1fdf11e0ccdc8d6df0',1,'fplot_core']]], - ['polar_5ftheta_5fleft_9',['polar_theta_left',['../namespacefplot__core.html#a783a98c4f406054602d757133e496c19',1,'fplot_core']]], - ['polar_5ftheta_5fright_10',['polar_theta_right',['../namespacefplot__core.html#ab582c30f182b32ad10fb85a2cdee5a2b',1,'fplot_core']]], - ['polar_5ftheta_5ftop_11',['polar_theta_top',['../namespacefplot__core.html#a4c5d751fa6cfbf02b759a3858d0858f4',1,'fplot_core']]] -]; diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js deleted file mode 100644 index 3526f50..0000000 --- a/docs/html/search/variables_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['red_0',['red',['../structfplot__core_1_1color.html#a5533de88a3f68d6fafd38c0624bb76c8',1,'fplot_core::color']]] -]; diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png deleted file mode 100644 index fe895f2c58179b471a22d8320b39a4bd7312ec8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T diff --git a/docs/html/splitbard.png b/docs/html/splitbard.png deleted file mode 100644 index 8367416d757fd7b6dc4272b6432dc75a75abd068..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? diff --git a/docs/html/square_2d_example.png b/docs/html/square_2d_example.png deleted file mode 100644 index 1abb747027554e17e34407a7442e824fdbb7023f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18274 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 diff --git a/docs/html/structdelaunay__s-members.html b/docs/html/structdelaunay__s-members.html deleted file mode 100644 index c1cf66b..0000000 --- a/docs/html/structdelaunay__s-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    delaunay_s Member List
    -
    -
    - -

    This is the complete list of members for delaunay_s, including all inherited members.

    - - - - - - - - -
    end_point (defined in delaunay_s)delaunay_s
    faces (defined in delaunay_s)delaunay_s
    leftmost_he (defined in delaunay_s)delaunay_s
    num_faces (defined in delaunay_s)delaunay_s
    points (defined in delaunay_s)delaunay_s
    rightmost_he (defined in delaunay_s)delaunay_s
    start_point (defined in delaunay_s)delaunay_s
    -
    - - - - diff --git a/docs/html/structdelaunay__s.html b/docs/html/structdelaunay__s.html deleted file mode 100644 index ba9ce88..0000000 --- a/docs/html/structdelaunay__s.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -fplot: delaunay_s Struct Reference - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    delaunay_s Struct Reference
    -
    -
    - - - - - - - - - - - - - - - - -

    -Public Attributes

    -halfedge_trightmost_he
     
    -halfedge_tleftmost_he
     
    -point2d_tpoints
     
    -face_tfaces
     
    -unsigned int num_faces
     
    -unsigned int start_point
     
    -unsigned int end_point
     
    -

    Detailed Description

    -
    -

    Definition at line 76 of file delaunay.c.

    -

    The documentation for this struct was generated from the following file:
      -
    • C:/Users/jchri/Documents/github/fplot/src/delaunay.c
    • -
    -
    -
    - - - - diff --git a/docs/html/structdelaunay__s.js b/docs/html/structdelaunay__s.js deleted file mode 100644 index b3d1294..0000000 --- a/docs/html/structdelaunay__s.js +++ /dev/null @@ -1,10 +0,0 @@ -var structdelaunay__s = -[ - [ "end_point", "structdelaunay__s.html#a7d813ecb66af0f8915c3c12716bac454", null ], - [ "faces", "structdelaunay__s.html#a467e64a45b77a33c380acbe9755619bc", null ], - [ "leftmost_he", "structdelaunay__s.html#a8f6dab799cf1e2bd667a8233bdfc7bdb", null ], - [ "num_faces", "structdelaunay__s.html#ad28b79be55758109d928b53d144467c5", null ], - [ "points", "structdelaunay__s.html#aef4dea51bcfd8e97f75c17a21da36602", null ], - [ "rightmost_he", "structdelaunay__s.html#ad57f8a1f4caa4cd79f29b81e02cc4f96", null ], - [ "start_point", "structdelaunay__s.html#a480aba060c5153cd433390ab18880537", null ] -]; \ No newline at end of file diff --git a/docs/html/structface__s-members.html b/docs/html/structface__s-members.html deleted file mode 100644 index 913f325..0000000 --- a/docs/html/structface__s-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    face_s Member List
    -
    -
    - -

    This is the complete list of members for face_s, including all inherited members.

    - - - -
    he (defined in face_s)face_s
    num_verts (defined in face_s)face_s
    -
    - - - - diff --git a/docs/html/structface__s.html b/docs/html/structface__s.html deleted file mode 100644 index 3a2d3d2..0000000 --- a/docs/html/structface__s.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -fplot: face_s Struct Reference - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    face_s Struct Reference
    -
    -
    - - - - - - -

    -Public Attributes

    -halfedge_the
     
    -unsigned int num_verts
     
    -

    Detailed Description

    -
    -

    Definition at line 63 of file delaunay.c.

    -

    The documentation for this struct was generated from the following file:
      -
    • C:/Users/jchri/Documents/github/fplot/src/delaunay.c
    • -
    -
    -
    - - - - diff --git a/docs/html/structface__s.js b/docs/html/structface__s.js deleted file mode 100644 index f6d7d89..0000000 --- a/docs/html/structface__s.js +++ /dev/null @@ -1,5 +0,0 @@ -var structface__s = -[ - [ "he", "structface__s.html#a4d8cdae83dd5edce54a0f2cf6c6dda83", null ], - [ "num_verts", "structface__s.html#a35bc4eab3a58a1d2067dd35f665b9845", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1color-members.html b/docs/html/structfplot__core_1_1color-members.html deleted file mode 100644 index 4fe68ee..0000000 --- a/docs/html/structfplot__core_1_1color-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::color Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::color, including all inherited members.

    - - - - - - -
    bluefplot_core::color
    copy_fromclr_copy_fromfplot_core::color
    greenfplot_core::color
    redfplot_core::color
    to_hex_stringclr_to_hex_stringfplot_core::color
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1color.html b/docs/html/structfplot__core_1_1color.html deleted file mode 100644 index 8a1c78a..0000000 --- a/docs/html/structfplot__core_1_1color.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - -fplot: fplot_core::color Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::color Type Reference
    -
    -
    - -

    Constructs a linearly spaced array. - More...

    - - - - - - - - -

    -Public Member Functions

    procedure, pass, public to_hex_string clr_to_hex_string
     Returns the color in hexadecimal format.
     
    procedure, pass, public copy_from clr_copy_from
     Copies another color to this color.
     
    - - - - - - - - - - -

    -Public Attributes

    integer(int32), public red = 0
     The red component of the color (must be between 0 and 255).
     
    integer(int32), public green = 0
     The green component of the color (must be between 0 and 255).
     
    integer(int32), public blue = 255
     The blue component of the color (must be between 0 and 255).
     
    -

    Detailed Description

    -

    Constructs a linearly spaced array.

    -
    Parameters
    - - - - -
    [in]startThe first value in the array.
    [in]finishThe last value in the array.
    [in]nptsThe number of values in the array.
    -
    -
    -
    Returns
    The resulting array.
    -

    Construcst a logarithmically spaced array.

    -
    Parameters
    - - - - -
    [in]startThe exponent of the first value in the array.
    [in]finishThe exponent of the final value in the array.
    [in]nptsThe number of values in the array.
    -
    -
    -
    Returns
    The resulting array.
    -

    Constructs two matrices (X and Y) from x and y data arrays.

    -
    Parameters
    - - - -
    [in]xAn M-element array of x data points.
    [in]yAn N-element array of y data points.
    -
    -
    -
    Returns
    An N-by-M-by-2 array containing the x data matrix on the first page of the array, and the y data matrix on the second page.
    -

    Describes an RGB color.

    - -

    Definition at line 358 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ copy_from()

    - -
    -
    - - - - -
    procedure, pass, public fplot_core::color::copy_from
    -
    - -

    Copies another color to this color.

    -
    Syntax
    subroutine copy_from(class(color) this, class(color) clr)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe color object.
    [in]clrThe color to copy.
    -
    -
    - -

    Definition at line 385 of file fplot_core.f90.

    - -
    -
    - -

    ◆ to_hex_string()

    - -
    -
    - - - - -
    procedure, pass, public fplot_core::color::to_hex_string
    -
    - -

    Returns the color in hexadecimal format.

    -
    Syntax
    pure character(6) function clr_to_hex_string(class(color) this)
    -
    -
    Parameters
    - - -
    [in]thisThe color object.
    -
    -
    -
    Returns
    A string containing the hexadecimal equivalent.
    - -

    Definition at line 375 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ blue

    - -
    -
    - - - - -
    integer(int32), public fplot_core::color::blue = 255
    -
    - -

    The blue component of the color (must be between 0 and 255).

    - -

    Definition at line 364 of file fplot_core.f90.

    - -
    -
    - -

    ◆ green

    - -
    -
    - - - - -
    integer(int32), public fplot_core::color::green = 0
    -
    - -

    The green component of the color (must be between 0 and 255).

    - -

    Definition at line 362 of file fplot_core.f90.

    - -
    -
    - -

    ◆ red

    - -
    -
    - - - - -
    integer(int32), public fplot_core::color::red = 0
    -
    - -

    The red component of the color (must be between 0 and 255).

    - -

    Definition at line 360 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1color.js b/docs/html/structfplot__core_1_1color.js deleted file mode 100644 index e209a94..0000000 --- a/docs/html/structfplot__core_1_1color.js +++ /dev/null @@ -1,8 +0,0 @@ -var structfplot__core_1_1color = -[ - [ "copy_from", "structfplot__core_1_1color.html#a08fa8d6f601ba8641ec91e1f43e1c586", null ], - [ "to_hex_string", "structfplot__core_1_1color.html#a82f6fa701820ba719c3e3266a4e6ebd0", null ], - [ "blue", "structfplot__core_1_1color.html#a208e32c7d0b0798118575c2234f4cc94", null ], - [ "green", "structfplot__core_1_1color.html#aa710db5291759d15263ecfb69a8d693c", null ], - [ "red", "structfplot__core_1_1color.html#a5533de88a3f68d6fafd38c0624bb76c8", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1colormap-members.html b/docs/html/structfplot__core_1_1colormap-members.html deleted file mode 100644 index 07ae4ee..0000000 --- a/docs/html/structfplot__core_1_1colormap-members.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1colormap.html b/docs/html/structfplot__core_1_1colormap.html deleted file mode 100644 index 5365967..0000000 --- a/docs/html/structfplot__core_1_1colormap.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - - - - -fplot: fplot_core::colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::colormap Type Referenceabstract
    -
    -
    - -

    A colormap object for a surface plot. - More...

    -
    -Inheritance diagram for fplot_core::colormap:
    -
    -
    - - -fplot_core::plot_object -fplot_core::cool_colormap -fplot_core::custom_colormap -fplot_core::earth_colormap -fplot_core::grey_colormap -fplot_core::hot_colormap -fplot_core::parula_colormap -fplot_core::rainbow_colormap - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure(cm_get_string_result), deferred, public get_color_string cm_get_string_result
     Gets the GNUPLOT string defining the color distribution. For instance, this routine could return the string: '0 "dark-blue", 1 "blue", 2 "cyan", 3 "green", 4 "yellow", 5 "orange", 6 "red", 7 "dark-red"'. This string would result in a rainbow type map.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - - - - - - - - -

    -Public Attributes

    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    - - - - -

    -Private Attributes

    character(len=:), allocatable m_label
     The label to associate with the colormap.
     
    -

    Detailed Description

    -

    A colormap object for a surface plot.

    - -

    Definition at line 2377 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure(cm_get_string_result), deferred, public fplot_core::colormap::get_color_string
    -
    -pure virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution. For instance, this routine could return the string: '0 "dark-blue", 1 "blue", 2 "cyan", 3 "green", 4 "yellow", 5 "orange", 6 "red", 7 "dark-red"'. This string would result in a rainbow type map.

    - -

    Implemented in fplot_core::cool_colormap, fplot_core::custom_colormap, fplot_core::earth_colormap, fplot_core::grey_colormap, fplot_core::hot_colormap, fplot_core::parula_colormap, and fplot_core::rainbow_colormap.

    - -

    Definition at line 2403 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::colormap::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this colormap object.

    -
    Syntax
    character(len = :) function, allocatable :: get_command_string(class(colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 2398 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_border()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::get_draw_border
    -
    - -

    Gets a logical value determining if the border should be drawn.

    -
    Syntax
    logical get_draw_border(class(colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe colormap object.
    -
    -
    -
    Returns
    Returns true if the border should be drawn; else, false.
    - -

    Definition at line 2458 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_horizontal()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::get_horizontal
    -
    - -

    Gets a logical value determining if the colormap should be drawn horizontally and below the plot.

    -
    Syntax
    logical get_horizontal(class(colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe colormap object.
    -
    -
    -
    Returns
    Returns true if the colormap should be drawn horizontally; else, false.
    - -

    Definition at line 2435 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::get_label
    -
    - -

    Gets the label to associate with the colorbar.

    -
    Syntax
    character(len = :) get_label(class(colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe colormap object.
    -
    -
    -
    Returns
    The label.
    - -

    Definition at line 2413 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_show_tics()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::get_show_tics
    -
    - -

    Gets a logical value determining if the tic marks should be drawn.

    -
    Syntax
    logical get_show_tics(class(colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe colormap object.
    -
    -
    -
    Returns
    Returns true if the tic marks should be drawn; else, false.
    - -

    Definition at line 2480 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_border()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::set_draw_border
    -
    - -

    Sets a logical value determining if the border should be drawn.

    -
    Syntax
    subroutine set_draw_border(class(colormap) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe colormap object.
    [in]xSet to true if the border should be drawn; else, false.
    -
    -
    - -

    Definition at line 2469 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_horizontal()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::set_horizontal
    -
    - -

    Sets a logical value determining if the colormap should be drawn horizontally and below the plot.

    -
    Syntax
    subroutine set_horizontal(class(colormap) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe colormap object.
    [in]xSet to true if the colormap should be drawn horizontally; else, false.
    -
    -
    - -

    Definition at line 2447 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::set_label
    -
    - -

    Sets the label to associate with the colorbar.

    -
    Syntax
    subroutine set_label(class(colormap) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe colormap object.
    [in]xThe label.
    -
    -
    - -

    Definition at line 2423 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_show_tics()

    - -
    -
    - - - - -
    procedure, public fplot_core::colormap::set_show_tics
    -
    - -

    Sets a logical value determining if the tic marks should be drawn.

    -
    Syntax
    subroutine set_show_tics(class(colormap) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe colormap object.
    [in]xSet to true if the tic marks should be drawn; else, false.
    -
    -
    -

    Sets a logical value determining if the border should be drawn.

    -
    Syntax
    subroutine set_draw_border(class(colormap) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe colormap object.
    [in]xSet to true if the border should be drawn; else, false.
    -
    -
    - -

    Definition at line 2502 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_drawborder

    - -
    -
    - - - - -
    logical fplot_core::colormap::m_drawborder = .true.
    -
    - -

    Draw the colormap border.

    - -

    Definition at line 2384 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_horizontal

    - -
    -
    - - - - -
    logical fplot_core::colormap::m_horizontal = .false.
    -
    - -

    The colormap should be drawn horizontally.

    - -

    Definition at line 2382 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_label

    - -
    -
    - - - - - -
    - - - - -
    character(len = :), allocatable fplot_core::colormap::m_label
    -
    -private
    -
    - -

    The label to associate with the colormap.

    - -

    Definition at line 2380 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_showtics

    - -
    -
    - - - - -
    logical fplot_core::colormap::m_showtics = .true.
    -
    - -

    Show the tic marks.

    - -

    Definition at line 2386 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1colormap.js b/docs/html/structfplot__core_1_1colormap.js deleted file mode 100644 index 1c0df66..0000000 --- a/docs/html/structfplot__core_1_1colormap.js +++ /dev/null @@ -1,17 +0,0 @@ -var structfplot__core_1_1colormap = -[ - [ "get_color_string", "structfplot__core_1_1colormap.html#a03f0bef95c6a9c61ad04c63b84f8b6d5", null ], - [ "get_command_string", "structfplot__core_1_1colormap.html#a6c06d5831f8e2bb173f2cabfc89b471e", null ], - [ "get_draw_border", "structfplot__core_1_1colormap.html#adfde936a6669f562b17fba87e8ae8588", null ], - [ "get_horizontal", "structfplot__core_1_1colormap.html#a11e1d8c4d776814ba9b931dea5eba55f", null ], - [ "get_label", "structfplot__core_1_1colormap.html#ae06b58a108c1805c3ab2138dc31bd326", null ], - [ "get_show_tics", "structfplot__core_1_1colormap.html#a0800d95684d4756cae09f365a8e93b5d", null ], - [ "set_draw_border", "structfplot__core_1_1colormap.html#acb679819160a82793304bcfdde53a623", null ], - [ "set_horizontal", "structfplot__core_1_1colormap.html#a8530b43520ee1929a510dc8aec57e324", null ], - [ "set_label", "structfplot__core_1_1colormap.html#ac595c1361a36891870faf9d676a66d78", null ], - [ "set_show_tics", "structfplot__core_1_1colormap.html#a4cfc2819c20b439ba562026d5ca54615", null ], - [ "m_drawborder", "structfplot__core_1_1colormap.html#a3995a2a4d9661f991749686740db28ea", null ], - [ "m_horizontal", "structfplot__core_1_1colormap.html#a85b7ea506d0dfd74b7a851e190e5e9e0", null ], - [ "m_label", "structfplot__core_1_1colormap.html#a410c0452382dd1965701fd92f3c89db1", null ], - [ "m_showtics", "structfplot__core_1_1colormap.html#ad6a6afb42b139b250b55772c57c4e0bc", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1colormap.png b/docs/html/structfplot__core_1_1colormap.png deleted file mode 100644 index d0664d93282fca73166818e40cd64a82b1c57c9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2736 zcmd5;dsI?+9@knO%^2p?mIk9mW4YT}HipqdA*0etrITGP#k8G#EU{Dv{eg{K{QjDG<%qm4@3$^69d#SKt%QewY$wZJOAuCd-iwEy}!r(K7QZV z=Y9(g1o^=hAr@I#S;6-D?>cB@WrKp&=j;|jZx8D5R%k*V2spIcXf#60v5A@Vq6ZaQ zHvajfQ*qbW$jAtE?)5n27WB>j)WM)&D`;;Xm<1&-tgIGo-@D8AP^R@;u{8CEuH`mQ z{u6pF!j9*VW)S`xXkdYE{%< zPWao|*_}hX{s9_${18hPELgA_W^Zk6{q?iSyC^bmn%$WL05zE#f7KM`s6qkpKK#xd zJDNjWykzBn+ngi>!HZ^Q^kg|i&AKySxK7=!(CVe47FcnQpkz;RZ2nQnmnmNXy@$=x z?@yJZXeEl1SeJ^PktyA&#_3eeQhbHdNqiVcUt?Asel?(!sV>$=2k_|o2l6s*=cx^vVs41Fy7swJL?5=beIihi+k{q`U_^; z66J-AA!iy0x@2d^nHA47Fo;@ke8rPbDU)A3XPTUPnaijGXT#rb%zV4dv}XE?1o&u!yKqp8@-1)2V1ju5LxGku4d7JNza&~)=^}t`lb1r=xHK82jF@Gx^Pd0onuk<8{ifRZIor>T|SPfj_ME>PTNj|ME%aS)&b$hnW9F=Gc?PU%N zp(3J{WbnkwPADyQ zG-LYlrr8n&TN^In-?HrFR_Y?pWv23fFGcN-`|pxz#Q2aZkaYa!Az3wbVPb+ZbXwXZ%F%-a>)?Gyz1`3M%lfn0%+n zbsENv8UMMRh%LCvAa14)<|J!$-?p(5gz`6-^Yh2?8_HUiBj;1_)%@u8g1#$lrHovh zR@eJjJ0qx5n1CW3Ii-D=gq)&|w@R3DwvSfMuvR#oTRUMAo6)94Yk{iR)ll$k_V8zIb8DimDz6Y8**depYD)U|G1ChiQG+9)d7k zl&u3|YW`KtAd}2sc}yH73H|gjbjEe3CbKY=Um0}(QFr(@iank>!G* zsnTRTqD#|!{qPWk6~4Hc?;R(^xP95fO!!f6U=VAyX)x}e41#B&jx~tX{-!JtB^uJO zle8T$?y9L%4xlFFMo0_Wn08i7B(u^FjrnFZPj-? zqYZn{mAv%Om=ui~`L8`;$|KQBpwM(TvLxL8wVlgp)hNf?g5w7MiJ@iZHIIW~y7|Rr zNKGGuHpJY&T9SBGV$9$FgI7#S1*&-B`~4Hg6yghr_RKWfrLe3z3>zHCjONUhz5u+u z+bdmY1mp9?Wro4}u-OtR2}epDA>!xH&It6nBIDf2ShiBuN;H)6K%?bt#IsB^czCcqTHXRWQJ;anA;N z7qYuvybjmk8cKuWaJ1XB0Zy;9@CmlZd%$1dJk4E2^)dv^!zs@@rO<{z - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::cool_colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1cool__colormap.html b/docs/html/structfplot__core_1_1cool__colormap.html deleted file mode 100644 index e0756aa..0000000 --- a/docs/html/structfplot__core_1_1cool__colormap.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - -fplot: fplot_core::cool_colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::cool_colormap Type Reference
    -
    -
    - -

    Defines a colormap consisting of "cool" colors. - More...

    -
    -Inheritance diagram for fplot_core::cool_colormap:
    -
    -
    - - -fplot_core::colormap -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_color_string ccm_get_clr
     Gets the GNUPLOT string defining the color distribution.
     
    - Public Member Functions inherited from fplot_core::colormap
    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::colormap
    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    -

    Detailed Description

    -

    Defines a colormap consisting of "cool" colors.

    - -

    Definition at line 2539 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::cool_colormap::get_color_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution.

    -
    Syntax
    character(len = :) function, allocatable get_color_string(class(cool_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe cool_colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::colormap.

    - -

    Definition at line 2550 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1cool__colormap.js b/docs/html/structfplot__core_1_1cool__colormap.js deleted file mode 100644 index b6cf772..0000000 --- a/docs/html/structfplot__core_1_1cool__colormap.js +++ /dev/null @@ -1,4 +0,0 @@ -var structfplot__core_1_1cool__colormap = -[ - [ "get_color_string", "structfplot__core_1_1cool__colormap.html#ab2806549f28dd4a194d79904497f03ce", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1cool__colormap.png b/docs/html/structfplot__core_1_1cool__colormap.png deleted file mode 100644 index d1b4cdda0645c6a8ecd215e2bc2c795c81d79060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904 zcmeAS@N?(olHy`uVBq!ia0vp^^MJU6gBeIFURiV=NJ$6ygt-3y{~ySF@#br3|Doj; z2ATyD)6cwk@ZbSZ-1KbN5}+JsNswPK1CS2}=1jA%FfcF+d%8G=R4~4s`?hbh6%U)b z|B_SR>yIu!z};d}v-8b7kJnv+8rv=_9{Hkg`TUN4is!4T7bdIdFI4x8n^mQ$oBrC= zbJtnc)@yM5c&!=^&|CibxU)*ZReIzI{0C{PU`dI~nSn z_z!r$V65P@Wzb*9{y_B$!=4tohUpiWKL}MZ#34!6`{+NP^Sf2YbFWa0|>wK8qD9aby;qIqccO4YT;7slECJf7?~DNE{OP=0Z0_2fw*9~a#F zuydvP)IWW3izWTOtkPBT6y<-r_uApy_j{+!D}NtaTYh0@>hx*7zi#fldU&qY&%Eb# z-*-(~@>=H4Ip4j7|KHzRtzuc>=RZmA_)2xp|Hhzr0|m;SuSMr}Ml;NN!g@i!_VwPl z*xz5*e&6=`=KA8jFJc(%@rDADr2Vq#L0*5IjErATyDmWp+U;#a+& z8b816qPCaSmFoRTZJP>F!o+Hy&lN6xdjnq+->|mno#v~}HP4+aJ}VX1W_fwiTKDRV zsn>;j?OZE#@4mWvRleVHW~8rjT~OSs+;utEA9(M5_<7AelgG|gy?6i3joaG1??(07 z_Sd(nb@$%g8*X~d@%gmeh_Xj-&#jevcjct~+}{VX&z*V0>9trG7$Vc(n;UO_z2j8= xi - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::custom_colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1custom__colormap.html b/docs/html/structfplot__core_1_1custom__colormap.html deleted file mode 100644 index 3c327c9..0000000 --- a/docs/html/structfplot__core_1_1custom__colormap.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - -fplot: fplot_core::custom_colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::custom_colormap Type Reference
    -
    -
    - -

    Defines a custom colormap that utilizes the FORCOLORMAP library to provide the map. - More...

    -
    -Inheritance diagram for fplot_core::custom_colormap:
    -
    -
    - - -fplot_core::colormap -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_color_string custom_get_clr
     Gets the GNUPLOT string defining the color distribution.
     
    procedure, public set_colormap custom_set
     Sets the FORCOLORMAP colormap object.
     
    procedure, public get_colormap custom_get
     Gets a pointer to the FORCOLORMAP colormap object.
     
    - Public Member Functions inherited from fplot_core::colormap
    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - -

    -Private Attributes

    class(cmap), pointer, private m_map => null()
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::colormap
    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    -

    Detailed Description

    -

    Defines a custom colormap that utilizes the FORCOLORMAP library to provide the map.

    - -

    Definition at line 2604 of file fplot_core.f90.

    -

    Constructor & Destructor Documentation

    - -

    ◆ custom_final()

    - -
    -
    - - - - - -
    - - - - -
    final fplot_core::custom_colormap::custom_final
    -
    -final
    -
    - -

    Definition at line 2607 of file fplot_core.f90.

    - -
    -
    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::custom_colormap::get_color_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution.

    -
    Syntax
    character(len = :) function, allocatable get_color_string(class(custom_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe custom_colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::colormap.

    - -

    Definition at line 2617 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_colormap()

    - -
    -
    - - - - -
    procedure, public fplot_core::custom_colormap::get_colormap
    -
    - -

    Gets a pointer to the FORCOLORMAP colormap object.

    -
    Syntax
    class(cmap), pointer function get_colormap(class(custom_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe custom_colormap object.
    -
    -
    -
    Returns
    A pointer to the FORCOLORMAP colormap object.
    - -

    Definition at line 2649 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_colormap()

    - -
    -
    - - - - -
    procedure, public fplot_core::custom_colormap::set_colormap
    -
    - -

    Sets the FORCOLORMAP colormap object.

    -
    Syntax
    subroutine set_colormap(class(custom_colormap) this, class(cmap) x, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe custom_colormap object.
    [in]xThe FORCOLORMAP colormap object. The custom_colormap object stores a copy of this object; therefore, any changes made to x after calls to this routine will not impact the behavior of the custom_colormap object.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if a memory allocation error occurs.
    • -
    -
    -
    -
    - -

    Definition at line 2639 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_map

    - -
    -
    - - - - - -
    - - - - -
    class(cmap), pointer, private fplot_core::custom_colormap::m_map => null()
    -
    -private
    -
    - -

    Definition at line 2605 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1custom__colormap.js b/docs/html/structfplot__core_1_1custom__colormap.js deleted file mode 100644 index c2f5f9a..0000000 --- a/docs/html/structfplot__core_1_1custom__colormap.js +++ /dev/null @@ -1,6 +0,0 @@ -var structfplot__core_1_1custom__colormap = -[ - [ "get_color_string", "structfplot__core_1_1custom__colormap.html#acfb9922b4fc8f462310c166156b7d898", null ], - [ "get_colormap", "structfplot__core_1_1custom__colormap.html#ae99878b9e1218314af1adc982af6092d", null ], - [ "set_colormap", "structfplot__core_1_1custom__colormap.html#ae4c07ac867f7fd74ca4219a7e859d0e8", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1custom__colormap.png b/docs/html/structfplot__core_1_1custom__colormap.png deleted file mode 100644 index caa5ab7bafb2a4cab1988a77659c3729a3c5e80d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmeAS@N?(olHy`uVBq!ia0vp^Yk|0fgBeIJ5}5r3NJ$6ygt-3y{~ySF@#br3|Doj; z2ATyD)6cwk@ZbSZ-1KbN5}+JsNswPK1CS2}=1jA%FfcItdAc};R4~4sdvVih1s+%P z*)#qA{qN47s>HZ)MeaLIO(i^}kAXYN^VWlHDw&5bn;nx#XJp{1U^rmnllr^j%o6LVZ-dK}?(WRl ztH#hEn#avxwnLZU#)EAP3C*{e8h8l^=!K&P2~V!`jd`c6C+#_SchBW*Sxxu1^Paxc zw&j5K>-U@P{j|J4P2q0r_k86gCq&lnE>-i~HYf6S%AEFd##2C{AsG=>yILvS_G&Dz z?2esdA`S{^V7fQ=Bt1C zo_qeA_wQ|%7xS~4?Edd!d6Vt5SvaWo#|E{Ur9P9Ma31@7XG?7Vr3_VIWTgSaq;y}h z_oV%eu$Z*TP3|caV>r;j&fs%6WLy7npIyN>?NZe*%{_fBn~5RfA&~(B3$nLGtpbNk z6goP5nr?S>0K-#B$xP(-hD`DQ=l4Cy`Svr?EPCpv-`mbdZCkRId(WnSdavis|D4Nt z>F#=Y)xA)!H>hVd>TFzrI>MzL@cLhvg2H z=T~lRJA3bKr-G91+<({aum0@He(~&#Q|o6v7ry<}>Xm)O>+EfrP5L*>{Jbjf_Z1)B zcC%Lg&Fy=B6-(I!@2YrY9Iuxs0F W - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::delaunay_tri_2d Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1delaunay__tri__2d.html b/docs/html/structfplot__core_1_1delaunay__tri__2d.html deleted file mode 100644 index cade37d..0000000 --- a/docs/html/structfplot__core_1_1delaunay__tri__2d.html +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - - -fplot: fplot_core::delaunay_tri_2d Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::delaunay_tri_2d Type Reference
    -
    -
    - -

    Provides a container for a 2D Delaunay triangulation. - More...

    -
    -Inheritance diagram for fplot_core::delaunay_tri_2d:
    -
    -
    - - -fplot_core::delaunay_tri_surface - -
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public create d2d_init
     Creates an unconstrained 2D Delaunay triangulation given a set of x-y points.
     
    procedure, public get_point_count d2d_get_pt_count
     Gets the number of points in the triangulation.
     
    procedure, public get_triangle_count d2d_get_tri_count
     Gets the number of triangles in the triangulation.
     
    procedure, public get_points_x d2d_get_x_pts
     Gets the x-coordinates of each point.
     
    procedure, public get_points_y d2d_get_y_pts
     Gets the y-coordinates of each point.
     
    procedure, public get_indices d2d_get_tris
     Gets a list of the indices of each triangle vertex.
     
    procedure, public find_triangle d2d_get_tri_with_pt
     Finds the triangle that contains the specified point.
     
    - - - - - - - -

    -Public Attributes

    real(real64), dimension(:), allocatable m_y
     An array of the y-coordinates of each point.
     
    integer(int32), dimension(:,:), allocatable m_indices
     A 3-column matrix containing the indices of each triangle's vertex.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:), allocatable m_x
     An array of the x-coordinates of each point.
     
    -

    Detailed Description

    -

    Provides a container for a 2D Delaunay triangulation.

    -
    Remarks
    This type utilizes the GEOMPACK triangulation code available at https://people.sc.fsu.edu/~jburkardt/f77_src/geompack/geompack.html.
    - -

    Definition at line 6765 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ create()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_2d::create
    -
    - -

    Creates an unconstrained 2D Delaunay triangulation given a set of x-y points.

    -
    Syntax
    subroutine create(class(delaunay_tri_2d) this, real(real64) x(:), real(real64) y(:), class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe delaunay_tri_2d object.
    [in]xAn N-element array containing the x-coordinates of each data point.
    [in]yAn N-element array containing the y-coordinates of each data point.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not the same size.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    -
    -
    -
    - -

    Definition at line 6798 of file fplot_core.f90.

    - -
    -
    - -

    ◆ find_triangle()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_2d::find_triangle
    -
    - -

    Finds the triangle that contains the specified point.

    -
    Syntax
    integer(int32) function find_triangle(class(delaunay_tri_2d) this, real(real64) x, real(real64) y)
    -
    -
    Parameters
    - - - - -
    [in]thisThe delaunay_tri_2d object.
    [in]xThe x-coordinate of the point.
    [in]yThe y-coordinate of the point.
    -
    -
    -
    Returns
    Returns the index of the triangle containing the specified point. If no triangle contains the specified point, a value of -1 is returned.
    - -

    Definition at line 6864 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_indices()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_2d::get_indices
    -
    - -

    Gets a list of the indices of each triangle vertex.

    -
    Syntax
    integer(int32)(:,:) function get_indices(class(delaunay_tri_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe delaunay_tri_2d object.
    -
    -
    -
    Returns
    An N-by-3 matrix with each column containing the index of the vertex of each triangle where N is the number of triangles.
    - -

    Definition at line 6849 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_point_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_2d::get_point_count
    -
    - -

    Gets the number of points in the triangulation.

    -
    Syntax
    integer(int32) function get_point_count(class(delaunay_tri_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe delaunay_tri_2d object.
    -
    -
    -
    Returns
    The number of points in the triangulation.
    - -

    Definition at line 6808 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_points_x()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_2d::get_points_x
    -
    - -

    Gets the x-coordinates of each point.

    -
    Syntax
    real(real64)(:) function get_points_x(class(delaunay_tri_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe delaunay_tri_2d object.
    -
    -
    -
    Returns
    An array of the x-coordinates of each point.
    - -

    Definition at line 6828 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_points_y()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_2d::get_points_y
    -
    - -

    Gets the y-coordinates of each point.

    -
    Syntax
    real(real64)(:) function get_points_y(class(delaunay_tri_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe delaunay_tri_2d object.
    -
    -
    -
    Returns
    An array of the y-coordinates of each point.
    - -

    Definition at line 6838 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_triangle_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_2d::get_triangle_count
    -
    - -

    Gets the number of triangles in the triangulation.

    -
    Syntax
    integer(int32) function get_triangle_count(class(delaunay_tri_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe delaunay_tri_2d object.
    -
    -
    -
    Returns
    The number of triangles in the triangulation.
    - -

    Definition at line 6818 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_indices

    - -
    -
    - - - - -
    integer(int32), dimension(:,:), allocatable fplot_core::delaunay_tri_2d::m_indices
    -
    - -

    A 3-column matrix containing the indices of each triangle's vertex.

    - -

    Definition at line 6773 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_x

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::delaunay_tri_2d::m_x
    -
    -private
    -
    - -

    An array of the x-coordinates of each point.

    - -

    Definition at line 6768 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_y

    - -
    -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::delaunay_tri_2d::m_y
    -
    - -

    An array of the y-coordinates of each point.

    - -

    Definition at line 6770 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1delaunay__tri__2d.js b/docs/html/structfplot__core_1_1delaunay__tri__2d.js deleted file mode 100644 index 086d215..0000000 --- a/docs/html/structfplot__core_1_1delaunay__tri__2d.js +++ /dev/null @@ -1,13 +0,0 @@ -var structfplot__core_1_1delaunay__tri__2d = -[ - [ "create", "structfplot__core_1_1delaunay__tri__2d.html#aba77dca84f08dbfb2b115d9d9fdd9aba", null ], - [ "find_triangle", "structfplot__core_1_1delaunay__tri__2d.html#aa0c1780f8231cd2abf87151a1914a318", null ], - [ "get_indices", "structfplot__core_1_1delaunay__tri__2d.html#a2a39c08bcaa4819d25684d8dbb3ee508", null ], - [ "get_point_count", "structfplot__core_1_1delaunay__tri__2d.html#ae0e68fb12ac6ce70da9bf03a4f77778d", null ], - [ "get_points_x", "structfplot__core_1_1delaunay__tri__2d.html#abdaa5a6e385627ba0c0525c4b9d7427b", null ], - [ "get_points_y", "structfplot__core_1_1delaunay__tri__2d.html#acaac501f173450d34594d3b6f36caa51", null ], - [ "get_triangle_count", "structfplot__core_1_1delaunay__tri__2d.html#a74c3e196311190b91f8889f756edf630", null ], - [ "m_indices", "structfplot__core_1_1delaunay__tri__2d.html#abe18770a04e61374f94b679151c47314", null ], - [ "m_x", "structfplot__core_1_1delaunay__tri__2d.html#aaf1c5b0b6f8d17889152d7dc068da75e", null ], - [ "m_y", "structfplot__core_1_1delaunay__tri__2d.html#a854c12c20c36fc7e9a9dee2e1702bae7", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1delaunay__tri__2d.png b/docs/html/structfplot__core_1_1delaunay__tri__2d.png deleted file mode 100644 index fd462a32e99dba7efa5a2616cb69db2555c77aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^hk-bNgBeIp4mKclgsiC1}^q2`(;qYY!?Y39Sbca?Vj_Z+|Y{ zBK}y*lm?Tm9wtq&%Zl?Kk#?ge88zRQLY9zsKFB>Ax@iJm1)HBD8kKOPRxeysSh;1$Qo6 z+T;6T`{ch(RyA{;H#oXH5tHIkQu+ucs*ILQxwMy+!G1M6!=0G=hKC<_*dLKks8G5i z_ekHMXCDj0e#d4;hDW9n3<_~1Fdi%|I``B4>j}%}@}fqb_oA8`RUVs4co@Y=J9~BK z%B~Rf+;{0{W%uWYOL9w9GPfFO%vWHW^ycM-^h6Kg46PlTpZ)LJ*Ejw4lO^*0#@8#~ zX7uLtYJD)d$##3svYkg0rf*0yFV(pCYU`aV$)eYPTv@&KDjlXeh5qG zn(48vNW%Pmt=s&AH@o8Ggnvu(Y(3Jp@W!;`et$z;ck#T9TXlY0huQD;(huKeg*S*j zWp#eM=eGB?->)hQz6HIvsd#FUX5fA%*}{fDH~i&y)w?OHUhmVNntEgJmg?uf&dgfh z_$l^t?%NA5y`S5&t5k-@pZ(I6XlLav?>Wh4?bnW57sMyGUU_)Bl84#zUI5(l{%v!L d_ig{jxF>SataBfFmjV+mgQu&X%Q~loCIEpWcn1Ig diff --git a/docs/html/structfplot__core_1_1delaunay__tri__surface-members.html b/docs/html/structfplot__core_1_1delaunay__tri__surface-members.html deleted file mode 100644 index 391552e..0000000 --- a/docs/html/structfplot__core_1_1delaunay__tri__surface-members.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/structfplot__core_1_1delaunay__tri__surface.html b/docs/html/structfplot__core_1_1delaunay__tri__surface.html deleted file mode 100644 index f3f2c65..0000000 --- a/docs/html/structfplot__core_1_1delaunay__tri__surface.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - - -fplot: fplot_core::delaunay_tri_surface Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::delaunay_tri_surface Type Reference
    -
    -
    - -

    Provides a type describing a triangulated surface. - More...

    -
    -Inheritance diagram for fplot_core::delaunay_tri_surface:
    -
    -
    - - -fplot_core::delaunay_tri_2d - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public define_function_values dts_define_fcn
     Defines the function values that correspond to the x and y data points.
     
    procedure, public get_points_z dts_get_z
     Gets the z-coordinates of each point.
     
    generic, public evaluate dts_interp_1
     Evaluates the function at the requested point by means of linear interpolation.
     
    generic, public evaluate dts_interp_2
     Evaluates the function at the requested point by means of linear interpolation.
     
    procedure dts_interp_1 dts_interp_1
     
    procedure dts_interp_2 dts_interp_2
     
    - Public Member Functions inherited from fplot_core::delaunay_tri_2d
    procedure, public create d2d_init
     Creates an unconstrained 2D Delaunay triangulation given a set of x-y points.
     
    procedure, public get_point_count d2d_get_pt_count
     Gets the number of points in the triangulation.
     
    procedure, public get_triangle_count d2d_get_tri_count
     Gets the number of triangles in the triangulation.
     
    procedure, public get_points_x d2d_get_x_pts
     Gets the x-coordinates of each point.
     
    procedure, public get_points_y d2d_get_y_pts
     Gets the y-coordinates of each point.
     
    procedure, public get_indices d2d_get_tris
     Gets a list of the indices of each triangle vertex.
     
    procedure, public find_triangle d2d_get_tri_with_pt
     Finds the triangle that contains the specified point.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:), allocatable m_z
     An array of the z-coordinates of each point.
     
    - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::delaunay_tri_2d
    real(real64), dimension(:), allocatable m_y
     An array of the y-coordinates of each point.
     
    integer(int32), dimension(:,:), allocatable m_indices
     A 3-column matrix containing the indices of each triangle's vertex.
     
    -

    Detailed Description

    -

    Provides a type describing a triangulated surface.

    - -

    Definition at line 7032 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_function_values()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_surface::define_function_values
    -
    - -

    Defines the function values that correspond to the x and y data points.

    -
    Syntax
    subroutine define_function_values(class(delaunay_tri_surface) this, real(real64) z(:), class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe delaunay_tri_surface object.
    [in]zAn N-element array containing the function values for each x and y coordinate. Notice, the x and y coordinates must already be defined prior to calling this routine.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if z is not the same size as the number of x-y data points.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    • PLOT_INVALID_OPERATION_ERROR: Occurs if the x-y point data has not been defined.
    • -
    -
    -
    -
    - -

    Definition at line 7061 of file fplot_core.f90.

    - -
    -
    - -

    ◆ dts_interp_1()

    - -
    -
    - - - - -
    procedure fplot_core::delaunay_tri_surface::dts_interp_1
    -
    - -

    Definition at line 7088 of file fplot_core.f90.

    - -
    -
    - -

    ◆ dts_interp_2()

    - -
    -
    - - - - -
    procedure fplot_core::delaunay_tri_surface::dts_interp_2
    -
    - -

    Definition at line 7089 of file fplot_core.f90.

    - -
    -
    - -

    ◆ evaluate() [1/2]

    - -
    -
    - - - - -
    generic, public fplot_core::delaunay_tri_surface::evaluate
    -
    - -

    Evaluates the function at the requested point by means of linear interpolation.

    -
    Syntax
    real(real64) function evaluate(class(delaunay_tri_surface) this, real(real64) x, real(real64) y)
    -
    -
    Parameters
    - - - - -
    [in]thisThe delaunay_tri_surface object.
    [in]xThe x-coordinate at which to evaluate the function.
    [in]yThe y-coordinate at which to evaluate the function.
    -
    -
    -
    Returns
    The function value. If the point (x, y) does not lie within the range of defined values, then a value of NaN is returned.
    - -

    Definition at line 7086 of file fplot_core.f90.

    - -
    -
    - -

    ◆ evaluate() [2/2]

    - -
    -
    - - - - -
    generic, public fplot_core::delaunay_tri_surface::evaluate
    -
    - -

    Evaluates the function at the requested point by means of linear interpolation.

    -
    Syntax
    real(real64) function evaluate(class(delaunay_tri_surface) this, real(real64) x, real(real64) y)
    -
    -
    Parameters
    - - - - -
    [in]thisThe delaunay_tri_surface object.
    [in]xThe x-coordinate at which to evaluate the function.
    [in]yThe y-coordinate at which to evaluate the function.
    -
    -
    -
    Returns
    The function value. If the point (x, y) does not lie within the range of defined values, then a value of NaN is returned.
    - -

    Definition at line 7086 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_points_z()

    - -
    -
    - - - - -
    procedure, public fplot_core::delaunay_tri_surface::get_points_z
    -
    - -

    Gets the z-coordinates of each point.

    -
    Syntax
    real(real64)(:) function get_points_x(class(delaunay_tri_surface) this)
    -
    -
    Parameters
    - - -
    [in]thisThe delaunay_tri_2d object.
    -
    -
    -
    Returns
    An array of the z-coordinates of each point.
    - -

    Definition at line 7071 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_z

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::delaunay_tri_surface::m_z
    -
    -private
    -
    - -

    An array of the z-coordinates of each point.

    - -

    Definition at line 7035 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1delaunay__tri__surface.js b/docs/html/structfplot__core_1_1delaunay__tri__surface.js deleted file mode 100644 index 0d9044a..0000000 --- a/docs/html/structfplot__core_1_1delaunay__tri__surface.js +++ /dev/null @@ -1,8 +0,0 @@ -var structfplot__core_1_1delaunay__tri__surface = -[ - [ "define_function_values", "structfplot__core_1_1delaunay__tri__surface.html#a79ce4c8ed7d243417890fc037f474170", null ], - [ "evaluate", "structfplot__core_1_1delaunay__tri__surface.html#a7f77f147b8d68123f4a782ffa7bdd0be", null ], - [ "evaluate", "structfplot__core_1_1delaunay__tri__surface.html#aaed4c47865165797dab80d6fd11762b8", null ], - [ "get_points_z", "structfplot__core_1_1delaunay__tri__surface.html#a87a65ab9d6e614217b738e40bcca3688", null ], - [ "m_z", "structfplot__core_1_1delaunay__tri__surface.html#a0961e14a2d4ed0d9a7d75e2e2f5619e3", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1delaunay__tri__surface.png b/docs/html/structfplot__core_1_1delaunay__tri__surface.png deleted file mode 100644 index 8f68888b47c36a8c36517b76060b02f9962d7631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 775 zcmV+i1Ni)jP)vTJr#LVva2S`&=-}Ys|Ns9r%~qrU000SeQchC<|NsC0|NsC0Hv*f~0007# zNkl3&cjKD`L}y-u{749lfNP(ZH9IDFBrVsHxf{z95YnGNYd&%=fSC^ z)_L&K@h-!a^H6t{c3&!+OwmJZUs`uzYiVEm`x6qY^lV=`|2ZJZtNJj~IfmtxG%`w( z*R-Xva{YF&{~!+^$2nji$y;bJkYs-i29oTrC&M&N)4c@%e^(CxxVe6S;qkaX#1Ak$ z5pECh3k;(#0l@#D!2kgLH5dS(zXk&U^w(ejfc_c`0MK890RZ}IFaSV*4F&+{ufYHS z{WTZ>puYwK0QA>j0DzYYA%vR?L6UB*!5~TfH5eqRzcNEeFq!Hc-^F!l1CrEI-kl^_ zC5B>7Ck9Ds>6kAvJiF{XbHQD-{4eO^c)QJ$%E$A{w5}c{&(>Hto)=qZdDgskHP|hr z=q3-Vw|H&0;&I{E%!yZRD{r2$bX^DYWBEQTgSP{d%pj?j!Bk#sB0-c%N}j?5A)#FnwNkYiB1002ovPDHLk FV1mh8YXSfO diff --git a/docs/html/structfplot__core_1_1earth__colormap-members.html b/docs/html/structfplot__core_1_1earth__colormap-members.html deleted file mode 100644 index a839501..0000000 --- a/docs/html/structfplot__core_1_1earth__colormap-members.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::earth_colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1earth__colormap.html b/docs/html/structfplot__core_1_1earth__colormap.html deleted file mode 100644 index 33bb3ab..0000000 --- a/docs/html/structfplot__core_1_1earth__colormap.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - -fplot: fplot_core::earth_colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::earth_colormap Type Reference
    -
    -
    - -

    Defines an earthy-colored colormap. - More...

    -
    -Inheritance diagram for fplot_core::earth_colormap:
    -
    -
    - - -fplot_core::colormap -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_color_string ecm_get_clr
     Gets the GNUPLOT string defining the color distribution.
     
    - Public Member Functions inherited from fplot_core::colormap
    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::colormap
    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    -

    Detailed Description

    -

    Defines an earthy-colored colormap.

    - -

    Definition at line 2587 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::earth_colormap::get_color_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution.

    -
    Syntax
    character(len = :) function, allocatable get_color_string(class(earth_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe earth_colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::colormap.

    - -

    Definition at line 2598 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1earth__colormap.js b/docs/html/structfplot__core_1_1earth__colormap.js deleted file mode 100644 index e4c3b3b..0000000 --- a/docs/html/structfplot__core_1_1earth__colormap.js +++ /dev/null @@ -1,4 +0,0 @@ -var structfplot__core_1_1earth__colormap = -[ - [ "get_color_string", "structfplot__core_1_1earth__colormap.html#ab54eea4aa31fdbb7368e0245143200ea", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1earth__colormap.png b/docs/html/structfplot__core_1_1earth__colormap.png deleted file mode 100644 index b7973f9201f8addb97676051df78ffcb058709f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^i-EXpx~DOq$`n&M$pMpSw;g+w3(A=k_QalVE3`sM3B+*7H)I^`s?pd5;TByI0k( zvVOzlU&YCeKqNxKAar;GUt+X^BrsYM0)Z=05*dGqb7d;o&P*i-arEWH&$e zpRJ!&vGdHt>@S^H;#>qP&IQ_Utra+VVPRE!^Yv^cyVn+f?-rfu-2do?r~TeO>(+la zDs#U5`hG4sw92}4?JLvmi?8(Vy4INf?|jTZnR_0#;uR+i=e~cpdQ!;Sl2`09o}YNq zgZ+=?T2Fc+u|wJOR-yZ(EuYJJ43BMOY)G$UJn*2V@$qZZeNV(K_KCJn|HJ0KKAWL} zshowu`W**D*&RWKH#?LWZWOvRY+c%bN8@^ntR;g^>UCG{;bt_Qz@RlA${WPV&ao5Y_t%MY zJ%hG4m!6sTx#jbo*B^>zDogIz_9@6kP17{S$2VxZ^6_7sXVf4|jgPar^bZ$~Ts?fFUy#7&6%r(+i`oUyXZiwLkRw zwewP*^HRTCUY89{e6z>YGwxZU`=lC~Ze`DZmM}N(kxlL?%wc#C8OLB?5&z&vRj>X} z*1r6s4^{Ucy!cv*Vcr33p2rzF|5qk+DDv<%b)2}cV{u1^Y`KWw#?4l3u4P-ze(s0HN(LAlvYo6};746fnBmt9&Ow5|*T?>^| zPu#M4TpW?#XJzHN@}cS0k~N!W$MP!$1@o8~=bl?A+imT;>ZoDv^Ig4_-B;Z1m7EE- zd2(ZA!?%^wWp7{E{k$-FJ-_Vl=Nq5zsFYjXb$exY?EGCWR}cE{eYAL6Bsj40U)}m+ zDI!=Yu(tHUjI4z}PIPv}JiaC)F5~L*uSM5ga3W)&yP%-;I}N3z=WivPIFdi}_b4q} VdSvarhrm3=;OXk;vd$@?2>_FX#VG&) diff --git a/docs/html/structfplot__core_1_1filled__plot__data-members.html b/docs/html/structfplot__core_1_1filled__plot__data-members.html deleted file mode 100644 index cf3b50a..0000000 --- a/docs/html/structfplot__core_1_1filled__plot__data-members.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1filled__plot__data.html b/docs/html/structfplot__core_1_1filled__plot__data.html deleted file mode 100644 index 0871c85..0000000 --- a/docs/html/structfplot__core_1_1filled__plot__data.html +++ /dev/null @@ -1,424 +0,0 @@ - - - - - - - -fplot: fplot_core::filled_plot_data Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::filled_plot_data Type Reference
    -
    -
    - -

    Defines a two-dimensional filled plot data set. - More...

    -
    -Inheritance diagram for fplot_core::filled_plot_data:
    -
    -
    - - -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_axes_string fpd_get_axes_cmd
     Gets the GNUPLOT command string defining which axes the data is to be plotted against.
     
    procedure, public get_draw_against_y2 fpd_get_draw_against_y2
     Gets a value determining if the data should be plotted against the secondary y-axis.
     
    procedure, public set_draw_against_y2 fpd_set_draw_against_y2
     Sets a value determining if the data should be plotted against the secondary y-axis.
     
    procedure, public get_command_string fpd_get_cmd
     Gets the GNUPLOT command string to represent this filled_plot_data object.
     
    procedure, public get_data_string fpd_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public define_data fpd_define_data
     Defines the data set.
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - -

    -Public Attributes

    real(real64), dimension(:,:), allocatable m_data
     The data set (column 1 = x, column 2 = y, column 3 = constraint y)
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - -

    -Private Attributes

    logical m_usey2 = .false.
     Plot against the secondary y-axis.
     
    -

    Detailed Description

    -

    Defines a two-dimensional filled plot data set.

    - -

    Definition at line 7586 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::filled_plot_data::define_data
    -
    - -

    Defines the data set.

    -
    Syntax
    subroutine define_data(class(filled_plot_data) this, real(real64) x(:), real(real64) y(:), real(real64) yc(:))
    -
    -
    Parameters
    - - - - - - -
    [in,out]thisThe filled_plot_data object.
    [in]xAn N-element array containing the x coordinate data.
    [in]yAn N-element array containing the y coordinate data.
    [in]ycAn N-element array containing the constraining curve y coordinate data.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if x and y are not the same size.
    • -
    -
    -
    -
    - -

    Definition at line 7669 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_axes_string()

    - -
    -
    - - - - -
    procedure, public fplot_core::filled_plot_data::get_axes_string
    -
    - -

    Gets the GNUPLOT command string defining which axes the data is to be plotted against.

    -
    Syntax
    character(len = :) function, allocatable get_axis_string(class(filled_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe filled_plot_data object.
    -
    -
    -
    Returns
    The command string.
    - -

    Definition at line 7603 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::filled_plot_data::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this filled_plot_data object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(filled_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe filled_plot_data object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 7638 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::filled_plot_data::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    -
    Syntax
    character(len = :) function, allocatable get_data_string(class(filled_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe filled_plot_data object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 7649 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_against_y2()

    - -
    -
    - - - - -
    procedure, public fplot_core::filled_plot_data::get_draw_against_y2
    -
    - -

    Gets a value determining if the data should be plotted against the secondary y-axis.

    -
    Syntax
    pure logical function get_draw_against_y2(class(filled_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe filled_plot_data object.
    -
    -
    -
    Returns
    Returns true if the data should be plotted against the secondary y-axis; else, false to plot against the primary y-axis.
    - -

    Definition at line 7615 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_against_y2()

    - -
    -
    - - - - -
    procedure, public fplot_core::filled_plot_data::set_draw_against_y2
    -
    - -

    Sets a value determining if the data should be plotted against the secondary y-axis.

    -
    Syntax
    subroutine set_draw_against_y2(class(filled_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe filled_plot_data object.
    [in]xSet to true if the data should be plotted against the secondary y-axis; else, false to plot against the primary y-axis.
    -
    -
    - -

    Definition at line 7627 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_data

    - -
    -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::filled_plot_data::m_data
    -
    - -

    The data set (column 1 = x, column 2 = y, column 3 = constraint y)

    - -

    Definition at line 7591 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_usey2

    - -
    -
    - - - - - -
    - - - - -
    logical fplot_core::filled_plot_data::m_usey2 = .false.
    -
    -private
    -
    - -

    Plot against the secondary y-axis.

    - -

    Definition at line 7589 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1filled__plot__data.js b/docs/html/structfplot__core_1_1filled__plot__data.js deleted file mode 100644 index 21d9f8d..0000000 --- a/docs/html/structfplot__core_1_1filled__plot__data.js +++ /dev/null @@ -1,11 +0,0 @@ -var structfplot__core_1_1filled__plot__data = -[ - [ "define_data", "structfplot__core_1_1filled__plot__data.html#a3913a71653b75380dc1012c5006d773b", null ], - [ "get_axes_string", "structfplot__core_1_1filled__plot__data.html#a032e1917321920d2a04cf03b03f67946", null ], - [ "get_command_string", "structfplot__core_1_1filled__plot__data.html#a5a173b2b8171077de2d77ee10a24904b", null ], - [ "get_data_string", "structfplot__core_1_1filled__plot__data.html#a1a29d4771e4255a27dc5236407d14144", null ], - [ "get_draw_against_y2", "structfplot__core_1_1filled__plot__data.html#a2946d6a05362b47c7f01603edf4a6690", null ], - [ "set_draw_against_y2", "structfplot__core_1_1filled__plot__data.html#aecc19b2be5696b2210ea1c7b7bd58a58", null ], - [ "m_data", "structfplot__core_1_1filled__plot__data.html#a0237475fa98251222f26abe67f43cf61", null ], - [ "m_usey2", "structfplot__core_1_1filled__plot__data.html#ae7a3febf099878ab798ce2abf7eba1d9", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1filled__plot__data.png b/docs/html/structfplot__core_1_1filled__plot__data.png deleted file mode 100644 index dea4e258688c000edd76c4a7f9c358731a012d67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1225 zcmeAS@N?(olHy`uVBq!ia0vp^8-Vx#2Q!eI>@B$#NJ$6ygt-3y{~ySF@#br3|Doj; z2ATyD)6cwk@ZbSZ-1KbN5}+JsNswPK1CS2}=1jA%Ffg!$c)B=-R4~4s`+D7D1s=9` z{*{mZ&ab$=L?x!^?aFd~?eHF_gKEOlFYG@e@z_H^HB%-gVv2Om?ty2yn~LmA9@)2z+if1(yx7Cw%Wl`_G3A;oCS-pae?kre&;eKe)jRlnpCa1qu`nTxA>(3KE%=z)X)%=ov z_>TuSHrzaXciIp4>K&C6`TaT{y`6tM^3^%bKsK*cw_e)ceVhEf`HJ=TA1)PDj(lAO z)>oq`NKn#QaZW4C#m{Blt`B0U=WsLP&S>oJpNGW8eDF^M7k9Swk`;Av*4_1Qd4wNcf8O>%X5TlJO!3uR`8hKu-~Dn|x3HGKJo=IR z+lRkG_0K(fHzgwZ-dl}Q$@zz$%~N?>^mhKcZySG44e@;SBch^e^SS=B^Otx99j}i{ z^!%j?a_J*rXq*hTI3~f)bfAU(fJcwop9-Edn^_+&m+L%!*z$J@!-k{8g#svy&dmn~ zDd!@U-eyn$gF<7?A;l*fmj-`PdC640a{BZ;^Xty*9CCdkfSD-dmzh0&nzH$mP{jSm zdtIWDQ-+=2+e78y_x2xORxtYtI8cgj?@d4Z&bm6qdB^(8{H^ixr4JSVxV2j)Mx}P? zA!++JC-ZLI5o#A*w|oA(hk4!-Zyx?K+@^hJ&r0^?EfQ3V*vO!p$JT97`CA50~gRQ|{CxyiQG*!K; z9&X@SV{9(>YUaP5dC``0f>zzS_bA=`ZAUaK- zcfr%bEfvObesUo@c4q&+@w%eVM{%ug>y~YIRxjZbdoPy5y;t{6TFL%k56!J6{2}T2 zwx8lmU)iQA{P~r`ecpI`YxkBs|C*JDZd>_&2z|)E?Z{W#nnLdx?;rkhUH3kGzEJj= zuu{D_LT3*@`DmH*ZtlO!GynbkTkvu9q07H7%XVolEt$IK5Wo0;d#yP^Ui(GCeu=SI jIz^|Ft6kub!ym?Z_pVK=VM|H`7CH=`u6{1-oD!M<$z@Ss diff --git a/docs/html/structfplot__core_1_1grey__colormap-members.html b/docs/html/structfplot__core_1_1grey__colormap-members.html deleted file mode 100644 index b8ec19b..0000000 --- a/docs/html/structfplot__core_1_1grey__colormap-members.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::grey_colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1grey__colormap.html b/docs/html/structfplot__core_1_1grey__colormap.html deleted file mode 100644 index 18c11ac..0000000 --- a/docs/html/structfplot__core_1_1grey__colormap.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - -fplot: fplot_core::grey_colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::grey_colormap Type Reference
    -
    -
    - -

    Defines a grey-scaled colormap. - More...

    -
    -Inheritance diagram for fplot_core::grey_colormap:
    -
    -
    - - -fplot_core::colormap -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_color_string gcm_get_clr
     Gets the GNUPLOT string defining the color distribution.
     
    - Public Member Functions inherited from fplot_core::colormap
    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::colormap
    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    -

    Detailed Description

    -

    Defines a grey-scaled colormap.

    - -

    Definition at line 2571 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::grey_colormap::get_color_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution.

    -
    Syntax
    character(len = :) function, allocatable get_color_string(class(grey_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe grey_colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::colormap.

    - -

    Definition at line 2582 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1grey__colormap.js b/docs/html/structfplot__core_1_1grey__colormap.js deleted file mode 100644 index b00f510..0000000 --- a/docs/html/structfplot__core_1_1grey__colormap.js +++ /dev/null @@ -1,4 +0,0 @@ -var structfplot__core_1_1grey__colormap = -[ - [ "get_color_string", "structfplot__core_1_1grey__colormap.html#aec585307d1ab8f9fb7a039ac9695f58f", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1grey__colormap.png b/docs/html/structfplot__core_1_1grey__colormap.png deleted file mode 100644 index e5ad9b81a189e98b9b1e855e7d960b722fe70fb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$TgBeJMzY}l)QqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GWXo-U3d6^w7^zU^CWz{BeA zx8&6O|3|h@Xscmjyu5eft1dyEZHFfuc@tmp{_mLslb`IFq2QTi;5g~Z1@V%+-Co~4 zK5?-xoiAPe-Jf;yp7mUlQVuRy5UqBhH8Upizu#u5^^Y?>wGJ&`TI#0$v4pMp$@7lo zI(z0OrJa(~c$+HH$=vi)`S$V&C90t1j~GvUq*2V9wNcC57`Ue$9XKDgC|MOOHpQ2TPsH<0hpP@=UkW^_ZmGGmY=* zTdqk@cwp}QAok_n?@q=B_e#bCXU^#TsPfIT*!|#ke%|4itZTa&9ojjW8rXzc7Ge{<7JP9|JU1&X)~n2vZ8w%sd7M#r zLFAsF;pD!T8vd@&vZl0lFZ4`1zA?eJX7i1{6kqju++yXYuB)7!rOrD2zU#q&PvK2- zw^<0TG2`;QX0w&O+WXG^X4`|mt2ewl*sOQX+AROpw(ixce6h8AyQj|ApCt3_g=IMF zb-x?+@sswPo7|-G(_%ZT=coGQCY6;3fet?$4fKXO8-v_aRt96^-49-y?tJ*BDS!V? z-sR$3^w=0=i3$u@X#KEtd_HHkq=n$bN<&9ML0&ZtrA3OIyUvEABE)yvJ}`*~xXqsl&G~9OYpfzn(z%AEwPoJ8|MDm zUA - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::hot_colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1hot__colormap.html b/docs/html/structfplot__core_1_1hot__colormap.html deleted file mode 100644 index b288dca..0000000 --- a/docs/html/structfplot__core_1_1hot__colormap.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - -fplot: fplot_core::hot_colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::hot_colormap Type Reference
    -
    -
    - -

    Defines a colormap consisting of "hot" colors. - More...

    -
    -Inheritance diagram for fplot_core::hot_colormap:
    -
    -
    - - -fplot_core::colormap -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_color_string hcm_get_clr
     Gets the GNUPLOT string defining the color distribution.
     
    - Public Member Functions inherited from fplot_core::colormap
    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::colormap
    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    -

    Detailed Description

    -

    Defines a colormap consisting of "hot" colors.

    - -

    Definition at line 2523 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::hot_colormap::get_color_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution.

    -
    Syntax
    character(len = :) function, allocatable get_color_string(class(hot_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe hot_colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::colormap.

    - -

    Definition at line 2534 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1hot__colormap.js b/docs/html/structfplot__core_1_1hot__colormap.js deleted file mode 100644 index 2fc8ca3..0000000 --- a/docs/html/structfplot__core_1_1hot__colormap.js +++ /dev/null @@ -1,4 +0,0 @@ -var structfplot__core_1_1hot__colormap = -[ - [ "get_color_string", "structfplot__core_1_1hot__colormap.html#af5a6ff4e313cf7c2f2b0091e8d25396b", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1hot__colormap.png b/docs/html/structfplot__core_1_1hot__colormap.png deleted file mode 100644 index dd0fe1c57673dc47774748eeb364f64f8d7d8df4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^(}B2ygBeKPJ=n<#q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#NtjJzX3_Dj46+O4y=UBJsc-|F^oAg9|kIKpO$F!F|&DpEw z8D25*SMkFazb1wo{tealTvhRQYTH|{%gcIu?q9c^bN+cE$Es!i!M8i+9$5T$)}6Y( zN{waH6Z>Ko%dV^z41KUM{HOQrqpC|~rQT1DzU6Y~y=l$8PqT#fKifL_-M#gP+5T?W zXLkPM?ypz3oawI9`ITdJE{OlvMjo50`|)+LdnZU$XeAW7D>hM%)6=ZKuNOBv{Qe~`(w>!(cH{B@Sf z-h7{OSx3 z=ACrvao?|7)qTIeZhc<5bKk7Is*C-p@29@q{`UAYOTWJ_-yQdl3!hZd+I)ZKBU7>O z@9uhDntkVis^|9NtKO6TDLz#7tUKgA>5mQ70>ewQl;h-?HP(ktpE=`SF>~h6$i0`8 zcFg)U_w|Xzd$?bpjdS(#k2`OEY=T+dtrI_L?;ieHBiFVd>sR{z_~*LX{@OmPr(E_< z+8RIkwv5g5HJ48txUajI{c81|vev*QGvb1?*PB&;c9}eL>zn`o^5R~G#;$z-%X$67 z;>p*yT=9*|b>08|YRF0Uucc2d-(9~x?|NdbY3%1k@~7oipZXaZceVd)@tj}9m;0~B z>8GWA4_-B=qW5U*oqaQBwr~HW2XyRT)4n}t&R8h|i9apVXU?3zJlsq3>v4JBkFzpj TBOkc}^9qBftDnm{r-UW|?;z4e diff --git a/docs/html/structfplot__core_1_1latex__terminal-members.html b/docs/html/structfplot__core_1_1latex__terminal-members.html deleted file mode 100644 index 796f020..0000000 --- a/docs/html/structfplot__core_1_1latex__terminal-members.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::latex_terminal Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1latex__terminal.html b/docs/html/structfplot__core_1_1latex__terminal.html deleted file mode 100644 index 94174b3..0000000 --- a/docs/html/structfplot__core_1_1latex__terminal.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - - -fplot: fplot_core::latex_terminal Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::latex_terminal Type Reference
    -
    -
    - -

    Defines a GNUPLOT LATEX terminal object. - More...

    -
    -Inheritance diagram for fplot_core::latex_terminal:
    -
    -
    - - -fplot_core::terminal -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_filename tex_get_filename
     Gets the filename for the output LATEX file.
     
    procedure, public set_filename tex_set_filename
     Sets the filename for the output LATEX file.
     
    procedure, public get_id_string tex_get_term_string
     Retrieves a GNUPLOT terminal identifier string.
     
    procedure, public get_command_string tex_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    - Public Member Functions inherited from fplot_core::terminal
    procedure, public get_window_width term_get_window_width
     Gets the width of the plot window.
     
    procedure, public set_window_width term_set_window_width
     Sets the width of the plot window.
     
    procedure, public get_window_height term_get_window_height
     Gets the height of the plot window.
     
    procedure, public set_window_height term_set_window_height
     Sets the height of the plot window.
     
    procedure, public get_command_string term_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    procedure, public get_plot_window_number term_get_plot_window_number
     Gets the targeted plot window number.
     
    procedure, public set_plot_window_number term_set_plot_window_number
     Sets the targeted plot window number.
     
    procedure, public get_title term_get_title
     Gets the plot window's title.
     
    procedure, public set_title term_set_title
     Sets the plot window's title.
     
    procedure, public get_font_name term_get_font_name
     Gets the name of the font used for text displayed by the graph.
     
    procedure, public set_font_name term_set_font_name
     Sets the name of the font used for text displayed by the graph.
     
    procedure, public get_font_size term_get_font_size
     Gets the size of the font used by the graph.
     
    procedure, public set_font_size term_set_font_size
     Sets the size of the font used by the graph.
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character(len=gnuplot_max_path_lengthm_fname = "default.tex"
     The filename of the PNG file to write.
     
    - Public Attributes inherited from fplot_core::terminal
    integer(int32) m_windowwidth = GNUPLOT_DEFAULT_WINDOW_WIDTH
     The window width, in pixels.
     
    integer(int32) m_termid = 0
     The plot window number.
     
    character(len=gnuplot_max_label_lengthm_title = ""
     The plot window title.
     
    logical m_hastitle = .false.
     Determines if a plot title is defined.
     
    character(len=gnuplot_max_label_lengthm_fontname = GNUPLOT_DEFAULT_FONTNAME
     The font used by the graph.
     
    integer(int32) m_fontsize = GNUPLOT_DEFAULT_FONT_SIZE
     The size of the font used by the graph.
     
    - - - - -

    -Private Attributes

    character(len=14) m_id = "epslatex color"
     The terminal ID string.
     
    -

    Detailed Description

    -

    Defines a GNUPLOT LATEX terminal object.

    - -

    Definition at line 1599 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::latex_terminal::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to establish appropriate parameters.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(latex_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The GNUPLOT command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 1646 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_filename()

    - -
    -
    - - - - -
    procedure, public fplot_core::latex_terminal::get_filename
    -
    - -

    Gets the filename for the output LATEX file.

    -
    Syntax
    character(len = :) function, allocatable get_filename(class(latex_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe latex_terminal object.
    -
    -
    -
    Returns
    The filename, including the file extension (.tex).
    - -

    Definition at line 1615 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::latex_terminal::get_id_string
    -
    -virtual
    -
    - -

    Retrieves a GNUPLOT terminal identifier string.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(latex_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe latex_terminal object.
    -
    -
    -
    Returns
    The string.
    - -

    Implements fplot_core::terminal.

    - -

    Definition at line 1635 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_filename()

    - -
    -
    - - - - -
    procedure, public fplot_core::latex_terminal::set_filename
    -
    - -

    Sets the filename for the output LATEX file.

    -
    Syntax
    subroutine set_filename(class(latex_terminal) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe latex_terminal object.
    [in]txtThe filename, including the file extension (.tex).
    -
    -
    - -

    Definition at line 1625 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_fname

    - -
    -
    - - - - -
    character(len = gnuplot_max_path_length) fplot_core::latex_terminal::m_fname = "default.tex"
    -
    - -

    The filename of the PNG file to write.

    - -

    Definition at line 1604 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_id

    - -
    -
    - - - - - -
    - - - - -
    character(len = 14) fplot_core::latex_terminal::m_id = "epslatex color"
    -
    -private
    -
    - -

    The terminal ID string.

    - -

    Definition at line 1602 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1latex__terminal.js b/docs/html/structfplot__core_1_1latex__terminal.js deleted file mode 100644 index 7d589d5..0000000 --- a/docs/html/structfplot__core_1_1latex__terminal.js +++ /dev/null @@ -1,9 +0,0 @@ -var structfplot__core_1_1latex__terminal = -[ - [ "get_command_string", "structfplot__core_1_1latex__terminal.html#a7b000e38ed8bb89bdeb10077855714a6", null ], - [ "get_filename", "structfplot__core_1_1latex__terminal.html#a4a9465f48c206d9953fd9540b9d28129", null ], - [ "get_id_string", "structfplot__core_1_1latex__terminal.html#ae59d44e616fbad4e93bf1fc7159a44d2", null ], - [ "set_filename", "structfplot__core_1_1latex__terminal.html#a599576bce43bdcbead02d4958d6646ea", null ], - [ "m_fname", "structfplot__core_1_1latex__terminal.html#a13910c1c0e215397ebc3125423f2ad3b", null ], - [ "m_id", "structfplot__core_1_1latex__terminal.html#a3f10978cef31279b35dda56bdb5bca48", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1latex__terminal.png b/docs/html/structfplot__core_1_1latex__terminal.png deleted file mode 100644 index 107f31950c768529997a384e94b0a596f5c2cc3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmeAS@N?(olHy`uVBq!ia0vp^Gk~~*gBeKboVwHjq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#NtfJzX3_Dj46+eciX(fQL;z ze#xo#|Boz>Vd9)F_I;E3>e8be9x}!joPWK~S$^k;ob*fih{{Rl4$n#Ldn3F~U%jQ~ zDJRD>SNhy7|D&t^t?%*-IxM`=L`26oRa)}>b**Wyi=>)ny<6_QU68$Tx#;XC&lb;F z_3mki()AbI&izWW4zMSEUHt8)>QZL2NB;LR#XquceE5CR4U-SmN$iL9!{3z5-naW$ zS@6%NrrT~>@Ry}-y}j)5%?p!bBiZNG{k%JWt$3Rq_Z}@Xy(?$EJugi=?QE~A<{7@j z>PzMw{a?bLpwt9@O^>Pme1uBy@TpoW~fwxOfJxycByFV zHqT3{=akCdrZ+B6y4v6m41(rx9bQ)N;G1s8esAr1x@%6`f>pcuASj> zNt0tHZ+;o)ryAsWcH_5Rv*O>LUY=J!My#p366X_SwV)*DR{0@&b+bQN8-M=WGim9$ zNn4&C7G3@O^xw`K(ZQ9qy+4$j=A++1<=m}so1-=uwq-mjUV@>k!MWsw!1Xz+Ugs3 zSNm_yJDL>E^aE!Ipast#-i=d&UI|W`83_!KnKRo3jEz5U=vsQTAat+Z-;y(tt73oO z+0YTnXs?x)c5Q>;?s|*1Z5wlxAODRyS`_Q&9B}z=&&d&tjVrdyZ0?(PvrBf#J&_w{F17joKlZ@m&5zzyE6k6!-A~i< z=6n`;vt#Nr;f<+(*tN<6CTM*>7_#kj()SI<8((L?NzmH9{;JMD?% - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/structfplot__core_1_1legend.html b/docs/html/structfplot__core_1_1legend.html deleted file mode 100644 index 93e65bd..0000000 --- a/docs/html/structfplot__core_1_1legend.html +++ /dev/null @@ -1,759 +0,0 @@ - - - - - - - -fplot: fplot_core::legend Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::legend Type Reference
    -
    -
    - -

    Defines a legend object. - More...

    -
    -Inheritance diagram for fplot_core::legend:
    -
    -
    - - -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_draw_inside_axes leg_get_inside
     Gets a value determining if the legend should be drawn inside the axes border (true), or outside the axes border (false).
     
    procedure, public set_draw_inside_axes leg_set_inside
     Sets a value determining if the legend should be drawn inside the axes border (true), or outside the axes border (false).
     
    procedure, public get_draw_border leg_get_box
     Gets a value determining if the legend should have a border.
     
    procedure, public set_draw_border leg_set_box
     Sets a value determining if the legend should have a border.
     
    procedure, public get_horizontal_position leg_get_horz_pos
     Gets the horizontal position of the legend.
     
    procedure, public set_horizontal_position leg_set_horz_pos
     Sets the horizontal position of the legend.
     
    procedure, public get_vertical_position leg_get_vert_pos
     Gets the vertical position of the legend.
     
    procedure, public set_vertical_position leg_set_vert_pos
     Gets the vertical position of the legend.
     
    procedure, public get_is_visible leg_get_visible
     Gets a value determining if the legend is visible.
     
    procedure, public set_is_visible leg_set_visible
     Sets a value determining if the legend is visible.
     
    procedure, public get_command_string leg_get_command_txt
     Gets the command string defining the legend properties.
     
    procedure, public get_layout leg_get_layout
     Gets the layout of the legend.
     
    procedure, public set_layout leg_set_layout
     Sets the layout of the legend.
     
    procedure, public get_is_opaque leg_get_opaque
     Gets a value determining if the legend is to be opaque.
     
    procedure, public set_is_opaque leg_set_opaque
     Sets a value determining if the legend is to be opaque.
     
    - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    logical m_box = .true.
     Draw a box around the legend.
     
    character(len=20) m_horzposition = LEGEND_RIGHT
     Defines the horizontal position.
     
    character(len=20) m_vertposition = LEGEND_TOP
     Defines the vertical position.
     
    logical m_show = .false.
     Determines if the legend is visible.
     
    character(len=20) m_layout = LEGEND_ARRANGE_VERTICALLY
     Determines the legend layout.
     
    logical m_opaque = .true.
     Opaque background?
     
    - - - - -

    -Private Attributes

    logical m_inside = .true.
     Legend on inside or outside of axes.
     
    -

    Detailed Description

    -

    Defines a legend object.

    - -

    Definition at line 2115 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::legend::get_command_string
    -
    -virtual
    -
    - -

    Gets the command string defining the legend properties.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    The GNUPLOT command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 2249 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_border()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::get_draw_border
    -
    - -

    Gets a value determining if the legend should have a border.

    -
    Syntax
    pure logical function get_draw_border(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    The logical value.
    - -

    Definition at line 2163 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_inside_axes()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::get_draw_inside_axes
    -
    - -

    Gets a value determining if the legend should be drawn inside the axes border (true), or outside the axes border (false).

    -
    Syntax
    pure logical function get_draw_inside_axes(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    The logical value.
    - -

    Definition at line 2142 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_horizontal_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::get_horizontal_position
    -
    - -

    Gets the horizontal position of the legend.

    -
    Syntax
    character(len = :) function, allocatable get_horizontal_position(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    The horizontal position of the legend (LEGEND_LEFT, LEGEND_CENTER, or LEGEND_RIGHT).
    - -

    Definition at line 2184 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_is_opaque()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::get_is_opaque
    -
    - -

    Gets a value determining if the legend is to be opaque.

    -
    Syntax
    logical pure function get_is_opaque(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    True if the legend is to be opaque; else, false.
    - -

    Definition at line 2281 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_is_visible()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::get_is_visible
    -
    - -

    Gets a value determining if the legend is visible.

    -
    Syntax
    pure logical function get_is_visible(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    The logical value.
    - -

    Definition at line 2229 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_layout()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::get_layout
    -
    - -

    Gets the layout of the legend.

    -
    Syntax
    character(len = :) pure function get_layout(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    The layout type, either LEGEND_ARRANGE_VERTICALLY or LEGEND_ARRANGE_HORIZONTALLY.
    - -

    Definition at line 2260 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_vertical_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::get_vertical_position
    -
    - -

    Gets the vertical position of the legend.

    -
    Syntax
    character(len = :) function, allocatable get_vertical_position(class(legend) this)
    -
    -
    Parameters
    - - -
    [in]thisThe legend object.
    -
    -
    -
    Returns
    The vertical position of the legend (LEGEND_TOP, LEGEND_CENTER, or LEGEND_BOTTOM).
    - -

    Definition at line 2207 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_border()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::set_draw_border
    -
    - -

    Sets a value determining if the legend should have a border.

    -
    Syntax
    subroutine set_draw_border(class(legend) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe legend object.
    [in]xThe logical value.
    -
    -
    - -

    Definition at line 2173 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_inside_axes()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::set_draw_inside_axes
    -
    - -

    Sets a value determining if the legend should be drawn inside the axes border (true), or outside the axes border (false).

    -
    Syntax
    subroutine set_draw_inside_axes(class(legend) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe legend object.
    [in]xThe logical value.
    -
    -
    - -

    Definition at line 2153 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_horizontal_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::set_horizontal_position
    -
    - -

    Sets the horizontal position of the legend.

    -
    Syntax
    subroutine set_horizontal_position(class(legend) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe legend object.
    xThe horizontal position of the legend. The parameter must be set to one of the following: LEGEND_LEFT, LEGEND_CENTER, or LEGEND_RIGHT. If not, the default LEGEND_RIGHT will be used.
    -
    -
    - -

    Definition at line 2196 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_is_opaque()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::set_is_opaque
    -
    - -

    Sets a value determining if the legend is to be opaque.

    -
    Syntax
    subroutine set_is_opaque(class(legend) this)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe legend object.
    [in]xTrue if the legend is to be opaque; else, false.
    -
    -
    - -

    Definition at line 2291 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_is_visible()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::set_is_visible
    -
    - -

    Sets a value determining if the legend is visible.

    -
    Syntax
    subroutine set_is_visible(class(legend) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe legend object.
    [in]xThe logical value.
    -
    -
    - -

    Definition at line 2239 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_layout()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::set_layout
    -
    - -

    Sets the layout of the legend.

    -
    Syntax
    subroutine set_layout(class(legend) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe legend object.
    [in]xThe layout type, either LEGEND_ARRANGE_VERTICALLY or LEGEND_ARRANGE_HORIZONTALLY.
    -
    -
    - -

    Definition at line 2271 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_vertical_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::legend::set_vertical_position
    -
    - -

    Gets the vertical position of the legend.

    -
    Syntax
    subroutine set_vertical_position(class(legend) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe legend object.
    xThe vertical position of the legend. The parameter must be set to one of the following: LEGEND_TOP, LEGEND_CENTER, or LEGEND_BOTTOM. If not, the default LEGEND_TOP will be used.
    -
    -
    - -

    Definition at line 2219 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_box

    - -
    -
    - - - - -
    logical fplot_core::legend::m_box = .true.
    -
    - -

    Draw a box around the legend.

    - -

    Definition at line 2120 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_horzposition

    - -
    -
    - - - - -
    character(len = 20) fplot_core::legend::m_horzposition = LEGEND_RIGHT
    -
    - -

    Defines the horizontal position.

    - -

    Definition at line 2122 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_inside

    - -
    -
    - - - - - -
    - - - - -
    logical fplot_core::legend::m_inside = .true.
    -
    -private
    -
    - -

    Legend on inside or outside of axes.

    - -

    Definition at line 2118 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_layout

    - -
    -
    - - - - -
    character(len = 20) fplot_core::legend::m_layout = LEGEND_ARRANGE_VERTICALLY
    -
    - -

    Determines the legend layout.

    - -

    Definition at line 2128 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_opaque

    - -
    -
    - - - - -
    logical fplot_core::legend::m_opaque = .true.
    -
    - -

    Opaque background?

    - -

    Definition at line 2130 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_show

    - -
    -
    - - - - -
    logical fplot_core::legend::m_show = .false.
    -
    - -

    Determines if the legend is visible.

    - -

    Definition at line 2126 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_vertposition

    - -
    -
    - - - - -
    character(len = 20) fplot_core::legend::m_vertposition = LEGEND_TOP
    -
    - -

    Defines the vertical position.

    - -

    Definition at line 2124 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1legend.js b/docs/html/structfplot__core_1_1legend.js deleted file mode 100644 index 4fa3501..0000000 --- a/docs/html/structfplot__core_1_1legend.js +++ /dev/null @@ -1,25 +0,0 @@ -var structfplot__core_1_1legend = -[ - [ "get_command_string", "structfplot__core_1_1legend.html#af7e10649da6f0aeb6c94ddad33496ed4", null ], - [ "get_draw_border", "structfplot__core_1_1legend.html#a1ed58a0a0f295b937932dc954d154464", null ], - [ "get_draw_inside_axes", "structfplot__core_1_1legend.html#a88c74437f8906b6d1247e662b95d8a52", null ], - [ "get_horizontal_position", "structfplot__core_1_1legend.html#a6e4a288471d81d99105f2781dbc0944a", null ], - [ "get_is_opaque", "structfplot__core_1_1legend.html#a116ec03262065d54826f531c5b2e636e", null ], - [ "get_is_visible", "structfplot__core_1_1legend.html#aba8ff6b836a1fd2fefe41fc58751834b", null ], - [ "get_layout", "structfplot__core_1_1legend.html#a0692cc15c73eac64351831d3d4d28eb0", null ], - [ "get_vertical_position", "structfplot__core_1_1legend.html#abb44e0b424ee3a9170fc4ddecf39c481", null ], - [ "set_draw_border", "structfplot__core_1_1legend.html#a081df8de03ccc8888b6169608d9b5f17", null ], - [ "set_draw_inside_axes", "structfplot__core_1_1legend.html#a89b548365548f1e7f0d8756b4145ad93", null ], - [ "set_horizontal_position", "structfplot__core_1_1legend.html#a39f311ee80c51cbc637cc946c7a44397", null ], - [ "set_is_opaque", "structfplot__core_1_1legend.html#af006f78db694a74d57a9861f038b3971", null ], - [ "set_is_visible", "structfplot__core_1_1legend.html#aa9c45f3a136694b9e8c0c3c83d9a7cd8", null ], - [ "set_layout", "structfplot__core_1_1legend.html#a24b91299a6a9382c91a15b0093e1cdaa", null ], - [ "set_vertical_position", "structfplot__core_1_1legend.html#aafce387b80da438eb00b49107bcde5df", null ], - [ "m_box", "structfplot__core_1_1legend.html#a195d911a2ffb3e4d8d8229b21745db72", null ], - [ "m_horzposition", "structfplot__core_1_1legend.html#a4751dde9054923257d25204e3924d11b", null ], - [ "m_inside", "structfplot__core_1_1legend.html#adc69a36d330318bc97b7fae160cb7960", null ], - [ "m_layout", "structfplot__core_1_1legend.html#aa0e3a0c975e39520a953b9e36a9336de", null ], - [ "m_opaque", "structfplot__core_1_1legend.html#a48c213368dcf6ee0cc202c450fbffc4b", null ], - [ "m_show", "structfplot__core_1_1legend.html#ad57a162b33234017fcacbf6fb5b8c261", null ], - [ "m_vertposition", "structfplot__core_1_1legend.html#add3185b4f64fb74583931a94e4dfb23a", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1legend.png b/docs/html/structfplot__core_1_1legend.png deleted file mode 100644 index 68b11ae6e0e51dfcb2654c600a6d0433329ff025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~OrP)vTJr#LVva2S`&=-}Ys|Ns9r%~qrU000SeQchC<|NsC0|NsC0Hv*f~0005s zNklr4%q&^nT)(c1#@Kq3!bZ$UwDTr-lS-sBpD&^}uEJ1GjWojGI z1iFfBFc0OS+Ac$m+@l9ldl7q}2dQs;ycS#l zr*ZM`OVTMoNIJ~~l2S?&7y$n48vxAUSwL>LNl0b^xpT}xG7U&{4FGrt2mq%50pJuM z0Gt8@fKz|~a0(CrP5}bIDL?=?1qcAA00H0>AOM{HFAy`c84Q!8-#b7gIR%I$r!I(< zwS9A(cObI&ogI*B<)ZL$zIo z94V7izN%*X_7#x&)<+OY)^XnOtldG9(}zHoPYtroODWv!s~}Cf4>``hb4H&2G{;h0 zJ|n(s>g2X-s=g>+*zKC~jDsN8UK^71#G^O50J5IBUR5Qj>yzUkNe6$oA{V&h-&c}T ifJkzh3B=570{;W(*l}M#S2pSZ0000 - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/structfplot__core_1_1multiplot.html b/docs/html/structfplot__core_1_1multiplot.html deleted file mode 100644 index c03b9d7..0000000 --- a/docs/html/structfplot__core_1_1multiplot.html +++ /dev/null @@ -1,825 +0,0 @@ - - - - - - - -fplot: fplot_core::multiplot Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::multiplot Type Reference
    -
    -
    - -

    Defines a multi-plot layout. - More...

    -
    -Inheritance diagram for fplot_core::multiplot:
    -
    -
    - - -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_command_string mp_get_command
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    procedure, public initialize mp_init
     Initializes the multiplot object.
     
    procedure, public get_row_count mp_get_rows
     Gets the number of rows of plots.
     
    procedure, public get_column_count mp_get_cols
     Gets the number of columns of plots.
     
    procedure, public get_plot_count mp_get_count
     Gets the number of plots.
     
    procedure, public get_title mp_get_title
     Gets the multiplot's title.
     
    procedure, public set_title mp_set_title
     Sets the multiplot's title.
     
    procedure, public draw mp_draw
     Launches GNUPLOT and draws the multiplot per the current state of the command list.
     
    procedure, public get mp_get
     Gets the requested plot object.
     
    procedure, public set mp_set
     Sets the requested plot object.
     
    procedure, public is_title_defined mp_has_title
     Gets a value determining if a title has been defined for the multiplot object.
     
    procedure, public get_terminal mp_get_term
     Gets the GNUPLOT terminal object.
     
    procedure, public save_file mp_save
     Saves a GNUPLOT command file.
     
    procedure, public get_font_name mp_get_font
     Gets the name of the font used for plot text.
     
    procedure, public set_font_name mp_set_font
     Sets the name of the font used for plot text.
     
    procedure, public get_font_size mp_get_font_size
     Gets the size of the font used by the plot.
     
    procedure, public set_font_size mp_set_font_size
     Sets the size of the font used by the plot.
     
    - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    type(list) m_plots
     The collection of plot objects.
     
    integer(int32) m_rows = 0
     The number of rows of plots.
     
    integer(int32) m_cols = 0
     The number of columns of plots.
     
    character(len=plotdata_max_name_lengthm_title
     The page title.
     
    logical m_hastitle = .false.
     Has a title?
     
    class(terminal), pointer m_terminal => null()
     The BNUPLOT terminal object to target.
     
    -

    Detailed Description

    -

    Defines a multi-plot layout.

    - -

    Definition at line 5857 of file fplot_core.f90.

    -

    Constructor & Destructor Documentation

    - -

    ◆ mp_clean()

    - -
    -
    - - - - - -
    - - - - -
    final fplot_core::multiplot::mp_clean
    -
    -final
    -
    - -

    Definition at line 5871 of file fplot_core.f90.

    - -
    -
    -

    Member Function/Subroutine Documentation

    - -

    ◆ draw()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::draw
    -
    - -

    Launches GNUPLOT and draws the multiplot per the current state of the command list.

    -
    Syntax
    subroutine draw(class(multiplot) this, optional logical persist, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in]thisThe multiplot object.
    [in]persistAn optional parameter that can be used to keep GNUPLOT open. Set to true to force GNUPLOT to remain open; else, set to false to allow GNUPLOT to close after drawing. The default is true.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written.
    • -
    -
    -
    -
    - -

    Definition at line 5965 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get
    -
    - -

    Gets the requested plot object.

    -
    Syntax
    class(plot) pointer function get(class(multiplot) this, integer(int32) i, integer(int32) j)
    -
    -
    Parameters
    - - - - -
    [in]thisThe multiplot object.
    [in]iThe row index of the plot to retrieve.
    [in]jThe column index of the plot to retrieve.
    -
    -
    -
    Returns
    A pointer to the requested plot object.
    - -

    Definition at line 5977 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_column_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get_column_count
    -
    - -

    Gets the number of columns of plots.

    -
    Syntax
    pure integer(int32) function get_column_count(class(multiplot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    The number of columns.
    - -

    Definition at line 5914 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::multiplot::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to define the plot object properties.

    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 5872 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_font_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get_font_name
    -
    - -

    Gets the name of the font used for plot text.

    -
    Syntax
    character(len = :) function, allocatable get_font_name(class(multiplot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    The font name.
    - -

    Definition at line 6037 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_font_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get_font_size
    -
    - -

    Gets the size of the font used by the plot.

    -
    Syntax
    integer(int32) function get_font_size(class(multiplot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    The size of the font, in points.
    - -

    Definition at line 6057 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_plot_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get_plot_count
    -
    - -

    Gets the number of plots.

    -
    Syntax
    pure integer(int32) function get_plot_count(class(multiplot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    The number of plots.
    - -

    Definition at line 5924 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_row_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get_row_count
    -
    - -

    Gets the number of rows of plots.

    -
    Syntax
    pure integer(int32) function get_row_count(class(multiplot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    The number of rows.
    - -

    Definition at line 5904 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_terminal()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get_terminal
    -
    - -

    Gets the GNUPLOT terminal object.

    -
    Syntax
    class(terminal) function, pointer get_terminal(class(multiplot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    A pointer to the GNUPLOT terminal object.
    - -

    Definition at line 6011 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::get_title
    -
    - -

    Gets the multiplot's title.

    -
    Syntax
    character(len = :) function, allocatable get_title(class(multiplot))
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    The multiplot's title.
    - -

    Definition at line 5934 of file fplot_core.f90.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::initialize
    -
    - -

    Initializes the multiplot object.

    -
    Syntax
    subroutine initialize(class(multiplot) this, optional class(terminal) term, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe multiplot object.
    [in]termAn optional input that is used to define the terminal. The default terminal is a WXT terminal. The acceptable inputs are:
      -
    • GNUPLOT_TERMINAL_PNG
    • -
    • GNUPLOT_TERMINAL_QT
    • -
    • GNUPLOT_TERMINAL_WIN32
    • -
    • GNUPLOT_TERMINAL_WXT
    • -
    • GNUPLOT_TERMINAL_LATEX
    • -
    -
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 5894 of file fplot_core.f90.

    - -
    -
    - -

    ◆ is_title_defined()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::is_title_defined
    -
    - -

    Gets a value determining if a title has been defined for the multiplot object.

    -
    Syntax
    pure logical function is_title_defined(class(multiplot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe multiplot object.
    -
    -
    -
    Returns
    Returns true if a title has been defined for this multiplot; else, returns false.
    - -

    Definition at line 6001 of file fplot_core.f90.

    - -
    -
    - -

    ◆ save_file()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::save_file
    -
    - -

    Saves a GNUPLOT command file.

    -
    Syntax
    subroutine save_file(class(multiplot) this, character(len = *) fname, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in]thisThe multiplot object.
    [in]fnameThe filename.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written.
    • -
    -
    -
    -
    - -

    Definition at line 6027 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::set
    -
    - -

    Sets the requested plot object.

    -
    Syntax
    subroutine set(class(multiplot) this, integer(int32) i, integer(int32) j, class(plot) pointer x)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe multiplot object.
    [in]iThe row index of the plot to retrieve.
    [in]jThe column index of the plot to retrieve.
    [in]xA pointer to the requested plot object.
    -
    -
    - -

    Definition at line 5989 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_font_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::set_font_name
    -
    - -

    Sets the name of the font used for plot text.

    -
    Syntax
    subroutine set_font_name(class(multiplot) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe multiplot object.
    [in]xThe font name.
    -
    -
    - -

    Definition at line 6047 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_font_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::set_font_size
    -
    - -

    Sets the size of the font used by the plot.

    -
    Syntax
    subroutine set_font_size(class(multiplot) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe multiplot object.
    [in]xThe font size, in points. If a value of zero is provided, the font size is reset to its default value; or, if a negative value is provided, the absolute value of the supplied value is utilized.
    -
    -
    - -

    Definition at line 6069 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::multiplot::set_title
    -
    - -

    Sets the multiplot's title.

    -
    Syntax
    subroutine set_title(class(multiplot) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe multiplot object.
    [in]txtThe multiplot's title. The number of characters must be less than or equal to PLOTDATA_MAX_NAME_LENGTH; else, the text string is truncated.
    -
    -
    - -

    Definition at line 5946 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_cols

    - -
    -
    - - - - -
    integer(int32) fplot_core::multiplot::m_cols = 0
    -
    - -

    The number of columns of plots.

    - -

    Definition at line 5863 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_hastitle

    - -
    -
    - - - - -
    logical fplot_core::multiplot::m_hastitle = .false.
    -
    - -

    Has a title?

    - -

    Definition at line 5867 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_plots

    - -
    -
    - - - - -
    type(list) fplot_core::multiplot::m_plots
    -
    - -

    The collection of plot objects.

    - -

    Definition at line 5859 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_rows

    - -
    -
    - - - - -
    integer(int32) fplot_core::multiplot::m_rows = 0
    -
    - -

    The number of rows of plots.

    - -

    Definition at line 5861 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_terminal

    - -
    -
    - - - - -
    class(terminal), pointer fplot_core::multiplot::m_terminal => null()
    -
    - -

    The BNUPLOT terminal object to target.

    - -

    Definition at line 5869 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_title

    - -
    -
    - - - - -
    character(len = plotdata_max_name_length) fplot_core::multiplot::m_title
    -
    - -

    The page title.

    - -

    Definition at line 5865 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1multiplot.js b/docs/html/structfplot__core_1_1multiplot.js deleted file mode 100644 index 306cc44..0000000 --- a/docs/html/structfplot__core_1_1multiplot.js +++ /dev/null @@ -1,26 +0,0 @@ -var structfplot__core_1_1multiplot = -[ - [ "draw", "structfplot__core_1_1multiplot.html#a37bd89e10d4dcf8a97577713eaeb4143", null ], - [ "get", "structfplot__core_1_1multiplot.html#a3cb5a2d2f473e118f6adeb481cc8ae80", null ], - [ "get_column_count", "structfplot__core_1_1multiplot.html#afa4b9ef0d7c48a5d0365fd14147a0945", null ], - [ "get_command_string", "structfplot__core_1_1multiplot.html#a38da5245525925cd37f7dc32a88aedd7", null ], - [ "get_font_name", "structfplot__core_1_1multiplot.html#ae37d626915c86f2068a90aa643b7ec7d", null ], - [ "get_font_size", "structfplot__core_1_1multiplot.html#a31171ee8993d645c5e8d60212002e1b1", null ], - [ "get_plot_count", "structfplot__core_1_1multiplot.html#a354b6419ea8889d27a789c11d19d30ae", null ], - [ "get_row_count", "structfplot__core_1_1multiplot.html#af8e5de63b2d4424ef31c6454f0b4a441", null ], - [ "get_terminal", "structfplot__core_1_1multiplot.html#a3e773ed8f697086383a91cfc88be412b", null ], - [ "get_title", "structfplot__core_1_1multiplot.html#a53b06b534a0fd70fb17323ec5bb9b063", null ], - [ "initialize", "structfplot__core_1_1multiplot.html#a765c22060cbe884515bc3a73bfef30f7", null ], - [ "is_title_defined", "structfplot__core_1_1multiplot.html#a77d68800c07166876bd9dae972caf094", null ], - [ "save_file", "structfplot__core_1_1multiplot.html#a4ffe414eeb41cfb1c6a4090efe0308b6", null ], - [ "set", "structfplot__core_1_1multiplot.html#a24b7e0d33ad3c66d3031bc0c2c307677", null ], - [ "set_font_name", "structfplot__core_1_1multiplot.html#a1ea580b7916e02cbb84a3ee6325802be", null ], - [ "set_font_size", "structfplot__core_1_1multiplot.html#ad751ab2a57ec9af423468603a3fc5a75", null ], - [ "set_title", "structfplot__core_1_1multiplot.html#a22818257b677d5f45a1ac13435cc27ae", null ], - [ "m_cols", "structfplot__core_1_1multiplot.html#ac43b0757815bd163133a4863314725f9", null ], - [ "m_hastitle", "structfplot__core_1_1multiplot.html#a6d0402f03382c3bf29b50d4f06fad597", null ], - [ "m_plots", "structfplot__core_1_1multiplot.html#af9b41a50d6394721ff548622aa61725d", null ], - [ "m_rows", "structfplot__core_1_1multiplot.html#a65d63e8ce7aa0d1976f8bca150bb33d3", null ], - [ "m_terminal", "structfplot__core_1_1multiplot.html#a9bae2b4eddaa75ff61ac0abe77175eb1", null ], - [ "m_title", "structfplot__core_1_1multiplot.html#ae7b5636092a710de62e0d2ba4eef9752", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1multiplot.png b/docs/html/structfplot__core_1_1multiplot.png deleted file mode 100644 index 9b23970a581c846fdfcbfc4fc0df5ea10711ed4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0vTJr#LVva2S`&=-}Ys|Ns9r%~qrU000SeQchC<|NsC0|NsC0Hv*f~0005o zNklyE2141~uMshanH;!{FX;&4kTyBi(3nh_8j^AYUyFH%Zr1S65;-#b7^ zIt2(xrv=2UjJ;2)Gm`A^!PM8l-uN4&3iweFl5}oBY+4YTmnA!2FRN6}%V7#~w@;_G z5lx_5ks0Qta;R><4<&Mm?wGn2u>^XMI`ujmN!xG(dh!mdh#Nqr-zAWF;(Z`($$hdS zt2Vk?BdbqybB#2Geb6;kH_SSly3;i!(Cw@rZyOh;?ggHKTX>8`;v4D5Ry(Kfuxku00w}s{Q!UwJPOF;F$l>hAWx1lNQME4t^ok=00H0>AOM^K z1b|b30B{Nr08Rk{z$rigI0Xm*rvL%q6d(Yc0tA55{{>=ZHiBW2^!E-BNlpPG$!QH@ z?}6pcb=c?3S!X#{Al2o4ARRedkY__rF?m_C^YyYy<-8p7lj_^$(JxP_USsY61+vPw(MZg)+cb9ZO`iOu#bXD>*u$mS&^soQsfNYYon1R_bl?EsPF6d;nE eo*-ss1Na|~i*U@l - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::parula_colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1parula__colormap.html b/docs/html/structfplot__core_1_1parula__colormap.html deleted file mode 100644 index fb7797e..0000000 --- a/docs/html/structfplot__core_1_1parula__colormap.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - -fplot: fplot_core::parula_colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::parula_colormap Type Reference
    -
    -
    - -

    Defines a colormap equivalent to the MATLAB parula colormap. - More...

    -
    -Inheritance diagram for fplot_core::parula_colormap:
    -
    -
    - - -fplot_core::colormap -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_color_string pcm_get_clr
     Gets the GNUPLOT string defining the color distribution.
     
    - Public Member Functions inherited from fplot_core::colormap
    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::colormap
    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    -

    Detailed Description

    -

    Defines a colormap equivalent to the MATLAB parula colormap.

    - -

    Definition at line 2555 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::parula_colormap::get_color_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution.

    -
    Syntax
    character(len = :) function, allocatable get_color_string(class(parula_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe parula_colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::colormap.

    - -

    Definition at line 2566 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1parula__colormap.js b/docs/html/structfplot__core_1_1parula__colormap.js deleted file mode 100644 index 68f4d9d..0000000 --- a/docs/html/structfplot__core_1_1parula__colormap.js +++ /dev/null @@ -1,4 +0,0 @@ -var structfplot__core_1_1parula__colormap = -[ - [ "get_color_string", "structfplot__core_1_1parula__colormap.html#aab47b0c74c9a87e1a42b792cac59355e", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1parula__colormap.png b/docs/html/structfplot__core_1_1parula__colormap.png deleted file mode 100644 index a1dc80c6aa3cfeeb666dc13b28b47aac1aade491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmeAS@N?(olHy`uVBq!ia0vp^tAMzJgBeIVoN4F8KoaMecWm|r# z&!l?~U0)?XxVb~c)FynbQC(>0B&mC0zL%FROU+Jyc0YCb_4luHxw4k|2mkJ9cJO>! zwRd&*yT?)aSHF}+D|>%wy|TDNEg-0L?uu*t_wD_ItQJ&HoxJ^y>z~e7Uw(R&dj9dg z+Wh78?q7>kE3Us<$MA1Y*ly=viyt9PCYnqSgj6%e#D?*I0x-Mw`asw_X`Uj4~o zQ~l9DsNO$x(z*iEufLSzR(oB#E&z0~?+UL;=H*xC6w5I&)aNlI8}z+;Yu5AHVpaL& zz!>(RUOt8g{wtU&gjX@#Ytd>jU&!^q7dQ9+-mG(${fv>5+!R7oPtFdQs*>*)5`1gl zR71~S4gR0ktqfaTzcXu=nW=8Hwef#F>%DdH`N09UchBW(>rC`6v5igl3OfFCo!+k3 zyIy}vt=heIqL)^9b+%Ia_N-lzQIo9nR(#{XHPva-m12YV)n>|XxxFtbzFT$qx$jlg zr|(1g`7U*4g}Y5E>BwFyCwic8t=!70D_P}r@g)tvwp?egyU)0bDZ=WIzg2^~^^_&r zbL^fgU;X)J&YMP+y+_{zgTb0_)ub9t-G`v9xvY)zS@12fA&`EDf(6pwJqMCXBZmZ`7$d^2;`qM0}6ajy!WZnU{*@4~FKvey0g uLX9`SR|R>FGt}5P|J^Fhr6w%@8NPF^JwKIKbrLYIF?hQAxvX - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_allplt_clear_allfplot_core::plot
    clear_all_labelsplt_clear_labelsfplot_core::plot
    clear_arrowsplt_clear_arrowsfplot_core::plot
    drawplt_drawfplot_core::plot
    free_resourcesplt_clean_upfplot_core::plot
    getplt_getfplot_core::plot
    get_arrowplt_get_arrowfplot_core::plot
    get_arrow_countplt_get_arrow_countfplot_core::plot
    get_axis_equalplt_get_axis_equalfplot_core::plot
    get_colormapplt_get_colormapfplot_core::plot
    get_command_stringplt_get_cmdfplot_core::plotvirtual
    get_countplt_get_countfplot_core::plot
    get_draw_borderplt_get_draw_borderfplot_core::plot
    get_font_nameplt_get_fontfplot_core::plot
    get_font_sizeplt_get_font_sizefplot_core::plot
    get_labelplt_get_labelfplot_core::plot
    get_label_countplt_get_label_countfplot_core::plot
    get_legendplt_get_legendfplot_core::plot
    get_show_colorbarplt_get_show_colorbarfplot_core::plot
    get_show_gridlinesplt_get_show_gridfplot_core::plot
    get_terminalplt_get_termfplot_core::plot
    get_tics_inwardplt_get_tics_infplot_core::plot
    get_titleplt_get_titlefplot_core::plot
    initializeplt_initfplot_core::plot
    is_title_definedplt_has_titlefplot_core::plot
    m_arrowsfplot_core::plot
    m_axisequalfplot_core::plot
    m_colorindexfplot_core::plot
    m_colormapfplot_core::plot
    m_datafplot_core::plot
    m_drawborderfplot_core::plot
    m_hastitlefplot_core::plot
    m_labelsfplot_core::plot
    m_legendfplot_core::plot
    m_showcolorbarfplot_core::plot
    m_showgridfplot_core::plot
    m_terminalfplot_core::plot
    m_ticsinfplot_core::plot
    m_titlefplot_core::plotprivate
    popplt_pop_datafplot_core::plot
    pop_arrowplt_pop_arrowfplot_core::plot
    pop_labelplt_pop_labelfplot_core::plot
    pushplt_push_datafplot_core::plot
    push_arrowplt_push_arrowfplot_core::plot
    push_labelplt_push_labelfplot_core::plot
    save_fileplt_savefplot_core::plot
    setplt_setfplot_core::plot
    set_arrowplt_set_arrowfplot_core::plot
    set_axis_equalplt_set_axis_equalfplot_core::plot
    set_colormapplt_set_colormapfplot_core::plot
    set_draw_borderplt_set_draw_borderfplot_core::plot
    set_font_nameplt_set_fontfplot_core::plot
    set_font_sizeplt_set_font_sizefplot_core::plot
    set_labelplt_set_labelfplot_core::plot
    set_show_colorbarplt_set_show_colorbarfplot_core::plot
    set_show_gridlinesplt_set_show_gridfplot_core::plot
    set_tics_inwardplt_set_tics_infplot_core::plot
    set_titleplt_set_titlefplot_core::plot
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot.html b/docs/html/structfplot__core_1_1plot.html deleted file mode 100644 index 22b249e..0000000 --- a/docs/html/structfplot__core_1_1plot.html +++ /dev/null @@ -1,1811 +0,0 @@ - - - - - - - -fplot: fplot_core::plot Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot Type Reference
    -
    -
    - -

    Defines the basic GNUPLOT plot. - More...

    -
    -Inheritance diagram for fplot_core::plot:
    -
    -
    - - -fplot_core::plot_object -fplot_core::plot_2d -fplot_core::plot_3d -fplot_core::plot_polar -fplot_core::plot_bar -fplot_core::surface_plot - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public free_resources plt_clean_up
     Cleans up resources held by the plot object. Inheriting classes are expected to call this routine to free internally held resources.
     
    procedure, public initialize plt_init
     Initializes the plot object.
     
    procedure, public get_title plt_get_title
     Gets the plot's title.
     
    procedure, public set_title plt_set_title
     Sets the plot's title.
     
    procedure, public is_title_defined plt_has_title
     Gets a value determining if a title has been defined for the plot object.
     
    procedure, public get_legend plt_get_legend
     Gets the plot's legend object.
     
    procedure, public get_count plt_get_count
     Gets the number of stored plot_data objects.
     
    procedure, public push plt_push_data
     Pushes a plot_data object onto the stack.
     
    procedure, public pop plt_pop_data
     Pops the last plot_data object from the stack.
     
    procedure, public clear_all plt_clear_all
     Removes all plot_data objects from the plot.
     
    procedure, public get plt_get
     Gets a pointer to the requested plot_data object.
     
    procedure, public set plt_set
     Sets the requested plot_data object into the plot.
     
    procedure, public get_terminal plt_get_term
     Gets the GNUPLOT terminal object.
     
    procedure, public get_show_gridlines plt_get_show_grid
     Gets a flag determining if the grid lines should be shown.
     
    procedure, public set_show_gridlines plt_set_show_grid
     Sets a flag determining if the grid lines should be shown.
     
    procedure, public draw plt_draw
     Launches GNUPLOT and draws the plot per the current state of the command list.
     
    procedure, public save_file plt_save
     Saves a GNUPLOT command file.
     
    procedure, public get_font_name plt_get_font
     Gets the name of the font used for plot text.
     
    procedure, public set_font_name plt_set_font
     Sets the name of the font used for plot text.
     
    procedure, public get_font_size plt_get_font_size
     Gets the size of the font used by the plot.
     
    procedure, public set_font_size plt_set_font_size
     Sets the size of the font used by the plot.
     
    procedure, public get_tics_inward plt_get_tics_in
     Gets a value determining if the axis tic marks should point inwards.
     
    procedure, public set_tics_inward plt_set_tics_in
     Sets a value determining if the axis tic marks should point inwards.
     
    procedure, public get_draw_border plt_get_draw_border
     Gets a value determining if the border should be drawn.
     
    procedure, public set_draw_border plt_set_draw_border
     Sets a value determining if the border should be drawn.
     
    procedure, public push_label plt_push_label
     Adds a label to the plot.
     
    procedure, public pop_label plt_pop_label
     Removes the last label from the plot.
     
    procedure, public get_label plt_get_label
     Gets the requested plot_label from the plot.
     
    procedure, public set_label plt_set_label
     Sets the specified plot_label object.
     
    procedure, public get_label_count plt_get_label_count
     Gets the number of plot_label objects belonging to the plot.
     
    procedure, public clear_all_labels plt_clear_labels
     Clears all plot_label objects from the plot.
     
    procedure, public get_axis_equal plt_get_axis_equal
     Gets a flag determining if the axes should be equally scaled.
     
    procedure, public set_axis_equal plt_set_axis_equal
     Sets a flag determining if the axes should be equally scaled.
     
    procedure, public get_colormap plt_get_colormap
     Gets a pointer to the colormap object.
     
    procedure, public set_colormap plt_set_colormap
     Sets the colormap object.
     
    procedure, public get_show_colorbar plt_get_show_colorbar
     Gets a value determining if the colorbar should be shown.
     
    procedure, public set_show_colorbar plt_set_show_colorbar
     Sets a value determining if the colorbar should be shown.
     
    procedure, public get_command_string plt_get_cmd
     Gets the GNUPLOT command string to represent this plot object.
     
    procedure, public push_arrow plt_push_arrow
     Pushes a new plot_arrow object onto the plot.
     
    procedure, public pop_arrow plt_pop_arrow
     Pops a plot_arrow object from the plot.
     
    procedure, public get_arrow plt_get_arrow
     Gets a pointer to the requested plot_arrow object.
     
    procedure, public set_arrow plt_set_arrow
     Sets a plot_arrow into the plot.
     
    procedure, public get_arrow_count plt_get_arrow_count
     Gets the number of plot_arrow objects held by the plot object.
     
    procedure, public clear_arrows plt_clear_arrows
     Clears all plot_arrow objects from the plot.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    logical m_hastitle = .false.
     Has a title?
     
    class(terminal), pointer m_terminal => null()
     The GNUPLOT terminal object to target.
     
    type(list) m_data
     A collection of plot_data items to plot.
     
    type(legend), pointer m_legend => null()
     The legend.
     
    logical m_showgrid = .true.
     Show grid lines?
     
    logical m_ticsin = .true.
     Point tic marks in?
     
    logical m_drawborder = .true.
     Draw the border?
     
    type(list) m_labels
     A collection of plot_label items to draw.
     
    integer(int32) m_colorindex = 1
     The color index to use for automatic line coloring for scatter plots.
     
    logical m_axisequal = .false.
     Determines if the axes should be scaled proportionally.
     
    class(colormap), pointer m_colormap
     The colormap.
     
    logical m_showcolorbar = .true.
     Show the colorbar?
     
    type(list) m_arrows
     A collection of plot_arrow items to draw.
     
    - - - - -

    -Private Attributes

    character(len=plotdata_max_name_lengthm_title = ""
     The plot title.
     
    -

    Detailed Description

    -

    Defines the basic GNUPLOT plot.

    - -

    Definition at line 2772 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ clear_all()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::clear_all
    -
    - -

    Removes all plot_data objects from the plot.

    -
    Syntax
    subroutine clear(class(plot) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot object.
    -
    -
    - -

    Definition at line 2925 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clear_all_labels()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::clear_all_labels
    -
    - -

    Clears all plot_label objects from the plot.

    -
    Syntax
    subroutine clear_all_labels(class(plot) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot object.
    -
    -
    - -

    Definition at line 3161 of file fplot_core.f90.

    - -
    -
    - -

    ◆ clear_arrows()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::clear_arrows
    -
    - -

    Clears all plot_arrow objects from the plot.

    -
    Syntax
    subroutine clear_arrows(class(plot) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot object.
    -
    -
    - -

    Definition at line 3309 of file fplot_core.f90.

    - -
    -
    - -

    ◆ draw()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::draw
    -
    - -

    Launches GNUPLOT and draws the plot per the current state of the command list.

    -
    Syntax
    subroutine draw(class(plot) this, optional logical persist, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in]thisThe plot object.
    [in]persistAn optional parameter that can be used to keep GNUPLOT open. Set to true to force GNUPLOT to remain open; else, set to false to allow GNUPLOT to close after drawing. The default is true.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written.
    • -
    -
    -
    -
    - -

    Definition at line 2996 of file fplot_core.f90.

    - -
    -
    - -

    ◆ free_resources()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::free_resources
    -
    - -

    Cleans up resources held by the plot object. Inheriting classes are expected to call this routine to free internally held resources.

    -
    Syntax
    module free_resources(class(plot) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot object.
    -
    -
    - -

    Definition at line 2813 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get
    -
    - -

    Gets a pointer to the requested plot_data object.

    -
    Syntax
    class(plot_data) function, pointer get(class(plot), integer(int32) i)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot object.
    [in]iThe index of the plot_data object.
    -
    -
    -
    Returns
    A pointer to the requested plot_data object.
    - -

    Definition at line 2936 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_arrow()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_arrow
    -
    - -

    Gets a pointer to the requested plot_arrow object.

    -
    Syntax
    class(plot_arrow), pointer function get_arrow(class(plot) this, integer(int32) i)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot object.
    [in]iThe index of the plot_arrow to retrieve.
    -
    -
    - -

    Definition at line 3276 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_arrow_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_arrow_count
    -
    - -

    Gets the number of plot_arrow objects held by the plot object.

    -
    Syntax
    pure integer(int32) function get_arrow_count(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    The number of plot_arrow objects held by the plot object.
    - -

    Definition at line 3300 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_axis_equal()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_axis_equal
    -
    - -

    Gets a flag determining if the axes should be equally scaled.

    -
    Syntax
    logical function get_axis_equal(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    Returns true if the axes should be scaled equally; else, false.
    - -

    Definition at line 3172 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_colormap()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_colormap
    -
    - -

    Gets a pointer to the colormap object.

    -
    Syntax
    class(colormap) function, pointer get_colormap(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    A pointer to the colormap object. If no colormap is defined, a null pointer is returned.
    - -

    Definition at line 3194 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this plot object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Reimplemented in fplot_core::plot_2d, fplot_core::plot_3d, fplot_core::plot_bar, fplot_core::plot_polar, and fplot_core::surface_plot.

    - -

    Definition at line 3243 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_count
    -
    - -

    Gets the number of stored plot_data objects.

    -
    Syntax
    pure integer(int32) function get_count(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    The number of plot_data objects.
    - -

    Definition at line 2891 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_border()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_draw_border
    -
    - -

    Gets a value determining if the border should be drawn.

    -
    Syntax
    pure logical function get_draw_border(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    Returns true if the border should be drawn; else, false.
    - -

    Definition at line 3088 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_font_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_font_name
    -
    - -

    Gets the name of the font used for plot text.

    -
    Syntax
    character(len = :) function, allocatable get_font_name(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    The font name.
    - -

    Definition at line 3022 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_font_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_font_size
    -
    - -

    Gets the size of the font used by the plot.

    -
    Syntax
    integer(int32) function get_font_size(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    The size of the font, in points.
    - -

    Definition at line 3042 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_label
    -
    - -

    Gets the requested plot_label from the plot.

    -
    Syntax
    class(plot_label) pointer function get_label(class(plot) this, integer(int32) i)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot object.
    [in]iThe index of the plot_label object to retrieve.
    -
    -
    -
    Returns
    A pointer to the requested plot_label object.
    - -

    Definition at line 3131 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_label_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_label_count
    -
    - -

    Gets the number of plot_label objects belonging to the plot.

    -
    Syntax
    pure integer(int32) function get_label_count(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    The number of plot_label objects.
    - -

    Definition at line 3152 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_legend()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_legend
    -
    - -

    Gets the plot's legend object.

    -
    Syntax
    class(legend) function, pointer get_legend(class(this) plot)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    A pointer to the legend object.
    - -

    Definition at line 2881 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_show_colorbar()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_show_colorbar
    -
    - -

    Gets a value determining if the colorbar should be shown.

    -
    Syntax
    pure logical function get_show_colorbar(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    Returns true if the colorbar should be drawn; else, false.
    - -

    Definition at line 3222 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_show_gridlines()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_show_gridlines
    -
    - -

    Gets a flag determining if the grid lines should be shown.

    -
    Syntax
    pure logical function get_show_gridlines(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    Returns true if the grid lines should be shown; else, false.
    - -

    Definition at line 2967 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_terminal()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_terminal
    -
    - -

    Gets the GNUPLOT terminal object.

    -
    Syntax
    class(terminal) function, pointer get_terminal(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    A pointer to the GNUPLOT terminal object.
    - -

    Definition at line 2957 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_tics_inward()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_tics_inward
    -
    - -

    Gets a value determining if the axis tic marks should point inwards.

    -
    Syntax
    pure logical function get_tics_inward(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    Returns true if the tic marks should point inwards; else, false if the tic marks should point outwards.
    - -

    Definition at line 3066 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::get_title
    -
    - -

    Gets the plot's title.

    -
    Syntax
    character(len = :) function, allocatable get_title(class(plot))
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    The plot's title.
    - -

    Definition at line 2847 of file fplot_core.f90.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::initialize
    -
    - -

    Initializes the plot object.

    -
    Syntax
    subroutine initialize(class(plot) this, optional class(terminal) term, optional class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot object.
    [in]termAn optional input that is used to define the terminal. The default terminal is a WXT terminal. The acceptable inputs are:
      -
    • GNUPLOT_TERMINAL_PNG
    • -
    • GNUPLOT_TERMINAL_QT
    • -
    • GNUPLOT_TERMINAL_WIN32
    • -
    • GNUPLOT_TERMINAL_WXT
    • -
    • GNUPLOT_TERMINAL_LATEX
    • -
    -
    [in]fnameA filename to pass to the terminal in the event the terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG).
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 2837 of file fplot_core.f90.

    - -
    -
    - -

    ◆ is_title_defined()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::is_title_defined
    -
    - -

    Gets a value determining if a title has been defined for the plot object.

    -
    Syntax
    pure logical function is_title_defined(class(plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot object.
    -
    -
    -
    Returns
    Returns true if a title has been defined for this plot; else, returns false.
    - -

    Definition at line 2871 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pop()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::pop
    -
    - -

    Pops the last plot_data object from the stack.

    -
    Syntax
    subroutine pop(class(plot) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot object.
    -
    -
    - -

    Definition at line 2916 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pop_arrow()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::pop_arrow
    -
    - -

    Pops a plot_arrow object from the plot.

    -
    Syntax
    subroutine pop_arrow(class(plot) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot object.
    -
    -
    - -

    Definition at line 3266 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pop_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::pop_label
    -
    - -

    Removes the last label from the plot.

    -
    Syntax
    subroutine pop_label(class(plot) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot object.
    -
    -
    - -

    Definition at line 3120 of file fplot_core.f90.

    - -
    -
    - -

    ◆ push()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::push
    -
    - -

    Pushes a plot_data object onto the stack.

    -
    Syntax
    subroutine push(class(plot) this, class(plot_data) x, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot object.
    [in]xThe plot_data object.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 2907 of file fplot_core.f90.

    - -
    -
    - -

    ◆ push_arrow()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::push_arrow
    -
    - -

    Pushes a new plot_arrow object onto the plot.

    -
    Syntax
    subroutine push_arrow(class(plot) this, class(plot_arrow) x, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot object.
    [in]xThe plot_arrow object. This instance is copied, and the copy is stored and managed by the plot object.
    [in,out]errAn optional errors-based object for managing errors. The default implementation of the errors type is used if nothing is supplied.
    -
    -
    - -

    Definition at line 3257 of file fplot_core.f90.

    - -
    -
    - -

    ◆ push_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::push_label
    -
    - -

    Adds a label to the plot.

    -
    Syntax
    subroutine push_label(class(plot) this, class(plot_labels) lbl, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot object.
    [in]lblThe plot label.
    [in,out]errAn optional errors-based object for managing errors. The default implementation of the errors type is used if nothing is supplied.
    -
    -
    - -

    Definition at line 3111 of file fplot_core.f90.

    - -
    -
    - -

    ◆ save_file()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::save_file
    -
    - -

    Saves a GNUPLOT command file.

    -
    Syntax
    subroutine save_file(class(plot) this, character(len = *) fname, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in]thisThe plot object.
    [in]fnameThe filename.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_GNUPLOT_FILE_ERROR: Occurs if the command file cannot be written.
    • -
    -
    -
    -
    - -

    Definition at line 3012 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set
    -
    - -

    Sets the requested plot_data object into the plot.

    -
    Syntax
    subroutine set(class(plot) this, integer(int32) i, class(plot_data) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot object.
    [in]iThe index of the plot_data object.
    [in]xThe plot_data object.
    -
    -
    - -

    Definition at line 2947 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_arrow()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_arrow
    -
    - -

    Sets a plot_arrow into the plot.

    -
    Syntax
    subroutine set_arrow(class(plot) this, integer(int32) i, class(plot_arrow) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot object.
    [in]iThe index of the plot_arrow to retrieve.
    [in]xThe plot_arrow to set. This instance is copied, and the copy is stored and managed by the plot object.
    -
    -
    - -

    Definition at line 3288 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_axis_equal()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_axis_equal
    -
    - -

    Sets a flag determining if the axes should be equally scaled.

    -
    Syntax
    subroutine set_axis_equal(class(plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]xSet to true if the axes should be scaled equally; else, false.
    -
    -
    - -

    Definition at line 3183 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_colormap()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_colormap
    -
    - -

    Sets the colormap object.

    -
    Syntax
    subroutine set_colormap(class(plot) this, class(colormap) x, optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot object.
    [in]xThe colormap object. Notice, a copy of this object is stored, and the plot object then manages the lifetime of the copy.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 3212 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_border()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_draw_border
    -
    - -

    Sets a value determining if the border should be drawn.

    -
    Syntax
    subroutine set_draw_border(class(plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]xSet to true if the border should be drawn; else, false.
    -
    -
    - -

    Definition at line 3098 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_font_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_font_name
    -
    - -

    Sets the name of the font used for plot text.

    -
    Syntax
    subroutine set_font_name(class(plot) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]xThe font name.
    -
    -
    - -

    Definition at line 3032 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_font_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_font_size
    -
    - -

    Sets the size of the font used by the plot.

    -
    Syntax
    subroutine set_font_size(class(plot) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]xThe font size, in points. If a value of zero is provided, the font size is reset to its default value; or, if a negative value is provided, the absolute value of the supplied value is utilized.
    -
    -
    - -

    Definition at line 3054 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_label
    -
    - -

    Sets the specified plot_label object.

    -
    Syntax
    subroutine set_label(class(plot) this, integer(int32) i, class(plot_label) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot object.
    [in]iThe index of the plot_label to replace.
    [in]xThe new plot_label object.
    -
    -
    - -

    Definition at line 3142 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_show_colorbar()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_show_colorbar
    -
    - -

    Sets a value determining if the colorbar should be shown.

    -
    Syntax
    subroutine set_show_colorbar(class(plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]xSet to true if the colorbar should be drawn; else, false.
    -
    -
    - -

    Definition at line 3232 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_show_gridlines()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_show_gridlines
    -
    - -

    Sets a flag determining if the grid lines should be shown.

    -
    Syntax
    subroutine set_show_gridlines(class(plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]xSet to true if the grid lines should be shown; else, false.
    -
    -
    - -

    Definition at line 2977 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_tics_inward()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_tics_inward
    -
    - -

    Sets a value determining if the axis tic marks should point inwards.

    -
    Syntax
    subroutine set_tics_inward(class(plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]xSet to true if the tic marks should point inwards; else, false if the tic marks should point outwards.
    -
    -
    - -

    Definition at line 3078 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot::set_title
    -
    - -

    Sets the plot's title.

    -
    Syntax
    subroutine set_title(class(plot) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot object.
    [in]txtThe plot's title. The number of characters must be less than or equal to PLOTDATA_MAX_NAME_LENGTH; else, the text string is truncated.
    -
    -
    - -

    Definition at line 2859 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_arrows

    - -
    -
    - - - - -
    type(list) fplot_core::plot::m_arrows
    -
    - -

    A collection of plot_arrow items to draw.

    - -

    Definition at line 2801 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_axisequal

    - -
    -
    - - - - -
    logical fplot_core::plot::m_axisequal = .false.
    -
    - -

    Determines if the axes should be scaled proportionally.

    - -

    Definition at line 2795 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_colorindex

    - -
    -
    - - - - -
    integer(int32) fplot_core::plot::m_colorindex = 1
    -
    - -

    The color index to use for automatic line coloring for scatter plots.

    - -

    Definition at line 2793 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_colormap

    - -
    -
    - - - - -
    class(colormap), pointer fplot_core::plot::m_colormap
    -
    - -

    The colormap.

    - -

    Definition at line 2797 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_data

    - -
    -
    - - - - -
    type(list) fplot_core::plot::m_data
    -
    - -

    A collection of plot_data items to plot.

    - -

    Definition at line 2781 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_drawborder

    - -
    -
    - - - - -
    logical fplot_core::plot::m_drawborder = .true.
    -
    - -

    Draw the border?

    - -

    Definition at line 2789 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_hastitle

    - -
    -
    - - - - -
    logical fplot_core::plot::m_hastitle = .false.
    -
    - -

    Has a title?

    - -

    Definition at line 2777 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_labels

    - -
    -
    - - - - -
    type(list) fplot_core::plot::m_labels
    -
    - -

    A collection of plot_label items to draw.

    - -

    Definition at line 2791 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_legend

    - -
    -
    - - - - -
    type(legend), pointer fplot_core::plot::m_legend => null()
    -
    - -

    The legend.

    - -

    Definition at line 2783 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_showcolorbar

    - -
    -
    - - - - -
    logical fplot_core::plot::m_showcolorbar = .true.
    -
    - -

    Show the colorbar?

    - -

    Definition at line 2799 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_showgrid

    - -
    -
    - - - - -
    logical fplot_core::plot::m_showgrid = .true.
    -
    - -

    Show grid lines?

    - -

    Definition at line 2785 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_terminal

    - -
    -
    - - - - -
    class(terminal), pointer fplot_core::plot::m_terminal => null()
    -
    - -

    The GNUPLOT terminal object to target.

    - -

    Definition at line 2779 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_ticsin

    - -
    -
    - - - - -
    logical fplot_core::plot::m_ticsin = .true.
    -
    - -

    Point tic marks in?

    - -

    Definition at line 2787 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_title

    - -
    -
    - - - - - -
    - - - - -
    character(len = plotdata_max_name_length) fplot_core::plot::m_title = ""
    -
    -private
    -
    - -

    The plot title.

    - -

    Definition at line 2775 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot.js b/docs/html/structfplot__core_1_1plot.js deleted file mode 100644 index f05dc73..0000000 --- a/docs/html/structfplot__core_1_1plot.js +++ /dev/null @@ -1,61 +0,0 @@ -var structfplot__core_1_1plot = -[ - [ "clear_all", "structfplot__core_1_1plot.html#a34d776a2c321b9ac7676945d95990e16", null ], - [ "clear_all_labels", "structfplot__core_1_1plot.html#abf9538a6514fb1ed53d5715aacd58e2a", null ], - [ "clear_arrows", "structfplot__core_1_1plot.html#aef6ccd30310590087ea05f427a799b80", null ], - [ "draw", "structfplot__core_1_1plot.html#a9d4351a5ce5288b8f1b8a0e67d5bc5b2", null ], - [ "free_resources", "structfplot__core_1_1plot.html#a8747b4e5569b5a025ba6264252358cfd", null ], - [ "get", "structfplot__core_1_1plot.html#aa98ef8753bb01d52623636be3b496129", null ], - [ "get_arrow", "structfplot__core_1_1plot.html#a95d3fb67a1e5a8be3881c98ef3dc88bd", null ], - [ "get_arrow_count", "structfplot__core_1_1plot.html#a3e928c6fed0bfd47b4875fa409f592c2", null ], - [ "get_axis_equal", "structfplot__core_1_1plot.html#ac7bc0d5bc86c478ec9cf19345b84c5ed", null ], - [ "get_colormap", "structfplot__core_1_1plot.html#a132b8951071c0f8f15a0282625c2975e", null ], - [ "get_command_string", "structfplot__core_1_1plot.html#a9a16fc8a4c67e031c1202754f32d1153", null ], - [ "get_count", "structfplot__core_1_1plot.html#a949ae875c30e1b06cb86bb7bb8958e73", null ], - [ "get_draw_border", "structfplot__core_1_1plot.html#af6ce304fe4acb418af76d672f99c1fb9", null ], - [ "get_font_name", "structfplot__core_1_1plot.html#af6528d0d7a8e62f968e8818012732b09", null ], - [ "get_font_size", "structfplot__core_1_1plot.html#abc559881bc8d4bea9b716964e37e92ed", null ], - [ "get_label", "structfplot__core_1_1plot.html#a05d9262e904709835f79533d63eba64e", null ], - [ "get_label_count", "structfplot__core_1_1plot.html#ab6240e8f98ecc508d3bc39adc44e8a6c", null ], - [ "get_legend", "structfplot__core_1_1plot.html#abf7fb454462b1d553fe3995575f77d15", null ], - [ "get_show_colorbar", "structfplot__core_1_1plot.html#a5b11d0a4762b08daa7176b50d2d445fd", null ], - [ "get_show_gridlines", "structfplot__core_1_1plot.html#ad6c6e15a4b1d960252b5bfe1d380a5f3", null ], - [ "get_terminal", "structfplot__core_1_1plot.html#ad2401d852a81076fe72cf8a808fde792", null ], - [ "get_tics_inward", "structfplot__core_1_1plot.html#a688f3645c69308cf608231a21b0aed64", null ], - [ "get_title", "structfplot__core_1_1plot.html#a133ef2de58d480ba1a3192cc26a5c58d", null ], - [ "initialize", "structfplot__core_1_1plot.html#ada6347bd02ef1b85a1206ef1a6a72f91", null ], - [ "is_title_defined", "structfplot__core_1_1plot.html#a49cd3527b815c57b7f0aaf163686c385", null ], - [ "pop", "structfplot__core_1_1plot.html#ad33c34e40f57938ecd001e808bf23faa", null ], - [ "pop_arrow", "structfplot__core_1_1plot.html#acbc277a0af6af597663ea0121ecfbdfa", null ], - [ "pop_label", "structfplot__core_1_1plot.html#a3b8d7885c017cdea67018693824d2a28", null ], - [ "push", "structfplot__core_1_1plot.html#a4d990dba35771bb91c4b369e749359b1", null ], - [ "push_arrow", "structfplot__core_1_1plot.html#ac9e18069b5f30cdf389bd2d875e9160a", null ], - [ "push_label", "structfplot__core_1_1plot.html#a52aebc916dcd0daee352bd121f44571b", null ], - [ "save_file", "structfplot__core_1_1plot.html#a7e9f2ba3cabac241fc87b08cab6a7964", null ], - [ "set", "structfplot__core_1_1plot.html#a60f699ff08a69ffd0639e02cef732fbc", null ], - [ "set_arrow", "structfplot__core_1_1plot.html#a97b39f1d655613d423431a225b9ac525", null ], - [ "set_axis_equal", "structfplot__core_1_1plot.html#a3ab0098ecdd19537b4b4810e584d6178", null ], - [ "set_colormap", "structfplot__core_1_1plot.html#a6a2220252ff39e46984cdd41f2f2d408", null ], - [ "set_draw_border", "structfplot__core_1_1plot.html#ae400616706a0cb419a5251c12174d822", null ], - [ "set_font_name", "structfplot__core_1_1plot.html#a3687c06edaac5f2e47c3a04266effd1f", null ], - [ "set_font_size", "structfplot__core_1_1plot.html#a755597835c9d424143b8942f4d699a34", null ], - [ "set_label", "structfplot__core_1_1plot.html#a1bae57bcb9098707fba5267fa22a433d", null ], - [ "set_show_colorbar", "structfplot__core_1_1plot.html#a6f9b326354b3d8dfa707e871a7519713", null ], - [ "set_show_gridlines", "structfplot__core_1_1plot.html#a929a7d1f892cd92b7ce9387adb4168c0", null ], - [ "set_tics_inward", "structfplot__core_1_1plot.html#aa9b08eb0848255279f04d7ff4c5bf5f2", null ], - [ "set_title", "structfplot__core_1_1plot.html#a1925b89a6abe05c4728c839844b507f1", null ], - [ "m_arrows", "structfplot__core_1_1plot.html#a4377389ba8b66d31852367a81eefee27", null ], - [ "m_axisequal", "structfplot__core_1_1plot.html#a9a39b7ef7066651e8acd9cf4777941b0", null ], - [ "m_colorindex", "structfplot__core_1_1plot.html#a423c6b5d5a4077e12672a789d0dd07f4", null ], - [ "m_colormap", "structfplot__core_1_1plot.html#a124d1fc324d2ac66811305862a1818bd", null ], - [ "m_data", "structfplot__core_1_1plot.html#a955e9ed1d0626325807467f18928f7af", null ], - [ "m_drawborder", "structfplot__core_1_1plot.html#aa6041d60ec2b7939ff62dfe315c533bb", null ], - [ "m_hastitle", "structfplot__core_1_1plot.html#a3e292f8044d1c963bde7a45a5fd091f5", null ], - [ "m_labels", "structfplot__core_1_1plot.html#a749f5e716823b818c276e26d301a43da", null ], - [ "m_legend", "structfplot__core_1_1plot.html#a58b6d2d703429e69ced42f71bb24b587", null ], - [ "m_showcolorbar", "structfplot__core_1_1plot.html#a2835b94785e566562783f2b0e1162c58", null ], - [ "m_showgrid", "structfplot__core_1_1plot.html#a1bb6dd426e8a18a2db83063e68d8270b", null ], - [ "m_terminal", "structfplot__core_1_1plot.html#a132bcac346e1cc2fd85c0685ccf7718b", null ], - [ "m_ticsin", "structfplot__core_1_1plot.html#a344af6120545e8a12af51866e44709c1", null ], - [ "m_title", "structfplot__core_1_1plot.html#a212e144bbc88f69b516a0c268b09c501", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot.png b/docs/html/structfplot__core_1_1plot.png deleted file mode 100644 index 3f845321f0af79b081cb43cac1d77e5a895a3ecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1998 zcmb_dYgAKL7QP9gW}v)gVNj4nft1GpIzq}T5#-Srl$a(I5P1n5QB)9t0ES1#Qkpg` zw+&Db0_YHk5esB^SOLMAlEzU82#g@|G(vb95lEs4^r&s8?V2C6X7&EK=bU}c*=v7$ z@9#UG(x_xT9a9|$g7hc{eCZH`kb?Owv=;ckM+^BJ3}&=Lfqt8tn_xP#u$lt@Q|P+K z_UyKzu9=C631BC52MNI5ACl=*1_aixKNn=_00eD0Lh;=nn1)y^TjX8cW2jx4Z)d06 z>`eXO%Y=Zy`(0x(_YPwA?m6T%x!bEoP(Wuu+t_wID?$zlIS>OwOJXuxGi2$Nv0$`w zUlJUiiVKihiE_7G{_d}pauxcig%jLxu6*u&9%jh$7V8kU^`HmydUe~m_3XKOiNq(4 z`50kEZf)$sp++*>BxF_IJyrij>x0>~c)nY=BYLz{TzmqC>grXlE)9jdL=TTmJ^$CA z>MtIHA>~rJ^sW*QU-x36H0T7iJn!1yv%(_!u!so7s#1PDd{u2Uaq#qur52h#cREVp zIOmQ{?N3Wywoi77@wf+$MNKE(?4;1OC6^7Xhb_HGJ*175t|@DZfvtWMnQgGVwysGl z2Phk!*-#=SSj5~fp{me^6$SJ-9Z2ix*7J~-p(zW6K0JQZ$}1Tpg6L`L@W-950KQ4R z-+$5r?%-G`4opIJO0kGXzs=tNyM0SN(^7j1L_+f`N|Nb;+^qgokRM(4FyPV5@12`M zv(m2sK+BD_b+>Q3DYRASv+o?98x9{9w-Tlb=QkN}o;)%2Vx#N&PG<$*1$ZIh*VB^R zPRrw&FWSvwsSUWCY5p>Xg}NfVEg$K+A0xW~O7Z}UpvqBjQ3VP4(n7H!m$jUNA>q>G zPgTgc^V=#krtT<7l9??ST`G^o#&Tn2Zi965I1qT-%#!eiV+TJeivye?pMd6So3v5z zJ@fucyM+&?1R$cIc5j0y$QxvHa+bwKalpwO1-a4>i2_O9KsNs`Nw*Ow*Tz;d$Ab~Q z#(EtqRJ}`vCc2jZPMb~e8*6lu?%DP({wpkI;@*~4=Ib(3gv{*7g?KQT7E?Ih2(0$VjI7jad-Q?F)lq!8vmj_ zzwvmXCPEx^s#x$m=<$+Z08_{l;9*iZum9QBknkB}xG0h$j{h!lHKb%X;kBtsvtBv=o(=7r-mX#+kS)Icl3mB^D_1DtSPWHFWys)pTVBdbu05oht zq5E`!@O|E30qh5ujsZ-7LO`N+;Rs3*3dYmj~R}daNnr)A5*Y`GW1yr<#k& zs*1zBJkAqwYg_H;V%1F`&?|-KL9lXAtm0?|0*PC&q@CwLfHGH#O?S^9v78Z1ClGlCz7H^N&+J z-ZrO(!@EBuDy2pJH^$F3)Q&xtePnVZ{uOd&)mMV(G4$xFW`lqiU8pQwH-bHt)32U@ zbj!x?V - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_2d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_2d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_allplt_clear_allfplot_core::plot
    clear_all_labelsplt_clear_labelsfplot_core::plot
    clear_arrowsplt_clear_arrowsfplot_core::plot
    drawplt_drawfplot_core::plot
    free_resourcesplt_clean_upfplot_core::plot
    getplt_getfplot_core::plot
    get_arrowplt_get_arrowfplot_core::plot
    get_arrow_countplt_get_arrow_countfplot_core::plot
    get_axis_equalplt_get_axis_equalfplot_core::plot
    get_colormapplt_get_colormapfplot_core::plot
    get_command_stringp2d_get_cmdfplot_core::plot_2dvirtual
    get_countplt_get_countfplot_core::plot
    get_draw_borderplt_get_draw_borderfplot_core::plot
    get_font_nameplt_get_fontfplot_core::plot
    get_font_sizeplt_get_font_sizefplot_core::plot
    get_labelplt_get_labelfplot_core::plot
    get_label_countplt_get_label_countfplot_core::plot
    get_legendplt_get_legendfplot_core::plot
    get_show_colorbarplt_get_show_colorbarfplot_core::plot
    get_show_gridlinesplt_get_show_gridfplot_core::plot
    get_square_axesp2d_get_square_axesfplot_core::plot_2d
    get_terminalplt_get_termfplot_core::plot
    get_tics_inwardplt_get_tics_infplot_core::plot
    get_titleplt_get_titlefplot_core::plot
    get_use_y2_axisp2d_get_use_y2fplot_core::plot_2d
    get_x_axisp2d_get_x_axisfplot_core::plot_2d
    get_y2_axisp2d_get_y2_axisfplot_core::plot_2d
    get_y_axisp2d_get_y_axisfplot_core::plot_2d
    initializep2d_initfplot_core::plot_2d
    is_title_definedplt_has_titlefplot_core::plot
    m_arrowsfplot_core::plot
    m_axisequalfplot_core::plot
    m_colorindexfplot_core::plot
    m_colormapfplot_core::plot
    m_datafplot_core::plot
    m_drawborderfplot_core::plot
    m_hastitlefplot_core::plot
    m_labelsfplot_core::plot
    m_legendfplot_core::plot
    m_set2squarefplot_core::plot_2d
    m_showcolorbarfplot_core::plot
    m_showgridfplot_core::plot
    m_terminalfplot_core::plot
    m_ticsinfplot_core::plot
    m_titlefplot_core::plotprivate
    m_usey2fplot_core::plot_2d
    m_xaxisfplot_core::plot_2dprivate
    m_y2axisfplot_core::plot_2d
    m_yaxisfplot_core::plot_2d
    p2d_clean_upp2d_clean_upfplot_core::plot_2d
    popplt_pop_datafplot_core::plot
    pop_arrowplt_pop_arrowfplot_core::plot
    pop_labelplt_pop_labelfplot_core::plot
    pushplt_push_datafplot_core::plot
    push_arrowplt_push_arrowfplot_core::plot
    push_labelplt_push_labelfplot_core::plot
    save_fileplt_savefplot_core::plot
    setplt_setfplot_core::plot
    set_arrowplt_set_arrowfplot_core::plot
    set_axis_equalplt_set_axis_equalfplot_core::plot
    set_colormapplt_set_colormapfplot_core::plot
    set_draw_borderplt_set_draw_borderfplot_core::plot
    set_font_nameplt_set_fontfplot_core::plot
    set_font_sizeplt_set_font_sizefplot_core::plot
    set_labelplt_set_labelfplot_core::plot
    set_show_colorbarplt_set_show_colorbarfplot_core::plot
    set_show_gridlinesplt_set_show_gridfplot_core::plot
    set_square_axesp2d_set_square_axesfplot_core::plot_2d
    set_tics_inwardplt_set_tics_infplot_core::plot
    set_titleplt_set_titlefplot_core::plot
    set_use_y2_axisp2d_set_use_y2fplot_core::plot_2d
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__2d.html b/docs/html/structfplot__core_1_1plot__2d.html deleted file mode 100644 index f954469..0000000 --- a/docs/html/structfplot__core_1_1plot__2d.html +++ /dev/null @@ -1,761 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_2d Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_2d Type Reference
    -
    -
    - -

    A plot object defining a 2D plot. - More...

    -
    -Inheritance diagram for fplot_core::plot_2d:
    -
    -
    - - -fplot_core::plot -fplot_core::plot_object -fplot_core::plot_bar - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    final p2d_clean_up p2d_clean_up
     Cleans up resources held by the plot_2d object.
     
    procedure, public initialize p2d_init
     Initializes the plot_2d object.
     
    procedure, public get_command_string p2d_get_cmd
     Gets the GNUPLOT command string to represent this plot_2d object.
     
    procedure, public get_x_axis p2d_get_x_axis
     Gets the x-axis object.
     
    procedure, public get_y_axis p2d_get_y_axis
     Gets the y-axis object.
     
    procedure, public get_y2_axis p2d_get_y2_axis
     Gets the secondary y-axis object.
     
    procedure, public get_use_y2_axis p2d_get_use_y2
     Gets a flag determining if the secondary y-axis should be displayed.
     
    procedure, public set_use_y2_axis p2d_set_use_y2
     Sets a flag determining if the secondary y-axis should be displayed.
     
    procedure, public get_square_axes p2d_get_square_axes
     Gets a logical flag determining if the axes size should be squared off.
     
    procedure, public set_square_axes p2d_set_square_axes
     Sets a logical flag determining if the axes size should be squared off.
     
    - Public Member Functions inherited from fplot_core::plot
    procedure, public free_resources plt_clean_up
     Cleans up resources held by the plot object. Inheriting classes are expected to call this routine to free internally held resources.
     
    procedure, public initialize plt_init
     Initializes the plot object.
     
    procedure, public get_title plt_get_title
     Gets the plot's title.
     
    procedure, public set_title plt_set_title
     Sets the plot's title.
     
    procedure, public is_title_defined plt_has_title
     Gets a value determining if a title has been defined for the plot object.
     
    procedure, public get_legend plt_get_legend
     Gets the plot's legend object.
     
    procedure, public get_count plt_get_count
     Gets the number of stored plot_data objects.
     
    procedure, public push plt_push_data
     Pushes a plot_data object onto the stack.
     
    procedure, public pop plt_pop_data
     Pops the last plot_data object from the stack.
     
    procedure, public clear_all plt_clear_all
     Removes all plot_data objects from the plot.
     
    procedure, public get plt_get
     Gets a pointer to the requested plot_data object.
     
    procedure, public set plt_set
     Sets the requested plot_data object into the plot.
     
    procedure, public get_terminal plt_get_term
     Gets the GNUPLOT terminal object.
     
    procedure, public get_show_gridlines plt_get_show_grid
     Gets a flag determining if the grid lines should be shown.
     
    procedure, public set_show_gridlines plt_set_show_grid
     Sets a flag determining if the grid lines should be shown.
     
    procedure, public draw plt_draw
     Launches GNUPLOT and draws the plot per the current state of the command list.
     
    procedure, public save_file plt_save
     Saves a GNUPLOT command file.
     
    procedure, public get_font_name plt_get_font
     Gets the name of the font used for plot text.
     
    procedure, public set_font_name plt_set_font
     Sets the name of the font used for plot text.
     
    procedure, public get_font_size plt_get_font_size
     Gets the size of the font used by the plot.
     
    procedure, public set_font_size plt_set_font_size
     Sets the size of the font used by the plot.
     
    procedure, public get_tics_inward plt_get_tics_in
     Gets a value determining if the axis tic marks should point inwards.
     
    procedure, public set_tics_inward plt_set_tics_in
     Sets a value determining if the axis tic marks should point inwards.
     
    procedure, public get_draw_border plt_get_draw_border
     Gets a value determining if the border should be drawn.
     
    procedure, public set_draw_border plt_set_draw_border
     Sets a value determining if the border should be drawn.
     
    procedure, public push_label plt_push_label
     Adds a label to the plot.
     
    procedure, public pop_label plt_pop_label
     Removes the last label from the plot.
     
    procedure, public get_label plt_get_label
     Gets the requested plot_label from the plot.
     
    procedure, public set_label plt_set_label
     Sets the specified plot_label object.
     
    procedure, public get_label_count plt_get_label_count
     Gets the number of plot_label objects belonging to the plot.
     
    procedure, public clear_all_labels plt_clear_labels
     Clears all plot_label objects from the plot.
     
    procedure, public get_axis_equal plt_get_axis_equal
     Gets a flag determining if the axes should be equally scaled.
     
    procedure, public set_axis_equal plt_set_axis_equal
     Sets a flag determining if the axes should be equally scaled.
     
    procedure, public get_colormap plt_get_colormap
     Gets a pointer to the colormap object.
     
    procedure, public set_colormap plt_set_colormap
     Sets the colormap object.
     
    procedure, public get_show_colorbar plt_get_show_colorbar
     Gets a value determining if the colorbar should be shown.
     
    procedure, public set_show_colorbar plt_set_show_colorbar
     Sets a value determining if the colorbar should be shown.
     
    procedure, public push_arrow plt_push_arrow
     Pushes a new plot_arrow object onto the plot.
     
    procedure, public pop_arrow plt_pop_arrow
     Pops a plot_arrow object from the plot.
     
    procedure, public get_arrow plt_get_arrow
     Gets a pointer to the requested plot_arrow object.
     
    procedure, public set_arrow plt_set_arrow
     Sets a plot_arrow into the plot.
     
    procedure, public get_arrow_count plt_get_arrow_count
     Gets the number of plot_arrow objects held by the plot object.
     
    procedure, public clear_arrows plt_clear_arrows
     Clears all plot_arrow objects from the plot.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    type(y_axis), pointer m_yaxis => null()
     The y-axis.
     
    type(y2_axis), pointer m_y2axis => null()
     The secondary y-axis.
     
    logical m_usey2 = .false.
     Display the secondary y axis?
     
    logical m_set2square = .false.
     Set to square scaling.
     
    - Public Attributes inherited from fplot_core::plot
    logical m_hastitle = .false.
     Has a title?
     
    class(terminal), pointer m_terminal => null()
     The GNUPLOT terminal object to target.
     
    type(list) m_data
     A collection of plot_data items to plot.
     
    type(legend), pointer m_legend => null()
     The legend.
     
    logical m_showgrid = .true.
     Show grid lines?
     
    logical m_ticsin = .true.
     Point tic marks in?
     
    logical m_drawborder = .true.
     Draw the border?
     
    type(list) m_labels
     A collection of plot_label items to draw.
     
    integer(int32) m_colorindex = 1
     The color index to use for automatic line coloring for scatter plots.
     
    logical m_axisequal = .false.
     Determines if the axes should be scaled proportionally.
     
    class(colormap), pointer m_colormap
     The colormap.
     
    logical m_showcolorbar = .true.
     Show the colorbar?
     
    type(list) m_arrows
     A collection of plot_arrow items to draw.
     
    - - - - -

    -Private Attributes

    type(x_axis), pointer m_xaxis => null()
     The x-axis.
     
    -

    Detailed Description

    -

    A plot object defining a 2D plot.

    - -

    Definition at line 4838 of file fplot_core.f90.

    -

    Constructor & Destructor Documentation

    - -

    ◆ p2d_clean_up()

    - -
    -
    - - - - - -
    - - - - -
    final fplot_core::plot_2d::p2d_clean_up
    -
    -final
    -
    - -

    Cleans up resources held by the plot_2d object.

    -
    Syntax
    subroutine p2d_clean_up(type(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot_2d object.
    -
    -
    - -

    Definition at line 4859 of file fplot_core.f90.

    - -
    -
    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_2d::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this plot_2d object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_2d object.
    -
    -
    -
    Returns
    The command string.
    - -

    Reimplemented from fplot_core::plot.

    - -

    Reimplemented in fplot_core::plot_bar.

    - -

    Definition at line 4894 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_square_axes()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::get_square_axes
    -
    - -

    Gets a logical flag determining if the axes size should be squared off.

    -
    Syntax
    logical get_square_axes(class(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_2d object.
    -
    -
    -
    Returns
    Returns true if the axes are to be sized to a square; else, false.
    - -

    Definition at line 4959 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_y2_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::get_use_y2_axis
    -
    - -

    Gets a flag determining if the secondary y-axis should be displayed.

    -
    Syntax
    pure logical function get_use_y2_axis(class(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_2d object.
    -
    -
    -
    Returns
    Returns true if the axis should be displayed; else, false.
    - -

    Definition at line 4936 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::get_x_axis
    -
    - -

    Gets the x-axis object.

    -
    Syntax
    class(plot_axis) function, pointer get_x_axis(class(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_2d object.
    -
    -
    -
    Returns
    A pointer to the x-axis object.
    - -

    Definition at line 4905 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y2_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::get_y2_axis
    -
    - -

    Gets the secondary y-axis object.

    -
    Syntax
    class(plot_axis) function, pointer get_y2_axis(class(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_2d object.
    -
    -
    -
    Returns
    A pointer to the secondary y-axis object.
    - -

    Definition at line 4925 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::get_y_axis
    -
    - -

    Gets the y-axis object.

    -
    Syntax
    class(plot_axis) function, pointer get_y_axis(class(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_2d object.
    -
    -
    -
    Returns
    A pointer to the y-axis object.
    - -

    Definition at line 4915 of file fplot_core.f90.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::initialize
    -
    - -

    Initializes the plot_2d object.

    -
    Syntax
    subroutine initialize(class(plot_2d) this, optional integer(int32) term, optional class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in]thisThe plot_2d object.
    [in]termAn optional input that is used to define the terminal. The default terminal is a WXT terminal. The acceptable inputs are:
      -
    • GNUPLOT_TERMINAL_PNG
    • -
    • GNUPLOT_TERMINAL_QT
    • -
    • GNUPLOT_TERMINAL_WIN32
    • -
    • GNUPLOT_TERMINAL_WXT
    • -
    • GNUPLOT_TERMINAL_LATEX
    • -
    -
    [in]fnameA filename to pass to the terminal in the event the terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG).
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 4883 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_square_axes()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::set_square_axes
    -
    - -

    Sets a logical flag determining if the axes size should be squared off.

    -
    Syntax
    subroutine set_square_axes(class(plot_2d) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_2d object.
    [in]Setto true if the axes are to be sized to a square; else, false.
    -
    -
    - -

    Definition at line 4971 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_y2_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_2d::set_use_y2_axis
    -
    - -

    Sets a flag determining if the secondary y-axis should be displayed.

    -
    Syntax
    subroutine set_use_y2_axis(class(plot_2d) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_2d object.
    [in]xSet to true if the axis should be displayed; else, false.
    -
    -
    - -

    Definition at line 4947 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_set2square

    - -
    -
    - - - - -
    logical fplot_core::plot_2d::m_set2square = .false.
    -
    - -

    Set to square scaling.

    - -

    Definition at line 4849 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_usey2

    - -
    -
    - - - - -
    logical fplot_core::plot_2d::m_usey2 = .false.
    -
    - -

    Display the secondary y axis?

    - -

    Definition at line 4847 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_xaxis

    - -
    -
    - - - - - -
    - - - - -
    type(x_axis), pointer fplot_core::plot_2d::m_xaxis => null()
    -
    -private
    -
    - -

    The x-axis.

    - -

    Definition at line 4841 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_y2axis

    - -
    -
    - - - - -
    type(y2_axis), pointer fplot_core::plot_2d::m_y2axis => null()
    -
    - -

    The secondary y-axis.

    - -

    Definition at line 4845 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_yaxis

    - -
    -
    - - - - -
    type(y_axis), pointer fplot_core::plot_2d::m_yaxis => null()
    -
    - -

    The y-axis.

    - -

    Definition at line 4843 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__2d.js b/docs/html/structfplot__core_1_1plot__2d.js deleted file mode 100644 index af12af4..0000000 --- a/docs/html/structfplot__core_1_1plot__2d.js +++ /dev/null @@ -1,18 +0,0 @@ -var structfplot__core_1_1plot__2d = -[ - [ "p2d_clean_up", "structfplot__core_1_1plot__2d.html#aeb55d7671f449779041c822189e86048", null ], - [ "get_command_string", "structfplot__core_1_1plot__2d.html#a82afa27b47f88385d430dd3c9b145d20", null ], - [ "get_square_axes", "structfplot__core_1_1plot__2d.html#ae408393a833c5978996701ab198ba0bb", null ], - [ "get_use_y2_axis", "structfplot__core_1_1plot__2d.html#a90474e948b36c694223ab528dedcd2bc", null ], - [ "get_x_axis", "structfplot__core_1_1plot__2d.html#af162aeb3b01f1d64c741889a0cd58cc8", null ], - [ "get_y2_axis", "structfplot__core_1_1plot__2d.html#a3f312d0ddd992171e7fef6ac7b142698", null ], - [ "get_y_axis", "structfplot__core_1_1plot__2d.html#ab423155405406198f9d01bbba1311baf", null ], - [ "initialize", "structfplot__core_1_1plot__2d.html#a14de301a52d28381d2e20e8b61e7b90f", null ], - [ "set_square_axes", "structfplot__core_1_1plot__2d.html#afc8ab071b8c099aebcf795a3cf10fe9e", null ], - [ "set_use_y2_axis", "structfplot__core_1_1plot__2d.html#a60849bb67d78d07ebb62ae2aedd298ad", null ], - [ "m_set2square", "structfplot__core_1_1plot__2d.html#a9cd3bd4fc18c1c07e7cb76ca1cf60d7b", null ], - [ "m_usey2", "structfplot__core_1_1plot__2d.html#a5fe52108ffac0ca723f0061111082338", null ], - [ "m_xaxis", "structfplot__core_1_1plot__2d.html#a5c4e65a6726f52d0f2f037615b9250bd", null ], - [ "m_y2axis", "structfplot__core_1_1plot__2d.html#a3079dfde8daa66c4a79e3d3454b40e2c", null ], - [ "m_yaxis", "structfplot__core_1_1plot__2d.html#ad91b551d76ef69f571f87511de97a3e8", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__2d.png b/docs/html/structfplot__core_1_1plot__2d.png deleted file mode 100644 index ba34627efce5900b52c14e15832d0ed3c14475be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1053 zcmeAS@N?(olHy`uVBq!ia0vp^9YB15gBeJ^$iJNkq@)9ULR|m<{|^#*^R=}9&~gg{ z%>s$(XI?yb@Bk=odNyncP>!=C$S;@y$Oi*+rrB2*7?@Xhx;TbZFutApwy#Bj$CZEj zkq`g;_dI6z`g=sOygkQir@6wGcN@jN>l+@s(bPHVORaT>iZc7elr0S{6Rtn=G@QJI zYyJ{HZui&59)cfMD@;n+!^BzZcqn4p!NXsJmfD!Es*gOgJJ=n5-H%pCepIaRdfM*biDwO~w!53HfA&x= z()8QOm70EsSFFC$96Xu%?DVhS(jWI;S$sfy!orPR%O@|f4PU;GTglUOov&@r=l}aA z^~ktP3iMV0y19YTu8jRcQ#9ktU2YyxjFp93953;7%$H)wW@qe?VKFEYIB>#|K^Z&e zMSbHDiDYgyuS?(GDu4~WXz9W6IVW=R66NbL)T?q{yWNSL z`AfVeeN1(Ao8eihvF*8{yWU0hm6K9xd4uj%aVvrR`iphKzw0a~{C)*1e6`(FY0Ce- zBlqv4+nX#+z0WLp9O7xT@6V=t|8n-s{Ka?T!o+m{@8JrQLLR3(s=U;H19b(r$}tIP zg9FFkF+>$;E5u&s@YGh&?=$n5#rQFpIpM8B!^CC=H$El_OOAvm*g1doCkQxY9Bi2q z^lP82%F>i43Yw~mZ6_G$>sD_sEDw%vfBd4(S|Rn(W`(~wyH+tst~iVmrT#(BzrO0~ zF_`=*K`#4e^3zKn+WCXK-(*erbS-+ql%N|Qxk}hmw32H3@36eAH&uB2McnaQSN+^s zK~Y~S`*Y&XR=#>Gw{dNJ+B*NULdGu*O!pr;75w>H`s2q}swO-v+@|WQsruMFIC{N@ zm*(HKaQBIOa44E2H1ywP-0~pIVb?mrNns9gGPx5>m>(@?J8%nUJR)NFS3EFL{8+hL zBKgk+7f+zqT_#Oz_At8D&|+|YnyKfm$9u1I&tBu$^)0_k1D0 z(e2|aFHiH_yW#|gu_ph~Z#GX(sQ%Kqx<*{LfC(P8RbO~kznrY__dVMQk$>C@)-O%- zLxWcGSEqc=dR6TbwDND)jcfYS*|k~IW_Y%*e7e%G<#_zH+w*(XgR~vn`eNo=ct-vF sdu5rnl4pG$Fq1t2Mt2-I71uME-dOG>kT13gn2{MgUHx3vIVCg!05BZebN~PV diff --git a/docs/html/structfplot__core_1_1plot__3d-members.html b/docs/html/structfplot__core_1_1plot__3d-members.html deleted file mode 100644 index a98b6ce..0000000 --- a/docs/html/structfplot__core_1_1plot__3d-members.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_3d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_3d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_allplt_clear_allfplot_core::plot
    clear_all_labelsplt_clear_labelsfplot_core::plot
    clear_arrowsplt_clear_arrowsfplot_core::plot
    drawplt_drawfplot_core::plot
    free_resourcesplt_clean_upfplot_core::plot
    getplt_getfplot_core::plot
    get_arrowplt_get_arrowfplot_core::plot
    get_arrow_countplt_get_arrow_countfplot_core::plot
    get_axis_equalplt_get_axis_equalfplot_core::plot
    get_azimuthp3d_get_azimuthfplot_core::plot_3d
    get_colormapplt_get_colormapfplot_core::plot
    get_command_stringp3d_get_cmdfplot_core::plot_3dvirtual
    get_coordinate_systemp3d_get_csysfplot_core::plot_3d
    get_countplt_get_countfplot_core::plot
    get_draw_borderplt_get_draw_borderfplot_core::plot
    get_elevationp3d_get_elevationfplot_core::plot_3d
    get_font_nameplt_get_fontfplot_core::plot
    get_font_sizeplt_get_font_sizefplot_core::plot
    get_labelplt_get_labelfplot_core::plot
    get_label_countplt_get_label_countfplot_core::plot
    get_legendplt_get_legendfplot_core::plot
    get_show_colorbarplt_get_show_colorbarfplot_core::plot
    get_show_gridlinesplt_get_show_gridfplot_core::plot
    get_terminalplt_get_termfplot_core::plot
    get_tics_inwardplt_get_tics_infplot_core::plot
    get_titleplt_get_titlefplot_core::plot
    get_use_map_viewp3d_get_use_map_viewfplot_core::plot_3d
    get_x_axisp3d_get_x_axisfplot_core::plot_3d
    get_y_axisp3d_get_y_axisfplot_core::plot_3d
    get_z_axisp3d_get_z_axisfplot_core::plot_3d
    get_z_intersect_xyp3d_get_z_axis_intersectfplot_core::plot_3d
    initializep3d_initfplot_core::plot_3d
    is_title_definedplt_has_titlefplot_core::plot
    m_arrowsfplot_core::plot
    m_axisequalfplot_core::plot
    m_azimuthfplot_core::plot_3d
    m_colorindexfplot_core::plot
    m_colormapfplot_core::plot
    m_csysfplot_core::plot_3d
    m_datafplot_core::plot
    m_drawborderfplot_core::plot
    m_elevationfplot_core::plot_3d
    m_hastitlefplot_core::plot
    m_labelsfplot_core::plot
    m_legendfplot_core::plot
    m_setmapfplot_core::plot_3d
    m_showcolorbarfplot_core::plot
    m_showgridfplot_core::plot
    m_terminalfplot_core::plot
    m_ticsinfplot_core::plot
    m_titlefplot_core::plotprivate
    m_xaxisfplot_core::plot_3dprivate
    m_yaxisfplot_core::plot_3d
    m_zaxisfplot_core::plot_3d
    m_zintersectfplot_core::plot_3d
    p3d_clean_upp3d_clean_upfplot_core::plot_3d
    popplt_pop_datafplot_core::plot
    pop_arrowplt_pop_arrowfplot_core::plot
    pop_labelplt_pop_labelfplot_core::plot
    pushplt_push_datafplot_core::plot
    push_arrowplt_push_arrowfplot_core::plot
    push_labelplt_push_labelfplot_core::plot
    save_fileplt_savefplot_core::plot
    setplt_setfplot_core::plot
    set_arrowplt_set_arrowfplot_core::plot
    set_axis_equalplt_set_axis_equalfplot_core::plot
    set_azimuthp3d_set_azimuthfplot_core::plot_3d
    set_colormapplt_set_colormapfplot_core::plot
    set_coordinate_systemp3d_set_csysfplot_core::plot_3d
    set_draw_borderplt_set_draw_borderfplot_core::plot
    set_elevationp3d_set_elevationfplot_core::plot_3d
    set_font_nameplt_set_fontfplot_core::plot
    set_font_sizeplt_set_font_sizefplot_core::plot
    set_labelplt_set_labelfplot_core::plot
    set_show_colorbarplt_set_show_colorbarfplot_core::plot
    set_show_gridlinesplt_set_show_gridfplot_core::plot
    set_tics_inwardplt_set_tics_infplot_core::plot
    set_titleplt_set_titlefplot_core::plot
    set_use_map_viewp3d_set_use_map_viewfplot_core::plot_3d
    set_z_intersect_xyp3d_set_z_axis_intersectfplot_core::plot_3d
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__3d.html b/docs/html/structfplot__core_1_1plot__3d.html deleted file mode 100644 index 5ed861d..0000000 --- a/docs/html/structfplot__core_1_1plot__3d.html +++ /dev/null @@ -1,1012 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_3d Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_3d Type Reference
    -
    -
    - -

    A plot object defining a 3D plot. - More...

    -
    -Inheritance diagram for fplot_core::plot_3d:
    -
    -
    - - -fplot_core::plot -fplot_core::plot_object -fplot_core::surface_plot - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    final p3d_clean_up p3d_clean_up
     Cleans up resources held by the plot_3d object.
     
    procedure, public initialize p3d_init
     Initializes the plot_3d object.
     
    procedure, public get_command_string p3d_get_cmd
     Gets the GNUPLOT command string to represent this plot_3d object.
     
    procedure, public get_x_axis p3d_get_x_axis
     Gets the x-axis object.
     
    procedure, public get_y_axis p3d_get_y_axis
     Gets the y-axis object.
     
    procedure, public get_z_axis p3d_get_z_axis
     Gets the z-axis object.
     
    procedure, public get_elevation p3d_get_elevation
     Gets the plot elevation angle.
     
    procedure, public set_elevation p3d_set_elevation
     Sets the plot elevation angle.
     
    procedure, public get_azimuth p3d_get_azimuth
     Gets the plot azimuth angle.
     
    procedure, public set_azimuth p3d_set_azimuth
     Sets the plot azimuth angle.
     
    procedure, public get_z_intersect_xy p3d_get_z_axis_intersect
     Gets a value determining if the z-axis should intersect the x-y plane.
     
    procedure, public set_z_intersect_xy p3d_set_z_axis_intersect
     Sets a value determining if the z-axis should intersect the x-y plane.
     
    procedure, public get_use_map_view p3d_get_use_map_view
     Gets a value determining if the view should be set to a 2D map view. If true, the azimuth and elevation terms are ignored.
     
    procedure, public set_use_map_view p3d_set_use_map_view
     Sets a value determining if the view should be set to a 2D map view. If true, the azimuth and elevation terms are ignored.
     
    procedure, public get_coordinate_system p3d_get_csys
     Gets a value determining the coordinate system.
     
    procedure, public set_coordinate_system p3d_set_csys
     Sets a value determining the coordinate system.
     
    - Public Member Functions inherited from fplot_core::plot
    procedure, public free_resources plt_clean_up
     Cleans up resources held by the plot object. Inheriting classes are expected to call this routine to free internally held resources.
     
    procedure, public initialize plt_init
     Initializes the plot object.
     
    procedure, public get_title plt_get_title
     Gets the plot's title.
     
    procedure, public set_title plt_set_title
     Sets the plot's title.
     
    procedure, public is_title_defined plt_has_title
     Gets a value determining if a title has been defined for the plot object.
     
    procedure, public get_legend plt_get_legend
     Gets the plot's legend object.
     
    procedure, public get_count plt_get_count
     Gets the number of stored plot_data objects.
     
    procedure, public push plt_push_data
     Pushes a plot_data object onto the stack.
     
    procedure, public pop plt_pop_data
     Pops the last plot_data object from the stack.
     
    procedure, public clear_all plt_clear_all
     Removes all plot_data objects from the plot.
     
    procedure, public get plt_get
     Gets a pointer to the requested plot_data object.
     
    procedure, public set plt_set
     Sets the requested plot_data object into the plot.
     
    procedure, public get_terminal plt_get_term
     Gets the GNUPLOT terminal object.
     
    procedure, public get_show_gridlines plt_get_show_grid
     Gets a flag determining if the grid lines should be shown.
     
    procedure, public set_show_gridlines plt_set_show_grid
     Sets a flag determining if the grid lines should be shown.
     
    procedure, public draw plt_draw
     Launches GNUPLOT and draws the plot per the current state of the command list.
     
    procedure, public save_file plt_save
     Saves a GNUPLOT command file.
     
    procedure, public get_font_name plt_get_font
     Gets the name of the font used for plot text.
     
    procedure, public set_font_name plt_set_font
     Sets the name of the font used for plot text.
     
    procedure, public get_font_size plt_get_font_size
     Gets the size of the font used by the plot.
     
    procedure, public set_font_size plt_set_font_size
     Sets the size of the font used by the plot.
     
    procedure, public get_tics_inward plt_get_tics_in
     Gets a value determining if the axis tic marks should point inwards.
     
    procedure, public set_tics_inward plt_set_tics_in
     Sets a value determining if the axis tic marks should point inwards.
     
    procedure, public get_draw_border plt_get_draw_border
     Gets a value determining if the border should be drawn.
     
    procedure, public set_draw_border plt_set_draw_border
     Sets a value determining if the border should be drawn.
     
    procedure, public push_label plt_push_label
     Adds a label to the plot.
     
    procedure, public pop_label plt_pop_label
     Removes the last label from the plot.
     
    procedure, public get_label plt_get_label
     Gets the requested plot_label from the plot.
     
    procedure, public set_label plt_set_label
     Sets the specified plot_label object.
     
    procedure, public get_label_count plt_get_label_count
     Gets the number of plot_label objects belonging to the plot.
     
    procedure, public clear_all_labels plt_clear_labels
     Clears all plot_label objects from the plot.
     
    procedure, public get_axis_equal plt_get_axis_equal
     Gets a flag determining if the axes should be equally scaled.
     
    procedure, public set_axis_equal plt_set_axis_equal
     Sets a flag determining if the axes should be equally scaled.
     
    procedure, public get_colormap plt_get_colormap
     Gets a pointer to the colormap object.
     
    procedure, public set_colormap plt_set_colormap
     Sets the colormap object.
     
    procedure, public get_show_colorbar plt_get_show_colorbar
     Gets a value determining if the colorbar should be shown.
     
    procedure, public set_show_colorbar plt_set_show_colorbar
     Sets a value determining if the colorbar should be shown.
     
    procedure, public push_arrow plt_push_arrow
     Pushes a new plot_arrow object onto the plot.
     
    procedure, public pop_arrow plt_pop_arrow
     Pops a plot_arrow object from the plot.
     
    procedure, public get_arrow plt_get_arrow
     Gets a pointer to the requested plot_arrow object.
     
    procedure, public set_arrow plt_set_arrow
     Sets a plot_arrow into the plot.
     
    procedure, public get_arrow_count plt_get_arrow_count
     Gets the number of plot_arrow objects held by the plot object.
     
    procedure, public clear_arrows plt_clear_arrows
     Clears all plot_arrow objects from the plot.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    type(y_axis), pointer m_yaxis => null()
     The y-axis.
     
    type(z_axis), pointer m_zaxis => null()
     The z-axis.
     
    real(real64) m_elevation = 60.0d0
     The elevation angle.
     
    real(real64) m_azimuth = 30.0d0
     The azimuth.
     
    logical m_zintersect = .true.
     Z-axis intersect X-Y plane?
     
    logical m_setmap = .false.
     Set map projection.
     
    integer(int32) m_csys = COORDINATES_CARTESIAN
     Plot coordinate system.
     
    - Public Attributes inherited from fplot_core::plot
    logical m_hastitle = .false.
     Has a title?
     
    class(terminal), pointer m_terminal => null()
     The GNUPLOT terminal object to target.
     
    type(list) m_data
     A collection of plot_data items to plot.
     
    type(legend), pointer m_legend => null()
     The legend.
     
    logical m_showgrid = .true.
     Show grid lines?
     
    logical m_ticsin = .true.
     Point tic marks in?
     
    logical m_drawborder = .true.
     Draw the border?
     
    type(list) m_labels
     A collection of plot_label items to draw.
     
    integer(int32) m_colorindex = 1
     The color index to use for automatic line coloring for scatter plots.
     
    logical m_axisequal = .false.
     Determines if the axes should be scaled proportionally.
     
    class(colormap), pointer m_colormap
     The colormap.
     
    logical m_showcolorbar = .true.
     Show the colorbar?
     
    type(list) m_arrows
     A collection of plot_arrow items to draw.
     
    - - - - -

    -Private Attributes

    type(x_axis), pointer m_xaxis => null()
     The x-axis.
     
    -

    Detailed Description

    -

    A plot object defining a 3D plot.

    - -

    Definition at line 5032 of file fplot_core.f90.

    -

    Constructor & Destructor Documentation

    - -

    ◆ p3d_clean_up()

    - -
    -
    - - - - - -
    - - - - -
    final fplot_core::plot_3d::p3d_clean_up
    -
    -final
    -
    - -

    Cleans up resources held by the plot_3d object.

    -
    Parameters
    - - -
    [in,out]thisThe plot_3d object.
    -
    -
    - -

    Definition at line 5054 of file fplot_core.f90.

    - -
    -
    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_azimuth()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_azimuth
    -
    - -

    Gets the plot azimuth angle.

    -
    Syntax
    real(real64) function get_azimuth(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    The azimuth angle, in degrees.
    - -

    Definition at line 5149 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_3d::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this plot_3d object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    The command string.
    - -

    Reimplemented from fplot_core::plot.

    - -

    Reimplemented in fplot_core::surface_plot.

    - -

    Definition at line 5089 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_coordinate_system()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_coordinate_system
    -
    - -

    Gets a value determining the coordinate system.

    -
    Syntax
    pure integer(int32) function get_coordinate_system(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    The coordinate system ID, which must be one of the following.
      -
    • COORDINATES_CARTESIAN
    • -
    • COORDINATES_CYLINDRICAL
    • -
    • COORDINATES_SPHERICAL
    • -
    -
    - -

    Definition at line 5218 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_elevation()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_elevation
    -
    - -

    Gets the plot elevation angle.

    -
    Syntax
    real(real64) function get_elevation(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    The elevation angle, in degrees.
    - -

    Definition at line 5129 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_map_view()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_use_map_view
    -
    - -

    Gets a value determining if the view should be set to a 2D map view. If true, the azimuth and elevation terms are ignored.

    -
    Syntax
    pure logical function get_use_map_view(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    Returns true if the map view will be used; else, false.
    - -

    Definition at line 5194 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_x_axis
    -
    - -

    Gets the x-axis object.

    -
    Syntax
    class(plot_axis) function, pointer get_x_axis(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    A pointer to the x-axis object.
    - -

    Definition at line 5099 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_y_axis
    -
    - -

    Gets the y-axis object.

    -
    Syntax
    class(plot_axis) function, pointer get_y_axis(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    A pointer to the y-axis object.
    - -

    Definition at line 5109 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_z_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_z_axis
    -
    - -

    Gets the z-axis object.

    -
    Syntax
    class(plot_axis) function, pointer get_z_axis(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    A pointer to the z-axis object.
    - -

    Definition at line 5119 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_z_intersect_xy()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::get_z_intersect_xy
    -
    - -

    Gets a value determining if the z-axis should intersect the x-y plane.

    -
    Syntax
    pure logical function get_z_intersect_xy(class(plot_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_3d object.
    -
    -
    -
    Returns
    Returns true if the z-axis should intersect the x-y plane; else, false to allow the z-axis to float.
    - -

    Definition at line 5171 of file fplot_core.f90.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::initialize
    -
    - -

    Initializes the plot_3d object.

    -
    Syntax
    subroutine initialize(class(plot_3d) this, optional integer(int32) term, optional class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in]thisThe plot_3d object.
    [in]termAn optional input that is used to define the terminal. The default terminal is a WXT terminal. The acceptable inputs are:
      -
    • GNUPLOT_TERMINAL_PNG
    • -
    • GNUPLOT_TERMINAL_QT
    • -
    • GNUPLOT_TERMINAL_WIN32
    • -
    • GNUPLOT_TERMINAL_WXT
    • -
    • GNUPLOT_TERMINAL_LATEX
    • -
    -
    [in]fnameA filename to pass to the terminal in the event the terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG).
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 5078 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_azimuth()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::set_azimuth
    -
    - -

    Sets the plot azimuth angle.

    -
    Syntax
    subroutine set_azimuth(class(plot_3d) this, real(real64) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_3d object.
    [in]xThe azimuth angle, in degrees.
    -
    -
    - -

    Definition at line 5159 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_coordinate_system()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::set_coordinate_system
    -
    - -

    Sets a value determining the coordinate system.

    -
    Syntax
    subroutine set_coordinate_system(class(plot_3d) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_3d object.
    [in]xThe coordinate system ID, which must be one of the following.
      -
    • COORDINATES_CARTESIAN
    • -
    • COORDINATES_CYLINDRICAL
    • -
    • COORDINATES_SPHERICAL
    • -
    -
    -
    -
    - -

    Definition at line 5232 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_elevation()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::set_elevation
    -
    - -

    Sets the plot elevation angle.

    -
    Syntax
    subroutine set_elevation(class(plot_3d) this, real(real64) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_3d object.
    [in]xThe elevation angle, in degrees.
    -
    -
    - -

    Definition at line 5139 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_map_view()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::set_use_map_view
    -
    - -

    Sets a value determining if the view should be set to a 2D map view. If true, the azimuth and elevation terms are ignored.

    -
    Syntax
    subroutine set_use_map_view(class(plot_3d) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_3d object.
    [in]xReturns true if the map view will be used; else, false.
    -
    -
    - -

    Definition at line 5205 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_z_intersect_xy()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_3d::set_z_intersect_xy
    -
    - -

    Sets a value determining if the z-axis should intersect the x-y plane.

    -
    Syntax
    subroutine set_z_intersect_xy(class(plot_3d) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_3d object.
    [in]xSet to true if the z-axis should intersect the x-y plane; else, false to allow the z-axis to float.
    -
    -
    - -

    Definition at line 5183 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_azimuth

    - -
    -
    - - - - -
    real(real64) fplot_core::plot_3d::m_azimuth = 30.0d0
    -
    - -

    The azimuth.

    - -

    Definition at line 5043 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_csys

    - -
    -
    - - - - -
    integer(int32) fplot_core::plot_3d::m_csys = COORDINATES_CARTESIAN
    -
    - -

    Plot coordinate system.

    - -

    Definition at line 5049 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_elevation

    - -
    -
    - - - - -
    real(real64) fplot_core::plot_3d::m_elevation = 60.0d0
    -
    - -

    The elevation angle.

    - -

    Definition at line 5041 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_setmap

    - -
    -
    - - - - -
    logical fplot_core::plot_3d::m_setmap = .false.
    -
    - -

    Set map projection.

    - -

    Definition at line 5047 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_xaxis

    - -
    -
    - - - - - -
    - - - - -
    type(x_axis), pointer fplot_core::plot_3d::m_xaxis => null()
    -
    -private
    -
    - -

    The x-axis.

    - -

    Definition at line 5035 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_yaxis

    - -
    -
    - - - - -
    type(y_axis), pointer fplot_core::plot_3d::m_yaxis => null()
    -
    - -

    The y-axis.

    - -

    Definition at line 5037 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_zaxis

    - -
    -
    - - - - -
    type(z_axis), pointer fplot_core::plot_3d::m_zaxis => null()
    -
    - -

    The z-axis.

    - -

    Definition at line 5039 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_zintersect

    - -
    -
    - - - - -
    logical fplot_core::plot_3d::m_zintersect = .true.
    -
    - -

    Z-axis intersect X-Y plane?

    - -

    Definition at line 5045 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__3d.js b/docs/html/structfplot__core_1_1plot__3d.js deleted file mode 100644 index d2e4bfc..0000000 --- a/docs/html/structfplot__core_1_1plot__3d.js +++ /dev/null @@ -1,27 +0,0 @@ -var structfplot__core_1_1plot__3d = -[ - [ "p3d_clean_up", "structfplot__core_1_1plot__3d.html#ab0e3abb763cf80ecc9af2d75e5c1035d", null ], - [ "get_azimuth", "structfplot__core_1_1plot__3d.html#acee2c2a674fa5aadb08211e4a18a0d5a", null ], - [ "get_command_string", "structfplot__core_1_1plot__3d.html#a374d3655b53b1f429d2db81f375b8d86", null ], - [ "get_coordinate_system", "structfplot__core_1_1plot__3d.html#a56ffdd5bb6cd107c22bc8a699681d993", null ], - [ "get_elevation", "structfplot__core_1_1plot__3d.html#a6a5612c5ea70d90368de4e738e662ee8", null ], - [ "get_use_map_view", "structfplot__core_1_1plot__3d.html#ad61ad94ee9d573d1d51aa8cf463c59b4", null ], - [ "get_x_axis", "structfplot__core_1_1plot__3d.html#afe5605d48034ee94fbaf08af6d47e59f", null ], - [ "get_y_axis", "structfplot__core_1_1plot__3d.html#ad39ce86017565371155ce84eacfd2086", null ], - [ "get_z_axis", "structfplot__core_1_1plot__3d.html#a3606b1bf32567c8ae6f02b644b2b36ab", null ], - [ "get_z_intersect_xy", "structfplot__core_1_1plot__3d.html#af09cbbc43c987f15e906e5a1b5d0d8cc", null ], - [ "initialize", "structfplot__core_1_1plot__3d.html#af2f00319633a96dfc5961129671126f1", null ], - [ "set_azimuth", "structfplot__core_1_1plot__3d.html#a925a7a5484ce7fde36ce80e2199f2c2b", null ], - [ "set_coordinate_system", "structfplot__core_1_1plot__3d.html#a66d6237275dbe689d7411ddced7e22c9", null ], - [ "set_elevation", "structfplot__core_1_1plot__3d.html#a68d05b37ad04bb9627471b1c20a30c38", null ], - [ "set_use_map_view", "structfplot__core_1_1plot__3d.html#a702f48c41af5fa7b33d1555904ca5823", null ], - [ "set_z_intersect_xy", "structfplot__core_1_1plot__3d.html#a58f3645f94801662c0f10736804da580", null ], - [ "m_azimuth", "structfplot__core_1_1plot__3d.html#a31e7daa0c6029d65bbe6dfc370e09f75", null ], - [ "m_csys", "structfplot__core_1_1plot__3d.html#a13ce047bd142425ca9c96fd57d126231", null ], - [ "m_elevation", "structfplot__core_1_1plot__3d.html#a20016816cd703ecc6902755c9506f954", null ], - [ "m_setmap", "structfplot__core_1_1plot__3d.html#a626a696690a0f9f9851b1764efb1a048", null ], - [ "m_xaxis", "structfplot__core_1_1plot__3d.html#afd5e9b00e8e1146c9fb84e0d0117c2e3", null ], - [ "m_yaxis", "structfplot__core_1_1plot__3d.html#ade01966b7cbc1f09297e329dafa69e58", null ], - [ "m_zaxis", "structfplot__core_1_1plot__3d.html#acc0b113abeb246892dde2b8782eac0ca", null ], - [ "m_zintersect", "structfplot__core_1_1plot__3d.html#acfcd025c88ae8f15a5ae2ff86021f03c", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__3d.png b/docs/html/structfplot__core_1_1plot__3d.png deleted file mode 100644 index 9a97c9383ced86f6dd276a50f314c6b9309f2749..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1115 zcmeAS@N?(olHy`uVBq!ia0vp^6M^^u2Q!c~zEbE6q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#NtJdAc};R4~4so7uP8K!EM^ zeAO%8?LTry8$=&hNja8(MbMP(PVed0e^j5(ncbx0$t&nK>4`89Z#MIKS-E}Bw%CSZ%iFwltXTN{Gh(9WHzt3Ga8J2g)Gq%iHw^L)) z{G&2EUBZ{hxvpXA?>S}mZT{3Ld^aTazc{1!$Zzq#@6#^M_`$mP?XNvXZpUZ8pIo|S z_SXEhi_ex7e2d!He(ZJVtCMls%-_?$J$?MVH^h9yv5bh;RCAS=4X>{B_o}RHyA@)u z_wT#+B!3CdN&b`FET7*IV%UCx(ZsdbE%y4Xpkg=vg~z7cGVa>T_Myvw=>w-S!+ZkN z&(k1NL{dDnIt(VM%m-nv#Z%^$pSJegpTNZVe1*vBGFAcnT?4C!ERYLNg*=~Q=>n?8oa=Z7{^^1Ae z_HFIECcVsJaanb4=gf7VLp*NA4o~kb&(CPs#_NBbewRO3e)q}0_c{ZAwpRE4+Wqon*ToC{CVW>8eAv@- zyT)F;_QI-Lp0)e-+qo^iT5|U2s>R-`pRPXmz@#)vAb7&en{4M-lHS;kcyrpvC( z3w&eR5Z)r#;4i`Wg8+3t-t3g+bL$sH=YH~?m~=%TQN_~^gu4U1KJR|+Td3|S9%-lH znf^wqT1xcgcZtwv^Q4yUbI*Kp{lJHqlHy(SyX{u2(K9;!YGcvltzH(HIi}!1a1D$# z+1Yh-+0?7E*H4YL$;-(N*|yPq(iA?8SN*G|ozLmWk+Y4CO|Yz-`+-&2 z^Xb-kE8nhpEA*-dm>3SO@eQA} - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_arrow Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_arrow, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_colorpar_get_colorfplot_core::plot_arrow
    get_command_stringpar_get_cmdfplot_core::plot_arrowvirtual
    get_head_anglepar_get_head_anglefplot_core::plot_arrow
    get_head_back_anglepar_get_head_back_anglefplot_core::plot_arrow
    get_head_fillpar_get_fillfplot_core::plot_arrow
    get_head_locationpar_get_headfplot_core::plot_arrow
    get_head_sizepar_get_head_sizefplot_core::plot_arrow
    get_head_typepar_get_head_typefplot_core::plot_arrow
    get_is_visiblepar_get_is_visiblefplot_core::plot_arrow
    get_line_stylepar_get_line_stylefplot_core::plot_arrow
    get_line_widthpar_get_line_widthfplot_core::plot_arrow
    get_move_to_frontpar_get_move_to_frontfplot_core::plot_arrow
    get_tail_locationpar_get_tailfplot_core::plot_arrow
    get_use_default_sizepar_get_use_default_sizefplot_core::plot_arrow
    m_angle (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_backangle (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_color (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_filling (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_front (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_head (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_head_type (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_linestyle (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_linewidth (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_size (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_tail (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_use_default_size (defined in fplot_core::plot_arrow)fplot_core::plot_arrow
    m_visible (defined in fplot_core::plot_arrow)fplot_core::plot_arrowprivate
    par_set_head_1par_set_head_1 (defined in fplot_core::plot_arrow)fplot_core::plot_arrowprivate
    par_set_head_2par_set_head_2 (defined in fplot_core::plot_arrow)fplot_core::plot_arrowprivate
    par_set_head_3par_set_head_3 (defined in fplot_core::plot_arrow)fplot_core::plot_arrowprivate
    par_set_tail_1par_set_tail_1 (defined in fplot_core::plot_arrow)fplot_core::plot_arrowprivate
    par_set_tail_2par_set_tail_2 (defined in fplot_core::plot_arrow)fplot_core::plot_arrowprivate
    par_set_tail_3par_set_tail_3 (defined in fplot_core::plot_arrow)fplot_core::plot_arrowprivate
    set_colorpar_set_colorfplot_core::plot_arrow
    set_head_anglepar_set_head_anglefplot_core::plot_arrow
    set_head_back_anglepar_set_head_back_anglefplot_core::plot_arrow
    set_head_fillpar_set_fillfplot_core::plot_arrow
    set_head_locationpar_set_head_1fplot_core::plot_arrow
    set_head_locationpar_set_head_2fplot_core::plot_arrow
    set_head_locationpar_set_head_3fplot_core::plot_arrow
    set_head_sizepar_set_head_sizefplot_core::plot_arrow
    set_head_typepar_set_head_typefplot_core::plot_arrow
    set_is_visiblepar_set_is_visiblefplot_core::plot_arrow
    set_line_stylepar_set_line_stylefplot_core::plot_arrow
    set_line_widthpar_set_line_widthfplot_core::plot_arrow
    set_move_to_frontpar_set_move_to_frontfplot_core::plot_arrow
    set_tail_locationpar_set_tail_1fplot_core::plot_arrow
    set_tail_locationpar_set_tail_2fplot_core::plot_arrow
    set_tail_locationpar_set_tail_3fplot_core::plot_arrow
    set_use_default_sizepar_set_use_default_sizefplot_core::plot_arrow
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__arrow.html b/docs/html/structfplot__core_1_1plot__arrow.html deleted file mode 100644 index 0ffaa47..0000000 --- a/docs/html/structfplot__core_1_1plot__arrow.html +++ /dev/null @@ -1,1643 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_arrow Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - - -
    - -

    Defines an arrow to be used on by a plot object. - More...

    -
    -Inheritance diagram for fplot_core::plot_arrow:
    -
    -
    - - -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_is_visible par_get_is_visible
     Gets a value determining if the arrow is visible.
     
    procedure, public set_is_visible par_set_is_visible
     Sets a value determining if the arrow is visible.
     
    procedure, public get_tail_location par_get_tail
     Gets the coordinates of the arrow's tail.
     
    generic, public set_tail_location par_set_tail_1
     Sets the location of the arrow's tail.
     
    generic, public set_tail_location par_set_tail_2
     Sets the location of the arrow's tail.
     
    generic, public set_tail_location par_set_tail_3
     Sets the location of the arrow's tail.
     
    procedure, public get_head_location par_get_head
     Gets the coordinates of the arrow's head.
     
    generic, public set_head_location par_set_head_1
     Sets the location of the arrow's head.
     
    generic, public set_head_location par_set_head_2
     Sets the location of the arrow's head.
     
    generic, public set_head_location par_set_head_3
     Sets the location of the arrow's head.
     
    procedure, public get_color par_get_color
     Gets the color of the arrow.
     
    procedure, public set_color par_set_color
     Sets the color of the arrow.
     
    procedure, public get_line_style par_get_line_style
     Gets the line style used to draw the arrow.
     
    procedure, public set_line_style par_set_line_style
     Sets the line style used to draw the arrow.
     
    procedure, public get_line_width par_get_line_width
     Gets the width of the lines used to draw the arrow.
     
    procedure, public set_line_width par_set_line_width
     Sets the width of the lines used to draw the arrow.
     
    procedure, public get_head_type par_get_head_type
     Gets the type of arrow head.
     
    procedure, public set_head_type par_set_head_type
     Sets the type of arrow head.
     
    procedure, public get_head_fill par_get_fill
     Gets a flag denoting the head fill type.
     
    procedure, public set_head_fill par_set_fill
     Sets a flag denoting the head fill type.
     
    procedure, public get_move_to_front par_get_move_to_front
     Gets a value determining if the arrow should be moved to the front.
     
    procedure, public set_move_to_front par_set_move_to_front
     Sets a value determining if the arrow should be moved to the front.
     
    procedure, public get_head_size par_get_head_size
     Gets the size of the arrow head.
     
    procedure, public set_head_size par_set_head_size
     Sets the size of the arrow head.
     
    procedure, public get_head_angle par_get_head_angle
     Gets the angle of the arrow head.
     
    procedure, public set_head_angle par_set_head_angle
     Sets the angle of the arrow head.
     
    procedure, public get_head_back_angle par_get_head_back_angle
     Gets the angle of the back of the arrow head.
     
    procedure, public set_head_back_angle par_set_head_back_angle
     Sets the angle of the back of the arrow head.
     
    procedure, public get_use_default_size par_get_use_default_size
     Gets a value determining if arrow head sizing defaults should be used.
     
    procedure, public set_use_default_size par_set_use_default_size
     Sets a value determining if arrow head sizing defaults should be used.
     
    procedure, public get_command_string par_get_cmd
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    real(real32), dimension(3) m_tail = [0.0, 0.0, 0.0]
     
    real(real32), dimension(3) m_head = [0.0, 0.0, 0.0]
     
    type(colorm_color = CLR_BLACK
     
    integer(int32) m_linestyle = LINE_SOLID
     
    real(real32) m_linewidth = 1.0
     
    integer(int32) m_head_type = ARROW_HEAD
     
    integer(int32) m_filling = ARROW_FILLED
     
    logical m_front = .true.
     
    real(real32) m_size = 0.375
     
    real(real32) m_angle = 10.0
     
    real(real32) m_backangle = 90.0
     
    logical m_use_default_size = .true.
     
    - - - - - - - - - - - - - -

    -Private Member Functions

    procedure, private par_set_tail_1 par_set_tail_1
     
    procedure, private par_set_tail_2 par_set_tail_2
     
    procedure, private par_set_tail_3 par_set_tail_3
     
    procedure, private par_set_head_1 par_set_head_1
     
    procedure, private par_set_head_2 par_set_head_2
     
    procedure, private par_set_head_3 par_set_head_3
     
    - - - -

    -Private Attributes

    logical, private m_visible = .true.
     
    -

    Detailed Description

    -

    Defines an arrow to be used on by a plot object.

    - -

    Definition at line 648 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_color
    -
    - -

    Gets the color of the arrow.

    -
    Syntax
    pure type(color) function get_color(class(arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The color.
    - -

    Definition at line 795 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to establish appropriate parameters.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The GNUPLOT command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 1026 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_head_angle()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_head_angle
    -
    - -

    Gets the angle of the arrow head.

    -
    Syntax
    pure real(real32) function get_head_angle(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The angle, in degrees.
    - -

    Definition at line 963 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_head_back_angle()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_head_back_angle
    -
    - -

    Gets the angle of the back of the arrow head.

    -
    Syntax
    pure real(real32) function get_head_back_angle(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The angle, in degrees.
    - -

    Definition at line 983 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_head_fill()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_head_fill
    -
    - -

    Gets a flag denoting the head fill type.

    -
    Syntax
    pure integer(int32) function get_head_fill(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The flag denoting head fill. It will be one of the following constants.
      -
    • ARROW_FILLED
    • -
    • ARROW_EMPTY
    • -
    • ARROW_NO_BORDER
    • -
    • ARROW_NO_FILL
    • -
    -
    - -

    Definition at line 895 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_head_location()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_head_location
    -
    - -

    Gets the coordinates of the arrow's head.

    -
    Syntax
    pure real(real32)(3) function get_head_location(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    A 3-element array containing the x, y, and z coordinates of the arrow's head.
    - -

    Definition at line 751 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_head_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_head_size
    -
    - -

    Gets the size of the arrow head.

    -
    Syntax
    pure real(real32) function get_head_size(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The head size.
    - -

    Definition at line 943 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_head_type()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_head_type
    -
    - -

    Gets the type of arrow head.

    -
    Syntax
    pure integer(int32) function get_head_type(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The arrow head type. It is one of the following constants.
      -
    • ARROW_HEAD
    • -
    • ARROW_BACKHEAD
    • -
    • ARROW_HEADS
    • -
    • ARROW_NO_HEAD
    • -
    -
    - -

    Definition at line 865 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_is_visible()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_is_visible
    -
    - -

    Gets a value determining if the arrow is visible.

    -
    Syntax
    pure logical function get_is_visible(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    True if the arrow is visible; else, false.
    - -

    Definition at line 685 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_line_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_line_style
    -
    - -

    Gets the line style used to draw the arrow.

    -
    Syntax
    pure integer(int32) function get_line_style(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The line style.
    - -

    Definition at line 815 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_line_width
    -
    - -

    Gets the width of the lines used to draw the arrow.

    -
    Syntax
    pure real(real32) function get_line_width(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    The width of the line.
    - -

    Definition at line 841 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_move_to_front()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_move_to_front
    -
    - -

    Gets a value determining if the arrow should be moved to the front.

    -
    Syntax
    pure logical function get_move_to_front(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    True if the arrow should be moved to the front; else, false.
    - -

    Definition at line 921 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_tail_location()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_tail_location
    -
    - -

    Gets the coordinates of the arrow's tail.

    -
    Syntax
    pure real(real32)(3) function get_tail_location(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    A 3-element array containing the x, y, and z coordinates of the arrow's tail.
    - -

    Definition at line 706 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_default_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::get_use_default_size
    -
    - -

    Gets a value determining if arrow head sizing defaults should be used.

    -
    Syntax
    pure logical function get_use_default_size(class(plot_arrow) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_arrow object.
    -
    -
    -
    Returns
    True if the defaults should be used; else, false.
    - -

    Definition at line 1004 of file fplot_core.f90.

    - -
    -
    - -

    ◆ par_set_head_1()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_arrow::par_set_head_1
    -
    -private
    -
    - -

    Definition at line 783 of file fplot_core.f90.

    - -
    -
    - -

    ◆ par_set_head_2()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_arrow::par_set_head_2
    -
    -private
    -
    - -

    Definition at line 784 of file fplot_core.f90.

    - -
    -
    - -

    ◆ par_set_head_3()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_arrow::par_set_head_3
    -
    -private
    -
    - -

    Definition at line 785 of file fplot_core.f90.

    - -
    -
    - -

    ◆ par_set_tail_1()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_arrow::par_set_tail_1
    -
    -private
    -
    - -

    Definition at line 738 of file fplot_core.f90.

    - -
    -
    - -

    ◆ par_set_tail_2()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_arrow::par_set_tail_2
    -
    -private
    -
    - -

    Definition at line 739 of file fplot_core.f90.

    - -
    -
    - -

    ◆ par_set_tail_3()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_arrow::par_set_tail_3
    -
    -private
    -
    - -

    Definition at line 740 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_color()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_color
    -
    - -

    Sets the color of the arrow.

    -
    Syntax
    subroutine set_color(class(arrow) this, type(color) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe color.
    -
    -
    - -

    Definition at line 805 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_angle()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_head_angle
    -
    - -

    Sets the angle of the arrow head.

    -
    Syntax
    subroutine set_head_angle(class(plot_arrow) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe angle, in degrees.
    -
    -
    - -

    Definition at line 973 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_back_angle()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_head_back_angle
    -
    - -

    Sets the angle of the back of the arrow head.

    -
    Syntax
    subroutine set_head_back_angle(class(plot_arrow) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe angle, in degrees.
    -
    -
    - -

    Definition at line 993 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_fill()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_head_fill
    -
    - -

    Sets a flag denoting the head fill type.

    -
    Syntax
    subroutine set_head_fill(class(plot_arrow) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe flag denoting head fill. It must be one of the following constants.
      -
    • ARROW_FILLED
    • -
    • ARROW_EMPTY
    • -
    • ARROW_NO_BORDER
    • -
    • ARROW_NO_FILL
    • -
    -
    -
    -
    - -

    Definition at line 910 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_location() [1/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_arrow::set_head_location
    -
    - -

    Sets the location of the arrow's head.

    -
    Syntax 1
    subroutine set_head_location(class(plot_arrow) this, real(real32) x(3))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xA 3-element array containing the x, y, and z coordiantes of the arrow's head.
    -
    -
    -
    Syntax 2
    subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's head.
    [in]yThe y-coordinate of the arrow's head.
    -
    -
    -
    Syntax 3
    subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's head.
    [in]yThe y-coordinate of the arrow's head.
    [in]zThe z-coordinate of the arrow's head.
    -
    -
    - -

    Definition at line 781 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_location() [2/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_arrow::set_head_location
    -
    - -

    Sets the location of the arrow's head.

    -
    Syntax 1
    subroutine set_head_location(class(plot_arrow) this, real(real32) x(3))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xA 3-element array containing the x, y, and z coordiantes of the arrow's head.
    -
    -
    -
    Syntax 2
    subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's head.
    [in]yThe y-coordinate of the arrow's head.
    -
    -
    -
    Syntax 3
    subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's head.
    [in]yThe y-coordinate of the arrow's head.
    [in]zThe z-coordinate of the arrow's head.
    -
    -
    - -

    Definition at line 781 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_location() [3/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_arrow::set_head_location
    -
    - -

    Sets the location of the arrow's head.

    -
    Syntax 1
    subroutine set_head_location(class(plot_arrow) this, real(real32) x(3))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xA 3-element array containing the x, y, and z coordiantes of the arrow's head.
    -
    -
    -
    Syntax 2
    subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's head.
    [in]yThe y-coordinate of the arrow's head.
    -
    -
    -
    Syntax 3
    subroutine set_head_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's head.
    [in]yThe y-coordinate of the arrow's head.
    [in]zThe z-coordinate of the arrow's head.
    -
    -
    - -

    Definition at line 781 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_head_size
    -
    - -

    Sets the size of the arrow head.

    -
    Syntax
    subroutine set_head_size(class(plot_arrow) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe head size.
    -
    -
    - -

    Definition at line 953 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_head_type()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_head_type
    -
    - -

    Sets the type of arrow head.

    -
    Syntax
    subroutine set_head_type(class(plot_arrow) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe arrow head type. It must be one of the following constants.
      -
    • ARROW_HEAD
    • -
    • ARROW_BACKHEAD
    • -
    • ARROW_HEADS
    • -
    • ARROW_NO_HEAD
    • -
    -
    -
    -
    - -

    Definition at line 880 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_is_visible()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_is_visible
    -
    - -

    Sets a value determining if the arrow is visible.

    -
    Syntax
    subroutine set_is_visible(class(plot_arrow) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xTrue if the arrow is visible; else, false.
    -
    -
    - -

    Definition at line 695 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_line_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_line_style
    -
    - -

    Sets the line style used to draw the arrow.

    -
    Syntax
    subroutine set_line_style(class(plot_arrow) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    Theline style. The value must be one of the following.
      -
    • LINE_SOLID
    • -
    • LINE_DASHED
    • -
    • LINE_DASH_DOTTED
    • -
    • LINE_DASH_DOT_DOT
    • -
    • LINE_DOTTED If the value is not one of the above, the command is ignored.
    • -
    -
    -
    -
    - -

    Definition at line 831 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_line_width
    -
    - -

    Sets the width of the lines used to draw the arrow.

    -
    Syntax
    subroutine set_line_width(class(plot_arrow) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe width of the line.
    -
    -
    - -

    Definition at line 851 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_move_to_front()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_move_to_front
    -
    - -

    Sets a value determining if the arrow should be moved to the front.

    -
    Syntax
    subroutine set_move_to_front(class(plot_arrow) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xTrue if the arrow should be moved to the front; else, false.
    -
    -
    - -

    Definition at line 933 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_tail_location() [1/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_arrow::set_tail_location
    -
    - -

    Sets the location of the arrow's tail.

    -
    Syntax 1
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x(3))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xA 3-element array containing the x, y, and z coordiantes of the arrow's tail.
    -
    -
    -
    Syntax 2
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's tail.
    [in]yThe y-coordinate of the arrow's tail.
    -
    -
    -
    Syntax 3
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's tail.
    [in]yThe y-coordinate of the arrow's tail.
    [in]zThe z-coordinate of the arrow's tail.
    -
    -
    - -

    Definition at line 736 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_tail_location() [2/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_arrow::set_tail_location
    -
    - -

    Sets the location of the arrow's tail.

    -
    Syntax 1
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x(3))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xA 3-element array containing the x, y, and z coordiantes of the arrow's tail.
    -
    -
    -
    Syntax 2
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's tail.
    [in]yThe y-coordinate of the arrow's tail.
    -
    -
    -
    Syntax 3
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's tail.
    [in]yThe y-coordinate of the arrow's tail.
    [in]zThe z-coordinate of the arrow's tail.
    -
    -
    - -

    Definition at line 736 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_tail_location() [3/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_arrow::set_tail_location
    -
    - -

    Sets the location of the arrow's tail.

    -
    Syntax 1
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x(3))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xA 3-element array containing the x, y, and z coordiantes of the arrow's tail.
    -
    -
    -
    Syntax 2
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's tail.
    [in]yThe y-coordinate of the arrow's tail.
    -
    -
    -
    Syntax 3
    subroutine set_tail_location(class(plot_arrow) this, real(real32) x, real(real32) y, real(real32) z)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_arrow object.
    [in]xThe x-coordinate of the arrow's tail.
    [in]yThe y-coordinate of the arrow's tail.
    [in]zThe z-coordinate of the arrow's tail.
    -
    -
    - -

    Definition at line 736 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_default_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_arrow::set_use_default_size
    -
    - -

    Sets a value determining if arrow head sizing defaults should be used.

    -
    Syntax
    subroutine set_use_default_size(class(plot_arrow) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_arrow object.
    [in]xTrue if the defaults should be used; else, false.
    -
    -
    - -

    Definition at line 1015 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_angle

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_arrow::m_angle = 10.0
    -
    - -

    Definition at line 670 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_backangle

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_arrow::m_backangle = 90.0
    -
    - -

    Definition at line 672 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_color

    - -
    -
    - - - - -
    type(color) fplot_core::plot_arrow::m_color = CLR_BLACK
    -
    - -

    Definition at line 656 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_filling

    - -
    -
    - - - - -
    integer(int32) fplot_core::plot_arrow::m_filling = ARROW_FILLED
    -
    - -

    Definition at line 664 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_front

    - -
    -
    - - - - -
    logical fplot_core::plot_arrow::m_front = .true.
    -
    - -

    Definition at line 666 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_head

    - -
    -
    - - - - -
    real(real32), dimension(3) fplot_core::plot_arrow::m_head = [0.0, 0.0, 0.0]
    -
    - -

    Definition at line 654 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_head_type

    - -
    -
    - - - - -
    integer(int32) fplot_core::plot_arrow::m_head_type = ARROW_HEAD
    -
    - -

    Definition at line 662 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_linestyle

    - -
    -
    - - - - -
    integer(int32) fplot_core::plot_arrow::m_linestyle = LINE_SOLID
    -
    - -

    Definition at line 658 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_linewidth

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_arrow::m_linewidth = 1.0
    -
    - -

    Definition at line 660 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_size

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_arrow::m_size = 0.375
    -
    - -

    Definition at line 668 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_tail

    - -
    -
    - - - - -
    real(real32), dimension(3) fplot_core::plot_arrow::m_tail = [0.0, 0.0, 0.0]
    -
    - -

    Definition at line 652 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_use_default_size

    - -
    -
    - - - - -
    logical fplot_core::plot_arrow::m_use_default_size = .true.
    -
    - -

    Definition at line 674 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_visible

    - -
    -
    - - - - - -
    - - - - -
    logical, private fplot_core::plot_arrow::m_visible = .true.
    -
    -private
    -
    - -

    Definition at line 650 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__arrow.js b/docs/html/structfplot__core_1_1plot__arrow.js deleted file mode 100644 index e576451..0000000 --- a/docs/html/structfplot__core_1_1plot__arrow.js +++ /dev/null @@ -1,34 +0,0 @@ -var structfplot__core_1_1plot__arrow = -[ - [ "get_color", "structfplot__core_1_1plot__arrow.html#a419e8b0aae89c5f8fd11c93787209bca", null ], - [ "get_command_string", "structfplot__core_1_1plot__arrow.html#acdc8d52f5af979888d88401811f7f199", null ], - [ "get_head_angle", "structfplot__core_1_1plot__arrow.html#a2ac66de42f97cf794d6184c9e092f85e", null ], - [ "get_head_back_angle", "structfplot__core_1_1plot__arrow.html#abfd19a819ab33659213588cd0d7dfe9c", null ], - [ "get_head_fill", "structfplot__core_1_1plot__arrow.html#a4cd206c5596dbab50b91472260646f29", null ], - [ "get_head_location", "structfplot__core_1_1plot__arrow.html#a65d9efb1c3a6874ffb9745b6ba67d9ae", null ], - [ "get_head_size", "structfplot__core_1_1plot__arrow.html#a80eff3e2ee043866d69c4074006e00d2", null ], - [ "get_head_type", "structfplot__core_1_1plot__arrow.html#a3c95cde3a7e4748f8a2906ec9404d477", null ], - [ "get_is_visible", "structfplot__core_1_1plot__arrow.html#aa8b6628e7136aa166c1e6205dc4dc169", null ], - [ "get_line_style", "structfplot__core_1_1plot__arrow.html#a5689908ce348e110e19a14968bb41315", null ], - [ "get_line_width", "structfplot__core_1_1plot__arrow.html#aa054166ee5ab324006aa3a79bcccb2d7", null ], - [ "get_move_to_front", "structfplot__core_1_1plot__arrow.html#a6beddd6f29376f864ed6515b2936badb", null ], - [ "get_tail_location", "structfplot__core_1_1plot__arrow.html#a4ad925efaa9bb101c20799ba29028d52", null ], - [ "get_use_default_size", "structfplot__core_1_1plot__arrow.html#aacd237f46dd75db4cd7da3e6149b4dae", null ], - [ "set_color", "structfplot__core_1_1plot__arrow.html#a62bd3548d5aad7e4a4bc1cc58c3a6935", null ], - [ "set_head_angle", "structfplot__core_1_1plot__arrow.html#aa976a527ccaf267e9d5b7c06342a3b56", null ], - [ "set_head_back_angle", "structfplot__core_1_1plot__arrow.html#aaff2d428d8feeda35da15f1c92bf624a", null ], - [ "set_head_fill", "structfplot__core_1_1plot__arrow.html#add82908c1efdf34d701762bf29763a24", null ], - [ "set_head_location", "structfplot__core_1_1plot__arrow.html#a49ab5d25adbf97b8b6aeb9172c68947a", null ], - [ "set_head_location", "structfplot__core_1_1plot__arrow.html#aaa8b4e0f0e2e7138a4fb849989bd7753", null ], - [ "set_head_location", "structfplot__core_1_1plot__arrow.html#a2a90f330e8f387beff52a66cd48b1ef3", null ], - [ "set_head_size", "structfplot__core_1_1plot__arrow.html#ab2aa4033c8337c3307ea4036a6e10d16", null ], - [ "set_head_type", "structfplot__core_1_1plot__arrow.html#adfe5552a5c01b59b9bc1025d8e583a57", null ], - [ "set_is_visible", "structfplot__core_1_1plot__arrow.html#a15fa92a1a0ba898995bfcc2e5b5ee790", null ], - [ "set_line_style", "structfplot__core_1_1plot__arrow.html#aceea0ccadce0c4737eaad80ac0a10b98", null ], - [ "set_line_width", "structfplot__core_1_1plot__arrow.html#a48af7ed9faba3494666634819c1b0078", null ], - [ "set_move_to_front", "structfplot__core_1_1plot__arrow.html#a835f541854392fcdfa62e42a40d0f1be", null ], - [ "set_tail_location", "structfplot__core_1_1plot__arrow.html#aca84bef4ddb730b1fed90d2386874b7a", null ], - [ "set_tail_location", "structfplot__core_1_1plot__arrow.html#a452292e58f05cd3afdcdb38c858799d8", null ], - [ "set_tail_location", "structfplot__core_1_1plot__arrow.html#a255beb96b7024c5bb7cd9ef41836ae94", null ], - [ "set_use_default_size", "structfplot__core_1_1plot__arrow.html#afa8a544cb4f1d33d35518d65b1303543", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__arrow.png b/docs/html/structfplot__core_1_1plot__arrow.png deleted file mode 100644 index 8ef97ad999d4e6399a21ffc294eb8309a4c329cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^9Y7qw!3-q7a-LNJQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=E7nJzX3_Dj46+eciX(fT!iS z@XAlW?LTTZ#>@%uSg5^7x%_z3A)jBW7H{HP1P<}EI!ro0y?KI3k-#K3Ru`4n)9P0x zJ^8LUmhArUvWjgbPd%5@q-9b9kzy{_QaeTWPY?Ba{&K^NGjA_vyw2!Ja}Ar}`!e9} zx%MYI?;2msTP&gLVOwG^<#}@@+m{r+xsTZuPCpkqA@xVr<95;gH6Gi0*M0N&o>6y4 z**97K&8#f*HCEkqH%w1v+*=dB-%QWNUh=#{QgY~K<&%4*`r=p>PfnETt^4w`K7NuL zpVOrbwFv@FGZrvBDBH`B&^C+p$=6veDPj}MkISfBZuqf|ks+Fo>A(p`1_?_J24!}} zgeM9NJu)l}6PpQf!=NCz5mdP|-asIw|<*GL!%(q-$$NV?m z>6+i5GhcAR+3)2F*1>i)CU?)TssCQJq}qhpw&+jJ+pZhe*5A{;yH0bS$=<^mPTA}) z9rgB_)d|TmcgjYd^$RUspXZVuCm4El`6g)x_3ncD*H*$ufichE M>FVdQ&MBb@0PXh&9{>OV diff --git a/docs/html/structfplot__core_1_1plot__axis-members.html b/docs/html/structfplot__core_1_1plot__axis-members.html deleted file mode 100644 index 7f20034..0000000 --- a/docs/html/structfplot__core_1_1plot__axis-members.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_autoscalepa_get_autoscalefplot_core::plot_axis
    get_command_stringpa_get_cmd_stringfplot_core::plot_axisvirtual
    get_id_stringpa_get_string_resultfplot_core::plot_axispure virtual
    get_is_log_scaledpa_get_log_scalefplot_core::plot_axis
    get_limitspa_get_axis_limitsfplot_core::plot_axis
    get_tic_label_formatpa_get_tic_label_fmtfplot_core::plot_axis
    get_titlepa_get_titlefplot_core::plot_axis
    get_use_default_tic_label_formatpa_get_use_dft_tic_lbl_fmtfplot_core::plot_axis
    get_zero_axispa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_widthpa_get_zero_axis_widthfplot_core::plot_axis
    is_title_definedpa_has_titlefplot_core::plot_axis
    m_autoscalefplot_core::plot_axis
    m_axiswidthfplot_core::plot_axis
    m_defaultticlabelsfplot_core::plot_axis
    m_hastitlefplot_core::plot_axisprivate
    m_limitsfplot_core::plot_axis
    m_logscalefplot_core::plot_axis
    m_ticlabelfmtfplot_core::plot_axis
    m_titlefplot_core::plot_axis
    m_zeroaxisfplot_core::plot_axis
    set_autoscalepa_set_autoscalefplot_core::plot_axis
    set_is_log_scaledpa_set_log_scalefplot_core::plot_axis
    set_limitspa_set_axis_limitsfplot_core::plot_axis
    set_tic_label_formatpa_set_tic_label_fmtfplot_core::plot_axis
    set_titlepa_set_titlefplot_core::plot_axis
    set_use_default_tic_label_formatpa_set_use_dft_tic_lbl_fmtfplot_core::plot_axis
    set_zero_axispa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_widthpa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__axis.html b/docs/html/structfplot__core_1_1plot__axis.html deleted file mode 100644 index 2533127..0000000 --- a/docs/html/structfplot__core_1_1plot__axis.html +++ /dev/null @@ -1,927 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_axis Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_axis Type Referenceabstract
    -
    -
    - -

    Describes a single plot axis. - More...

    -
    -Inheritance diagram for fplot_core::plot_axis:
    -
    -
    - - -fplot_core::plot_object -fplot_core::x_axis -fplot_core::y2_axis -fplot_core::y_axis -fplot_core::z_axis - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_title pa_get_title
     Gets the axis' title.
     
    procedure, public set_title pa_set_title
     Sets the axis' title.
     
    procedure, public is_title_defined pa_has_title
     Gets a value determining if a title has been defined for the plot_axis object.
     
    procedure, public get_autoscale pa_get_autoscale
     Gets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public set_autoscale pa_set_autoscale
     Sets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public get_limits pa_get_axis_limits
     Gets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public set_limits pa_set_axis_limits
     Sets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public get_is_log_scaled pa_get_log_scale
     Gets a logical value defining if the axis should be log scaled.
     
    procedure, public set_is_log_scaled pa_set_log_scale
     Sets a logical value defining if the axis should be log scaled.
     
    procedure, public get_command_string pa_get_cmd_string
     Returns the appropriate GNUPLOT command string to define the plot_axis properties.
     
    procedure, public get_zero_axis pa_get_zero_axis
     Gets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public set_zero_axis pa_set_zero_axis
     Sets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public get_zero_axis_line_width pa_get_zero_axis_width
     Gets the width of the line used to represent the zero axis line, if active.
     
    procedure, public set_zero_axis_line_width pa_set_zero_axis_width
     Sets the width of the line used to represent the zero axis line, if active.
     
    procedure(pa_get_string_result), deferred, public get_id_string pa_get_string_result
     Gets a string identifying the axis as: x, y, z, y2, etc.
     
    procedure, public get_use_default_tic_label_format pa_get_use_dft_tic_lbl_fmt
     Gets a value determining if the default tic label format will be used.
     
    procedure, public set_use_default_tic_label_format pa_set_use_dft_tic_lbl_fmt
     Sets a value determining if the default tic label format will be used.
     
    procedure, public get_tic_label_format pa_get_tic_label_fmt
     Gets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    procedure, public set_tic_label_format pa_set_tic_label_fmt
     Sets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character(len=plotdata_max_name_lengthm_title = ""
     The axis title.
     
    logical m_autoscale = .true.
     Autoscale?
     
    real(real64), dimension(2) m_limits = [0.0d0, 1.0d0]
     Display limits.
     
    logical m_logscale = .false.
     Log scaled?
     
    logical m_zeroaxis = .false.
     Zero axis?
     
    real(real32) m_axiswidth = 1.0
     The width, in pixels, of the zero axis line.
     
    logical m_defaultticlabels = .true.
     Use default tic label format?
     
    character(len=plotdata_max_name_lengthm_ticlabelfmt = "%g"
     The tic label format.
     
    - - - - -

    -Private Attributes

    logical m_hastitle = .false.
     Has a title.
     
    -

    Detailed Description

    -

    Describes a single plot axis.

    - -

    Definition at line 1783 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_autoscale()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_autoscale
    -
    - -

    Gets a logical value determining if the axis should be automatically scaled to fit the data.

    -
    Syntax
    pure logical function get_autoscale(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    Returns true if the axis should be automatically scaled; else, false.
    - -

    Definition at line 1850 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_axis::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to define the plot_axis properties.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    The GNUPLOT command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 1920 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure(pa_get_string_result), deferred, public fplot_core::plot_axis::get_id_string
    -
    -pure virtual
    -
    - -

    Gets a string identifying the axis as: x, y, z, y2, etc.

    - -

    Implemented in fplot_core::x_axis, fplot_core::y2_axis, fplot_core::y_axis, and fplot_core::z_axis.

    - -

    Definition at line 1966 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_is_log_scaled()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_is_log_scaled
    -
    - -

    Gets a logical value defining if the axis should be log scaled.

    -
    Syntax
    pure logical function get_is_log_scaled(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe plot_axis object.
    -
    -
    -
    Returns
    Returns true if log scaling is applied to the axis; else, false.
    - -

    Definition at line 1897 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_limits()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_limits
    -
    - -

    Gets the axis display limits, assuming autoscaling is not active for this axis.

    -
    Syntax
    pure real(real64) function, dimension(2) get_limits(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    A two-element array containing the limits as follows: [lower, upper].
    - -

    Definition at line 1874 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_tic_label_format()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_tic_label_format
    -
    - -

    Gets the tic label format. The format string can be any format string accepted by the C command 'printf.'.

    -
    Syntax
    allocatable character(len = :) function get_tic_label_format(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    The tic label format string.
    - -

    Definition at line 2004 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_title
    -
    - -

    Gets the axis' title.

    -
    Syntax
    character(len = :) function, allocatable get_title(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    The title.
    - -

    Definition at line 1814 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_default_tic_label_format()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_use_default_tic_label_format
    -
    - -

    Gets a value determining if the default tic label format will be used.

    -
    Syntax
    pure logical function get_use_default_tic_label_format(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    Returns true if the default tic label format will be used; else, false.
    - -

    Definition at line 1979 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_zero_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_zero_axis
    -
    - -

    Gets a value determining if the axis should be drawn through zero of opposing axes.

    -
    Syntax
    pure logical function get_zero_axis(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    Returns true to draw as a zero axis; else, set to false.
    - -

    Definition at line 1931 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_zero_axis_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::get_zero_axis_line_width
    -
    - -

    Gets the width of the line used to represent the zero axis line, if active.

    -
    Syntax
    pure real(real32) function get_zero_axis_line_width(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    The width of the line, in pixels.
    - -

    Definition at line 1953 of file fplot_core.f90.

    - -
    -
    - -

    ◆ is_title_defined()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::is_title_defined
    -
    - -

    Gets a value determining if a title has been defined for the plot_axis object.

    -
    Syntax
    pure logical function is_title_defined(class(plot_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_axis object.
    -
    -
    -
    Returns
    Returns true if a title has been defined for this axis; else, returns false.
    - -

    Definition at line 1838 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_autoscale()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_autoscale
    -
    - -

    Sets a logical value determining if the axis should be automatically scaled to fit the data.

    -
    Syntax
    subroutine set_autoscale(class(plot_axis) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_axis object.
    [in]xSet to true if the axis should be automatically scaled; else, false.
    -
    -
    - -

    Definition at line 1862 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_is_log_scaled()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_is_log_scaled
    -
    - -

    Sets a logical value defining if the axis should be log scaled.

    -
    Syntax
    subroutine set_is_log_scaled(class(plot_axis) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_axis object.
    [in]xSet to true if log scaling is applied to the axis; else, false.
    -
    -
    - -

    Definition at line 1909 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_limits()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_limits
    -
    - -

    Sets the axis display limits, assuming autoscaling is not active for this axis.

    -
    Syntax
    subroutine set_limits(class(plot_axis) this, real(real64) lower, real(real64) upper)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_axis object.
    [in]lowerThe lower display limit.
    [in]upperThe upper display limit.
    -
    -
    - -

    Definition at line 1886 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_tic_label_format()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_tic_label_format
    -
    - -

    Sets the tic label format. The format string can be any format string accepted by the C command 'printf.'.

    -
    Syntax
    subroutine set_tic_label_format(class(plot_axis) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_axis object.
    [in]xThe tic label format string.
    -
    -
    - -

    Definition at line 2015 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_title
    -
    - -

    Sets the axis' title.

    -
    Syntax
    subroutine set_title(class(plot_axis) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_axis object.
    [in]txtThe axis title. The number of characters must be less than or equal to PLOTDATA_MAX_NAME_LENGTH; else, the text string is truncated.
    -
    -
    - -

    Definition at line 1826 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_default_tic_label_format()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_use_default_tic_label_format
    -
    - -

    Sets a value determining if the default tic label format will be used.

    -
    Syntax
    subroutine set_use_default_tic_label_format(class(plot_axis) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_axis object.
    [in]xSet to true if the default tic label format will be used; else, false.
    -
    -
    - -

    Definition at line 1992 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_zero_axis()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_zero_axis
    -
    - -

    Sets a value determining if the axis should be drawn through zero of opposing axes.

    -
    Syntax
    subroutine set_zero_axis(class(plot_axis) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_axis object.
    [in]xSet to true to draw as a zero axis; else, set to false.
    -
    -
    - -

    Definition at line 1942 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_zero_axis_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_axis::set_zero_axis_line_width
    -
    - -

    Sets the width of the line used to represent the zero axis line, if active.

    -
    Syntax
    subroutine set_zero_axis_line_width(class(plot_axis) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_axis object.
    [in]xThe width of the line, in pixels.
    -
    -
    - -

    Definition at line 1964 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_autoscale

    - -
    -
    - - - - -
    logical fplot_core::plot_axis::m_autoscale = .true.
    -
    - -

    Autoscale?

    - -

    Definition at line 1790 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_axiswidth

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_axis::m_axiswidth = 1.0
    -
    - -

    The width, in pixels, of the zero axis line.

    - -

    Definition at line 1798 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_defaultticlabels

    - -
    -
    - - - - -
    logical fplot_core::plot_axis::m_defaultticlabels = .true.
    -
    - -

    Use default tic label format?

    - -

    Definition at line 1801 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_hastitle

    - -
    -
    - - - - - -
    - - - - -
    logical fplot_core::plot_axis::m_hastitle = .false.
    -
    -private
    -
    - -

    Has a title.

    - -

    Definition at line 1786 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_limits

    - -
    -
    - - - - -
    real(real64), dimension(2) fplot_core::plot_axis::m_limits = [0.0d0, 1.0d0]
    -
    - -

    Display limits.

    - -

    Definition at line 1792 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_logscale

    - -
    -
    - - - - -
    logical fplot_core::plot_axis::m_logscale = .false.
    -
    - -

    Log scaled?

    - -

    Definition at line 1794 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_ticlabelfmt

    - -
    -
    - - - - -
    character(len = plotdata_max_name_length) fplot_core::plot_axis::m_ticlabelfmt = "%g"
    -
    - -

    The tic label format.

    - -

    Definition at line 1803 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_title

    - -
    -
    - - - - -
    character(len = plotdata_max_name_length) fplot_core::plot_axis::m_title = ""
    -
    - -

    The axis title.

    - -

    Definition at line 1788 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_zeroaxis

    - -
    -
    - - - - -
    logical fplot_core::plot_axis::m_zeroaxis = .false.
    -
    - -

    Zero axis?

    - -

    Definition at line 1796 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__axis.js b/docs/html/structfplot__core_1_1plot__axis.js deleted file mode 100644 index dca6378..0000000 --- a/docs/html/structfplot__core_1_1plot__axis.js +++ /dev/null @@ -1,31 +0,0 @@ -var structfplot__core_1_1plot__axis = -[ - [ "get_autoscale", "structfplot__core_1_1plot__axis.html#aaaf9ace8a7b41b32aaee34f103e10ca0", null ], - [ "get_command_string", "structfplot__core_1_1plot__axis.html#a00d4833c85b699bdff381ae05100cf6a", null ], - [ "get_id_string", "structfplot__core_1_1plot__axis.html#a503b9d12d8a13992bdcf2d2698a90b10", null ], - [ "get_is_log_scaled", "structfplot__core_1_1plot__axis.html#a1826e039d7a1726fc8c19a5215158708", null ], - [ "get_limits", "structfplot__core_1_1plot__axis.html#a025972a1e5bdd167cfd1e605798f3236", null ], - [ "get_tic_label_format", "structfplot__core_1_1plot__axis.html#adf896e948d36fc834734ba6abccbe9d1", null ], - [ "get_title", "structfplot__core_1_1plot__axis.html#af93e4f7ff1f6ea1823a45a92a272f91c", null ], - [ "get_use_default_tic_label_format", "structfplot__core_1_1plot__axis.html#a43b1a4ecac087b3b84d9019383d1030e", null ], - [ "get_zero_axis", "structfplot__core_1_1plot__axis.html#a26ec236090b21f9e30770de3a2487f56", null ], - [ "get_zero_axis_line_width", "structfplot__core_1_1plot__axis.html#a89c204ec15cf6688768cc27252316228", null ], - [ "is_title_defined", "structfplot__core_1_1plot__axis.html#a726c620a8c7921f455900cb5bec1e0c7", null ], - [ "set_autoscale", "structfplot__core_1_1plot__axis.html#a31ba8659f53c12145bf26884f929a3b6", null ], - [ "set_is_log_scaled", "structfplot__core_1_1plot__axis.html#a7ea2e86ed7e730aacad368f67c247a79", null ], - [ "set_limits", "structfplot__core_1_1plot__axis.html#ac4636b37253874b8b072c7916cac4686", null ], - [ "set_tic_label_format", "structfplot__core_1_1plot__axis.html#a65519918c3bc51c7c55856f4ab70de47", null ], - [ "set_title", "structfplot__core_1_1plot__axis.html#ae48c3bbf59663fd54efc7b814d4e1662", null ], - [ "set_use_default_tic_label_format", "structfplot__core_1_1plot__axis.html#a5fb4b8b807033d2d7e81ee3e7077a1e5", null ], - [ "set_zero_axis", "structfplot__core_1_1plot__axis.html#a19f1868adac5ac661c5b7d33d02f35c9", null ], - [ "set_zero_axis_line_width", "structfplot__core_1_1plot__axis.html#abd2dce525007a33e050ccb0c92024824", null ], - [ "m_autoscale", "structfplot__core_1_1plot__axis.html#ae7035c7f62f8ec51ac458edf459655c2", null ], - [ "m_axiswidth", "structfplot__core_1_1plot__axis.html#ac9130dccdf4506356085dc77982f23eb", null ], - [ "m_defaultticlabels", "structfplot__core_1_1plot__axis.html#af7ffb68c817546118481d46b513397b4", null ], - [ "m_hastitle", "structfplot__core_1_1plot__axis.html#afaee6697e2ae5d4c15274ef6d1b1bebf", null ], - [ "m_limits", "structfplot__core_1_1plot__axis.html#a103b7151710f1dca0a4f3a59ab4fc910", null ], - [ "m_logscale", "structfplot__core_1_1plot__axis.html#ae0308633db7a5bc2aa9dfc5aebc0f871", null ], - [ "m_ticlabelfmt", "structfplot__core_1_1plot__axis.html#a3c72c7ce3d24ebdd12ee8d29c85e507f", null ], - [ "m_title", "structfplot__core_1_1plot__axis.html#a42ca46716cc307a467698534f2ce77c7", null ], - [ "m_zeroaxis", "structfplot__core_1_1plot__axis.html#ae1841279b24ce9872404992f5f025265", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__axis.png b/docs/html/structfplot__core_1_1plot__axis.png deleted file mode 100644 index 971b8d8460a955c6a9f05b0a124510f206fb5ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1710 zcmchYeN@s{7{^IV%`z=p`I@a#dogpCiJD-ACey^JzZ5OCTAJnyiK$dSUs_YKoXa*z zF_~yOf0|@!Thzd^atjzyAkImsOTkRB#6%$2&(7J-+1bw7{@VTHxu56WbDw+9_xYZ4 z$)O?p%uH=e5eS4CHV_krKp3E4E;ccQ-8|oU(K8UE_BpdF|#LA1%fvrNXS%;8LMB9Jo88A8fO zUq5>~R{T?!+)#5=2(ngs=eZUMep7TGdvQux^7Qs{ae=`2ZBG=f&0=<01mM|?VK|RU zN{dl9V)|#ibRJ{VfE5_8xGMq^?C@eREzTN@r(B$wi+%3AjGGe650V8OG!Ag+bMTbN zI&80IH?*&m=2ri_t!RACpPYCtdwtsb-9#`z69|Z!TU@~%Zt%mSdS$pGqz(YK-em4j zcd@&r6Dac@f4I(i5Q0$t%7S;x!L@#d0%L<67JtB#Sx|4AkI?%pvsl}80^?vZEuDTbjy{(r#~yMCNG>4{j7y;d}gJ!9(23?Mu7eK7>;%1|d5IC5c?(eUiz_s^`p&5bQFi zRrs;a6rl_*`PH3CV(jSjk+@#1TBRXalk9(hlnKGg0(&BZpHr)_w<@fq4n4o*v$u7> zY!a(1@O{&Y>S24Rt9webzB_EyN}IRAXOr96d$*>?W?!?2j~rm=d7IIMczNMaA+d-Q zcAAN@Z_q@-4fyC8D!`WeDb*`Ig3>*sUH2ek?3xR8wbpW=bvP4eU3fT(?=xSaMIgh; zkUFz&H>=I8(t+nnU7cyyB>DB*voF%d|^%{ELp6q z%=fji!QGFQ1&IBaH6~B|U@(Kb{VzZpAt3GU4-t^BOjTxD7VY?od+q|`1njyfCv}$# zb|DAjaK(`v4`0!~VY!PX7+oWcDQTkk3;?9RQP~HDx9_i-R98VZd7}z6zJ*prf8?bWLc9>(z?c&eKF+x>Ou0N7 zH5Dd!a|DbpsWE*=2B_4kx8CrS(tuW6E}+D73f?l310;9<`G)dxMSnyADdg=Rw3ZzH_83;4%(4 zgy!GjJJsH*tTS8J>3G`e#i%HIHv~}+GZ#yBN6W%mo;3RMW*;i4wEE~;zESPYs=BQQ zQq`T!D^gd!Xqb`6iMj5{5CDYV5+zoT_MdmYuERpSnaU-dBD>U^$qXL9SCXjJp0uq_ zGDJTGAI+HOj&quF>6+lZsXO=mib)RaxaaDl|B*n=pvb_%SaZ>kRHh+P0HI(+<&Q>lFXW+G*S}b0;-ukn1G9;L0Fo2 zPpZ#82YhE9OVd%IJ3gDVSrR_m1gS5yT&aQ}cHmzdOUD5s7i1e**1 z+BbXxh}`p(V;Yuz(Zz-ag+{mfOAIKT - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_bar Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_bar, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_allplt_clear_allfplot_core::plot
    clear_all_labelsplt_clear_labelsfplot_core::plot
    clear_arrowsplt_clear_arrowsfplot_core::plot
    drawplt_drawfplot_core::plot
    free_resourcesplt_clean_upfplot_core::plot
    getplt_getfplot_core::plot
    get_arrowplt_get_arrowfplot_core::plot
    get_arrow_countplt_get_arrow_countfplot_core::plot
    get_axis_equalplt_get_axis_equalfplot_core::plot
    get_bar_widthpb_get_bar_width (defined in fplot_core::plot_bar)fplot_core::plot_bar
    get_colormapplt_get_colormapfplot_core::plot
    get_command_stringpb_get_cmdfplot_core::plot_barvirtual
    get_countplt_get_countfplot_core::plot
    get_draw_borderplt_get_draw_borderfplot_core::plot
    get_font_nameplt_get_fontfplot_core::plot
    get_font_sizeplt_get_font_sizefplot_core::plot
    get_labelplt_get_labelfplot_core::plot
    get_label_countplt_get_label_countfplot_core::plot
    get_legendplt_get_legendfplot_core::plot
    get_show_colorbarplt_get_show_colorbarfplot_core::plot
    get_show_gridlinesplt_get_show_gridfplot_core::plot
    get_square_axesp2d_get_square_axesfplot_core::plot_2d
    get_terminalplt_get_termfplot_core::plot
    get_tics_inwardplt_get_tics_infplot_core::plot
    get_titleplt_get_titlefplot_core::plot
    get_use_y2_axisp2d_get_use_y2fplot_core::plot_2d
    get_x_axisp2d_get_x_axisfplot_core::plot_2d
    get_y2_axisp2d_get_y2_axisfplot_core::plot_2d
    get_y_axisp2d_get_y_axisfplot_core::plot_2d
    initializep2d_initfplot_core::plot_2d
    is_title_definedplt_has_titlefplot_core::plot
    m_arrowsfplot_core::plot
    m_axisequalfplot_core::plot
    m_barwidthfplot_core::plot_barprivate
    m_colorindexfplot_core::plot
    m_colormapfplot_core::plot
    m_datafplot_core::plot
    m_drawborderfplot_core::plot
    m_hastitlefplot_core::plot
    m_labelsfplot_core::plot
    m_legendfplot_core::plot
    m_set2squarefplot_core::plot_2d
    m_showcolorbarfplot_core::plot
    m_showgridfplot_core::plot
    m_terminalfplot_core::plot
    m_ticsinfplot_core::plot
    m_titlefplot_core::plotprivate
    m_usey2fplot_core::plot_2d
    m_xaxisfplot_core::plot_2dprivate
    m_y2axisfplot_core::plot_2d
    m_yaxisfplot_core::plot_2d
    p2d_clean_upp2d_clean_upfplot_core::plot_2d
    popplt_pop_datafplot_core::plot
    pop_arrowplt_pop_arrowfplot_core::plot
    pop_labelplt_pop_labelfplot_core::plot
    pushplt_push_datafplot_core::plot
    push_arrowplt_push_arrowfplot_core::plot
    push_labelplt_push_labelfplot_core::plot
    save_fileplt_savefplot_core::plot
    setplt_setfplot_core::plot
    set_arrowplt_set_arrowfplot_core::plot
    set_axis_equalplt_set_axis_equalfplot_core::plot
    set_bar_widthpb_set_bar_width (defined in fplot_core::plot_bar)fplot_core::plot_bar
    set_colormapplt_set_colormapfplot_core::plot
    set_draw_borderplt_set_draw_borderfplot_core::plot
    set_font_nameplt_set_fontfplot_core::plot
    set_font_sizeplt_set_font_sizefplot_core::plot
    set_labelplt_set_labelfplot_core::plot
    set_show_colorbarplt_set_show_colorbarfplot_core::plot
    set_show_gridlinesplt_set_show_gridfplot_core::plot
    set_square_axesp2d_set_square_axesfplot_core::plot_2d
    set_tics_inwardplt_set_tics_infplot_core::plot
    set_titleplt_set_titlefplot_core::plot
    set_use_y2_axisp2d_set_use_y2fplot_core::plot_2d
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__bar.html b/docs/html/structfplot__core_1_1plot__bar.html deleted file mode 100644 index d0f0adf..0000000 --- a/docs/html/structfplot__core_1_1plot__bar.html +++ /dev/null @@ -1,461 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_bar Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_bar Type Reference
    -
    -
    - -

    Defines a 2D plot tailored towards bar plotting. - More...

    -
    -Inheritance diagram for fplot_core::plot_bar:
    -
    -
    - - -fplot_core::plot_2d -fplot_core::plot -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_bar_width pb_get_bar_width
     
    procedure, public set_bar_width pb_set_bar_width
     
    procedure, public get_command_string pb_get_cmd
     Gets the GNUPLOT command string to represent this plot_2d object.
     
    - Public Member Functions inherited from fplot_core::plot_2d
    final p2d_clean_up p2d_clean_up
     Cleans up resources held by the plot_2d object.
     
    procedure, public initialize p2d_init
     Initializes the plot_2d object.
     
    procedure, public get_x_axis p2d_get_x_axis
     Gets the x-axis object.
     
    procedure, public get_y_axis p2d_get_y_axis
     Gets the y-axis object.
     
    procedure, public get_y2_axis p2d_get_y2_axis
     Gets the secondary y-axis object.
     
    procedure, public get_use_y2_axis p2d_get_use_y2
     Gets a flag determining if the secondary y-axis should be displayed.
     
    procedure, public set_use_y2_axis p2d_set_use_y2
     Sets a flag determining if the secondary y-axis should be displayed.
     
    procedure, public get_square_axes p2d_get_square_axes
     Gets a logical flag determining if the axes size should be squared off.
     
    procedure, public set_square_axes p2d_set_square_axes
     Sets a logical flag determining if the axes size should be squared off.
     
    - Public Member Functions inherited from fplot_core::plot
    procedure, public free_resources plt_clean_up
     Cleans up resources held by the plot object. Inheriting classes are expected to call this routine to free internally held resources.
     
    procedure, public initialize plt_init
     Initializes the plot object.
     
    procedure, public get_title plt_get_title
     Gets the plot's title.
     
    procedure, public set_title plt_set_title
     Sets the plot's title.
     
    procedure, public is_title_defined plt_has_title
     Gets a value determining if a title has been defined for the plot object.
     
    procedure, public get_legend plt_get_legend
     Gets the plot's legend object.
     
    procedure, public get_count plt_get_count
     Gets the number of stored plot_data objects.
     
    procedure, public push plt_push_data
     Pushes a plot_data object onto the stack.
     
    procedure, public pop plt_pop_data
     Pops the last plot_data object from the stack.
     
    procedure, public clear_all plt_clear_all
     Removes all plot_data objects from the plot.
     
    procedure, public get plt_get
     Gets a pointer to the requested plot_data object.
     
    procedure, public set plt_set
     Sets the requested plot_data object into the plot.
     
    procedure, public get_terminal plt_get_term
     Gets the GNUPLOT terminal object.
     
    procedure, public get_show_gridlines plt_get_show_grid
     Gets a flag determining if the grid lines should be shown.
     
    procedure, public set_show_gridlines plt_set_show_grid
     Sets a flag determining if the grid lines should be shown.
     
    procedure, public draw plt_draw
     Launches GNUPLOT and draws the plot per the current state of the command list.
     
    procedure, public save_file plt_save
     Saves a GNUPLOT command file.
     
    procedure, public get_font_name plt_get_font
     Gets the name of the font used for plot text.
     
    procedure, public set_font_name plt_set_font
     Sets the name of the font used for plot text.
     
    procedure, public get_font_size plt_get_font_size
     Gets the size of the font used by the plot.
     
    procedure, public set_font_size plt_set_font_size
     Sets the size of the font used by the plot.
     
    procedure, public get_tics_inward plt_get_tics_in
     Gets a value determining if the axis tic marks should point inwards.
     
    procedure, public set_tics_inward plt_set_tics_in
     Sets a value determining if the axis tic marks should point inwards.
     
    procedure, public get_draw_border plt_get_draw_border
     Gets a value determining if the border should be drawn.
     
    procedure, public set_draw_border plt_set_draw_border
     Sets a value determining if the border should be drawn.
     
    procedure, public push_label plt_push_label
     Adds a label to the plot.
     
    procedure, public pop_label plt_pop_label
     Removes the last label from the plot.
     
    procedure, public get_label plt_get_label
     Gets the requested plot_label from the plot.
     
    procedure, public set_label plt_set_label
     Sets the specified plot_label object.
     
    procedure, public get_label_count plt_get_label_count
     Gets the number of plot_label objects belonging to the plot.
     
    procedure, public clear_all_labels plt_clear_labels
     Clears all plot_label objects from the plot.
     
    procedure, public get_axis_equal plt_get_axis_equal
     Gets a flag determining if the axes should be equally scaled.
     
    procedure, public set_axis_equal plt_set_axis_equal
     Sets a flag determining if the axes should be equally scaled.
     
    procedure, public get_colormap plt_get_colormap
     Gets a pointer to the colormap object.
     
    procedure, public set_colormap plt_set_colormap
     Sets the colormap object.
     
    procedure, public get_show_colorbar plt_get_show_colorbar
     Gets a value determining if the colorbar should be shown.
     
    procedure, public set_show_colorbar plt_set_show_colorbar
     Sets a value determining if the colorbar should be shown.
     
    procedure, public push_arrow plt_push_arrow
     Pushes a new plot_arrow object onto the plot.
     
    procedure, public pop_arrow plt_pop_arrow
     Pops a plot_arrow object from the plot.
     
    procedure, public get_arrow plt_get_arrow
     Gets a pointer to the requested plot_arrow object.
     
    procedure, public set_arrow plt_set_arrow
     Sets a plot_arrow into the plot.
     
    procedure, public get_arrow_count plt_get_arrow_count
     Gets the number of plot_arrow objects held by the plot object.
     
    procedure, public clear_arrows plt_clear_arrows
     Clears all plot_arrow objects from the plot.
     
    - - - - -

    -Private Attributes

    real(real32) m_barwidth = 0.75d0
     A relative scaling of the width of a single bar. The value must be between 0 and 1 with 1 being full width.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::plot_2d
    type(y_axis), pointer m_yaxis => null()
     The y-axis.
     
    type(y2_axis), pointer m_y2axis => null()
     The secondary y-axis.
     
    logical m_usey2 = .false.
     Display the secondary y axis?
     
    logical m_set2square = .false.
     Set to square scaling.
     
    - Public Attributes inherited from fplot_core::plot
    logical m_hastitle = .false.
     Has a title?
     
    class(terminal), pointer m_terminal => null()
     The GNUPLOT terminal object to target.
     
    type(list) m_data
     A collection of plot_data items to plot.
     
    type(legend), pointer m_legend => null()
     The legend.
     
    logical m_showgrid = .true.
     Show grid lines?
     
    logical m_ticsin = .true.
     Point tic marks in?
     
    logical m_drawborder = .true.
     Draw the border?
     
    type(list) m_labels
     A collection of plot_label items to draw.
     
    integer(int32) m_colorindex = 1
     The color index to use for automatic line coloring for scatter plots.
     
    logical m_axisequal = .false.
     Determines if the axes should be scaled proportionally.
     
    class(colormap), pointer m_colormap
     The colormap.
     
    logical m_showcolorbar = .true.
     Show the colorbar?
     
    type(list) m_arrows
     A collection of plot_arrow items to draw.
     
    -

    Detailed Description

    -

    Defines a 2D plot tailored towards bar plotting.

    - -

    Definition at line 6727 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_bar_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_bar::get_bar_width
    -
    - -

    Definition at line 6733 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_bar::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this plot_2d object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(plot_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_2d object.
    -
    -
    -
    Returns
    The command string.
    - -

    Reimplemented from fplot_core::plot_2d.

    - -

    Definition at line 6735 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_bar_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_bar::set_bar_width
    -
    - -

    Definition at line 6734 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_barwidth

    - -
    -
    - - - - - -
    - - - - -
    real(real32) fplot_core::plot_bar::m_barwidth = 0.75d0
    -
    -private
    -
    - -

    A relative scaling of the width of a single bar. The value must be between 0 and 1 with 1 being full width.

    - -

    Definition at line 6731 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__bar.js b/docs/html/structfplot__core_1_1plot__bar.js deleted file mode 100644 index c058138..0000000 --- a/docs/html/structfplot__core_1_1plot__bar.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1plot__bar = -[ - [ "get_command_string", "structfplot__core_1_1plot__bar.html#aaf330bd04f03f6f56e8c74b00bdd123e", null ], - [ "m_barwidth", "structfplot__core_1_1plot__bar.html#a11075431e357389d21760413660a69de", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__bar.png b/docs/html/structfplot__core_1_1plot__bar.png deleted file mode 100644 index a663e5be24c76b087b90dd69e63cf47605c643b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1049 zcmeAS@N?(olHy`uVBq!ia0vp^9YB15gBeJ^$iJNkq@)9ULR|m<{|^#*^R=}9&~gg{ z%>s$(XI?yb@Bk=odNyncP>!=C$S;@y$Oi*+rrB2*7?_uMx;TbZFutApwy#Bj$CZEj zkq`g;_dI6z`sl+@s(bPHVORaT>iZc7elr0S{6W*VloTTO{ zYUepOPv-7?$F7EW)`=>QMLk|{3mx0UBe!n4*3(M4UkaORX71{XV4c;~V=(zsfX;d6 zzL-VYLEn|8IdBK%?Y-+8bmJq}mq(Ijg7OS6>-!y!9Xa2)CiKVLqR_-nW4_p+~aZwyy(P8Ri7_pDy$SIed3X}ZqWw&(NzeUo}* zTqXs2D*)Zxz<95W{X$bTygKh zq&`Y_{B^S=l+h@leWOlu`|G7%mGj!|PUy^Ea_;+TZKFdzrRDUwL+T@w}?t?m4fg&wL%c z`G}8|&)M}GK3%c-m9uAV6u*(pxot}(rTj72`nAjB(*0Z1^sr*fg(gnTrNA`o;dSza zW004d^aO)=eeUg%--GncBAZ3R<5?@`KDSHNIQ`&Z)yklG&lmC=oj$(u@+8l_D^742 zYw{ocWb@>N>MxzEcl4tkuz+H8QV^GQT%(-r;jCYt6aJMmr*QpeoiO*ytnIUcw7#YR zldo@W|B@+QZ^MsltGgKi^{}pgucFPrP5VBst(_OeX;kv$*O8@DE}c3bJbRsom*(G{ ovMNhco+xOl0^^xO(d2=AyX$h+DXZoM0y8m#r>mdKI;Vst053hym;e9( diff --git a/docs/html/structfplot__core_1_1plot__data-members.html b/docs/html/structfplot__core_1_1plot__data-members.html deleted file mode 100644 index 1c38a0f..0000000 --- a/docs/html/structfplot__core_1_1plot__data-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_data Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data, including all inherited members.

    - - - - - - -
    get_command_stringget_string_resultfplot_core::plot_objectpure virtual
    get_data_stringpd_get_string_resultfplot_core::plot_datapure virtual
    get_namepd_get_namefplot_core::plot_data
    m_namefplot_core::plot_dataprivate
    set_namepd_set_namefplot_core::plot_data
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data.html b/docs/html/structfplot__core_1_1plot__data.html deleted file mode 100644 index 6988b44..0000000 --- a/docs/html/structfplot__core_1_1plot__data.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data Type Referenceabstract
    -
    -
    - -

    Provides a container for plot data. - More...

    -
    -Inheritance diagram for fplot_core::plot_data:
    -
    -
    - - -fplot_core::plot_object -fplot_core::plot_data_colored -fplot_core::surface_plot_data -fplot_core::tri_surface_plot_data -fplot_core::filled_plot_data -fplot_core::plot_data_bar -fplot_core::plot_data_error_bars -fplot_core::plot_data_tri_2d -fplot_core::scatter_plot_data -fplot_core::vector_field_plot_data -fplot_core::plot_data_histogram -fplot_core::plot_data_2d -fplot_core::plot_data_3d - -
    - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    procedure(pd_get_string_result), deferred, public get_data_string pd_get_string_result
     Gets the GNUPLOT command string containing the actual data to plot.
     
    - Public Member Functions inherited from fplot_core::plot_object
    procedure(get_string_result), deferred, public get_command_string get_string_result
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    - - - - -

    -Private Attributes

    character(len=plotdata_max_name_lengthm_name = ""
     The name of the data set.
     
    -

    Detailed Description

    -

    Provides a container for plot data.

    - -

    Definition at line 1676 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure(pd_get_string_result), deferred, public fplot_core::plot_data::get_data_string
    -
    -pure virtual
    -
    -
    - -

    ◆ get_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data::get_name
    -
    - -

    Gets the name to associate with this data set.

    -
    Syntax
    character(len = :) function, allocatable get_name(class(plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data object.
    -
    -
    -
    Returns
    The name.
    - -

    Definition at line 1690 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data::set_name
    -
    - -

    Sets the name to associate with this data set.

    -
    Syntax
    subroutine set_name(class(plot_data) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_data object.
    [in]txtThe name.
    -
    -
    - -

    Definition at line 1700 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_name

    - -
    -
    - - - - - -
    - - - - -
    character(len = plotdata_max_name_length) fplot_core::plot_data::m_name = ""
    -
    -private
    -
    - -

    The name of the data set.

    - -

    Definition at line 1679 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data.js b/docs/html/structfplot__core_1_1plot__data.js deleted file mode 100644 index 21229c9..0000000 --- a/docs/html/structfplot__core_1_1plot__data.js +++ /dev/null @@ -1,7 +0,0 @@ -var structfplot__core_1_1plot__data = -[ - [ "get_data_string", "structfplot__core_1_1plot__data.html#a5b4c937341b806a85419f5d6968aea2d", null ], - [ "get_name", "structfplot__core_1_1plot__data.html#a445f80b716146d6087d2f1adaa4b98bf", null ], - [ "set_name", "structfplot__core_1_1plot__data.html#a94aed3f692e4f61414f2681cc105ee52", null ], - [ "m_name", "structfplot__core_1_1plot__data.html#a216bccf5c14d8633926484770e49112a", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data.png b/docs/html/structfplot__core_1_1plot__data.png deleted file mode 100644 index 91175ba8fa0029aeeedb5ad394f7fee53180618e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4787 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 diff --git a/docs/html/structfplot__core_1_1plot__data__2d-members.html b/docs/html/structfplot__core_1_1plot__data__2d-members.html deleted file mode 100644 index 48eece9..0000000 --- a/docs/html/structfplot__core_1_1plot__data__2d-members.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_data_2d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_2d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    define_datapd2d_set_data_1fplot_core::plot_data_2d
    define_datapd2d_set_data_2fplot_core::plot_data_2d
    get_axes_stringpd2d_get_axes_cmdfplot_core::plot_data_2dvirtual
    get_color_datapd2d_get_c_arrayfplot_core::plot_data_2d
    get_color_indexpdc_get_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    get_command_stringspd_get_cmdfplot_core::scatter_plot_datavirtual
    get_countpd2d_get_data_countfplot_core::plot_data_2dvirtual
    get_data_stringpd2d_get_data_cmdfplot_core::plot_data_2dvirtual
    get_draw_against_y2pd2d_get_draw_against_y2fplot_core::plot_data_2d
    get_draw_linespd_get_draw_linefplot_core::scatter_plot_data
    get_draw_markersspd_get_draw_markersfplot_core::scatter_plot_data
    get_fill_curvespd_get_filledfplot_core::scatter_plot_data
    get_line_colorpdc_get_line_colorfplot_core::plot_data_colored
    get_line_stylespd_get_line_stylefplot_core::scatter_plot_data
    get_line_widthspd_get_line_widthfplot_core::scatter_plot_data
    get_marker_frequencyspd_get_marker_frequencyfplot_core::scatter_plot_data
    get_marker_scalingspd_get_marker_scalingfplot_core::scatter_plot_data
    get_marker_stylespd_get_marker_stylefplot_core::scatter_plot_data
    get_namepd_get_namefplot_core::plot_data
    get_point_size_datapd2d_get_ps_arrayfplot_core::plot_data_2d
    get_simplification_factorspd_get_simplify_factorfplot_core::scatter_plot_data
    get_simplify_dataspd_get_simplify_datafplot_core::scatter_plot_data
    get_use_data_dependent_colorsspd_get_data_dependent_colorsfplot_core::scatter_plot_data
    get_use_variable_size_pointsspd_get_use_var_point_sizefplot_core::scatter_plot_data
    get_xpd2d_get_x_datafplot_core::plot_data_2dvirtual
    get_x_datapd2d_get_x_arrayfplot_core::plot_data_2d
    get_ypd2d_get_y_datafplot_core::plot_data_2dvirtual
    get_y_datapd2d_get_y_arrayfplot_core::plot_data_2d
    m_colorfplot_core::plot_data_coloredprivate
    m_colorindexfplot_core::plot_data_colored
    m_datafplot_core::plot_data_2dprivate
    m_datadependentcolorsfplot_core::scatter_plot_data
    m_drawlinefplot_core::scatter_plot_dataprivate
    m_drawmarkersfplot_core::scatter_plot_data
    m_filledcurvefplot_core::scatter_plot_data
    m_linestylefplot_core::scatter_plot_data
    m_linewidthfplot_core::scatter_plot_data
    m_markerfrequencyfplot_core::scatter_plot_data
    m_markersizefplot_core::scatter_plot_data
    m_markertypefplot_core::scatter_plot_data
    m_namefplot_core::plot_dataprivate
    m_simplifydatafplot_core::scatter_plot_data
    m_simplifyfactorfplot_core::scatter_plot_data
    m_useautocolorfplot_core::plot_data_colored
    m_usevariablesizepointsfplot_core::scatter_plot_data
    m_usey2fplot_core::plot_data_2d
    pd2d_set_data_1pd2d_set_data_1 (defined in fplot_core::plot_data_2d)fplot_core::plot_data_2d
    pd2d_set_data_2pd2d_set_data_2 (defined in fplot_core::plot_data_2d)fplot_core::plot_data_2d
    set_color_indexpdc_set_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    set_draw_against_y2pd2d_set_draw_against_y2fplot_core::plot_data_2d
    set_draw_linespd_set_draw_linefplot_core::scatter_plot_data
    set_draw_markersspd_set_draw_markersfplot_core::scatter_plot_data
    set_fill_curvespd_set_filledfplot_core::scatter_plot_data
    set_line_colorpdc_set_line_colorfplot_core::plot_data_colored
    set_line_stylespd_set_line_stylefplot_core::scatter_plot_data
    set_line_widthspd_set_line_widthfplot_core::scatter_plot_data
    set_marker_frequencyspd_set_marker_frequencyfplot_core::scatter_plot_data
    set_marker_scalingspd_set_marker_scalingfplot_core::scatter_plot_data
    set_marker_stylespd_set_marker_stylefplot_core::scatter_plot_data
    set_namepd_set_namefplot_core::plot_data
    set_simplification_factorspd_set_simplify_factorfplot_core::scatter_plot_data
    set_simplify_dataspd_set_simplify_datafplot_core::scatter_plot_data
    set_use_data_dependent_colorsspd_set_data_dependent_colorsfplot_core::scatter_plot_data
    set_use_variable_size_pointsspd_set_use_var_point_sizefplot_core::scatter_plot_data
    set_xpd2d_set_x_datafplot_core::plot_data_2dvirtual
    set_ypd2d_set_y_datafplot_core::plot_data_2dvirtual
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__2d.html b/docs/html/structfplot__core_1_1plot__data__2d.html deleted file mode 100644 index 8023b97..0000000 --- a/docs/html/structfplot__core_1_1plot__data__2d.html +++ /dev/null @@ -1,966 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data_2d Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data_2d Type Reference
    -
    -
    - -

    Defines a two-dimensional plot data set. - More...

    -
    -Inheritance diagram for fplot_core::plot_data_2d:
    -
    -
    - - -fplot_core::scatter_plot_data -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_axes_string pd2d_get_axes_cmd
     Gets the GNUPLOT command string defining which axes the data is to be plotted against.
     
    procedure, public get_data_string pd2d_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public get_count pd2d_get_data_count
     Gets the number of data points.
     
    procedure, public get_x pd2d_get_x_data
     Gets the requested X data point.
     
    procedure, public set_x pd2d_set_x_data
     Sets the requested X data point.
     
    procedure, public get_y pd2d_get_y_data
     Gets the requested Y data point.
     
    procedure, public set_y pd2d_set_y_data
     Sets the requested Y data point.
     
    procedure, public get_draw_against_y2 pd2d_get_draw_against_y2
     Gets a value determining if the data should be plotted against the secondary y-axis.
     
    procedure, public set_draw_against_y2 pd2d_set_draw_against_y2
     Sets a value determining if the data should be plotted against the secondary y-axis.
     
    generic, public define_data pd2d_set_data_1
     Defines the data set.
     
    generic, public define_data pd2d_set_data_2
     Defines the data set.
     
    procedure pd2d_set_data_1 pd2d_set_data_1
     
    procedure pd2d_set_data_2 pd2d_set_data_2
     
    procedure, public get_x_data pd2d_get_x_array
     Gets the stored X data array.
     
    procedure, public get_y_data pd2d_get_y_array
     Gets the stored Y data array.
     
    procedure, public get_color_data pd2d_get_c_array
     Gets the stored color scaling data array.
     
    procedure, public get_point_size_data pd2d_get_ps_array
     Gets the stored point size data array.
     
    - Public Member Functions inherited from fplot_core::scatter_plot_data
    procedure, public get_command_string spd_get_cmd
     Gets the GNUPLOT command string to represent this scatter_plot_data object.
     
    procedure, public get_line_width spd_get_line_width
     Gets the width of the line, in pixels.
     
    procedure, public set_line_width spd_set_line_width
     Sets the width of the line, in pixels.
     
    procedure, public get_line_style spd_get_line_style
     Gets the line style.
     
    procedure, public set_line_style spd_set_line_style
     Sets the line style.
     
    procedure, public get_draw_line spd_get_draw_line
     Gets a value determining if a line should be drawn.
     
    procedure, public set_draw_line spd_set_draw_line
     Sets a value determining if a line should be drawn.
     
    procedure, public get_draw_markers spd_get_draw_markers
     Gets a value determining if data point markers should be drawn.
     
    procedure, public set_draw_markers spd_set_draw_markers
     Sets a value determining if data point markers should be drawn.
     
    procedure, public get_marker_style spd_get_marker_style
     Gets the marker style.
     
    procedure, public set_marker_style spd_set_marker_style
     Sets the marker style.
     
    procedure, public get_marker_scaling spd_get_marker_scaling
     Gets the marker scaling.
     
    procedure, public set_marker_scaling spd_set_marker_scaling
     Sets the marker scaling.
     
    procedure, public get_marker_frequency spd_get_marker_frequency
     Gets the marker frequency.
     
    procedure, public set_marker_frequency spd_set_marker_frequency
     Sets the marker frequency.
     
    procedure, public get_simplify_data spd_get_simplify_data
     Gets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.
     
    procedure, public set_simplify_data spd_set_simplify_data
     Sets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.
     
    procedure, public get_simplification_factor spd_get_simplify_factor
     Gets a factor used to establish the simplification tolerance.
     
    procedure, public set_simplification_factor spd_set_simplify_factor
     Sets a factor used to establish the simplification tolerance. The tolerance is established by multplying this factor by the range of the dependent variable data.
     
    procedure, public get_use_data_dependent_colors spd_get_data_dependent_colors
     Gets a value determing if data-dependent colors should be used.
     
    procedure, public set_use_data_dependent_colors spd_set_data_dependent_colors
     Sets a value determing if data dependent colors should be used.
     
    procedure, public get_fill_curve spd_get_filled
     Gets a logical value determining if a filled curve should be drawn.
     
    procedure, public set_fill_curve spd_set_filled
     Sets a logical value determining if a filled curve should be drawn.
     
    procedure, public get_use_variable_size_points spd_get_use_var_point_size
     Gets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.
     
    procedure, public set_use_variable_size_points spd_set_use_var_point_size
     Sets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    logical m_usey2 = .false.
     Draw against the secondary y axis?
     
    - Public Attributes inherited from fplot_core::scatter_plot_data
    logical m_drawmarkers = .false.
     Draw the markers?
     
    integer(int32) m_markerfrequency = 1
     Marker frequency.
     
    real(real32) m_linewidth = 1.0
     Line width.
     
    integer(int32) m_linestyle = LINE_SOLID
     Line style.
     
    integer(int32) m_markertype = MARKER_X
     Marker type.
     
    real(real32) m_markersize = 1.0
     Marker size multiplier.
     
    logical m_simplifydata = .true.
     True if large data sets should be simplified before sending to GNUPLOT.
     
    real(real64) m_simplifyfactor = 1.0d-3
     A scaling factor used to establish the simplification tolerance. The simplification tolerance is established by multiplying this factor by the range in the dependent variable data.
     
    logical m_datadependentcolors = .false.
     Determines if the data should utilize data-dependent colors.
     
    logical m_filledcurve = .false.
     Fill the curve?
     
    logical m_usevariablesizepoints = .false.
     Use variable size data points?
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:,:), allocatable m_data
     An N-by-2 matrix containing the x and y data points.
     
    -

    Detailed Description

    -

    Defines a two-dimensional plot data set.

    - -

    Definition at line 4033 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data() [1/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_2d::define_data
    -
    - -

    Defines the data set.

    -
    Overload 1
    -
    Syntax
    subroutine define_data(class(plot_data_2d) this, real(real64) x(:), real(real64) y(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]xAn N-element array containing the x coordinate data.
    [in]yAn N-element array containing the y coordinate data.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if x and y are not the same size.
    • -
    -
    -
    -
    -
    Overload 2
    -
    Syntax
    subroutine define_data(class(plot_data_2d) this, real(real64) y(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]yAn N-element array containing the y-coordinate data. This data will be plotted against its own index.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    -
    Overload 3
    -
    Syntax
    subroutine define_data(class(plot_data_2d) this, real(real64) x(:), real(real64) y(:), optional real(real64) c(:), optional real(real64) ps(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]xAn N-element array containing the x coordinate data.
    [in]yAn N-element array containing the y coordinate data.
    [in]cAn N-element array defining how color should vary with the current colormap for each value.
    [in]psAn N-element array defining the size of each data point.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if x and y are not the same size.
    • -
    -
    -
    -
    - -

    Definition at line 4199 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_data() [2/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_2d::define_data
    -
    - -

    Defines the data set.

    -
    Overload 1
    -
    Syntax
    subroutine define_data(class(plot_data_2d) this, real(real64) x(:), real(real64) y(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]xAn N-element array containing the x coordinate data.
    [in]yAn N-element array containing the y coordinate data.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if x and y are not the same size.
    • -
    -
    -
    -
    -
    Overload 2
    -
    Syntax
    subroutine define_data(class(plot_data_2d) this, real(real64) y(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]yAn N-element array containing the y-coordinate data. This data will be plotted against its own index.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    -
    Overload 3
    -
    Syntax
    subroutine define_data(class(plot_data_2d) this, real(real64) x(:), real(real64) y(:), optional real(real64) c(:), optional real(real64) ps(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]xAn N-element array containing the x coordinate data.
    [in]yAn N-element array containing the y coordinate data.
    [in]cAn N-element array defining how color should vary with the current colormap for each value.
    [in]psAn N-element array defining the size of each data point.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if x and y are not the same size.
    • -
    -
    -
    -
    - -

    Definition at line 4199 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_axes_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_axes_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string defining which axes the data is to be plotted against.

    -
    Syntax
    character(len = :) function, allocatable get_axis_string(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4050 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_color_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_color_data
    -
    - -

    Gets the stored color scaling data array.

    -
    Syntax
    real(real64)(:) function get_color_data(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4232 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_count()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_count
    -
    -virtual
    -
    - -

    Gets the number of data points.

    -
    Syntax
    pure integer(int32) get_count(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    The number of data points.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4071 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    -
    Syntax
    character(len = :) function, allocatable get_data_string(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 4061 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_against_y2()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_draw_against_y2
    -
    - -

    Gets a value determining if the data should be plotted against the secondary y-axis.

    -
    Syntax
    pure logical function get_draw_against_y2(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    Returns true if the data should be plotted against the secondary y-axis; else, false to plot against the primary y-axis.
    - -

    Definition at line 4127 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_point_size_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_point_size_data
    -
    - -

    Gets the stored point size data array.

    -
    Syntax
    real(real64)(:) function get_point_size_data(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4242 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_x
    -
    -virtual
    -
    - -

    Gets the requested X data point.

    -
    Syntax
    pure real(real64) get_x(class(plot_data_2d) this, integer(int32) index)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot_data_2d object.
    [in]indexThe index of the data point to retrieve.
    -
    -
    -
    Returns
    The requested data point.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4082 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_x_data
    -
    - -

    Gets the stored X data array.

    -
    Syntax
    real(real64)(:) function get_x_data(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4212 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_y
    -
    -virtual
    -
    - -

    Gets the requested Y data point.

    -
    Syntax
    pure real(real64) get_y(class(plot_data_2d) this, integer(int32) index)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot_data_2d object.
    [in]indexThe index of the data point to retrieve.
    -
    -
    -
    Returns
    The requested data point.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4104 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_2d::get_y_data
    -
    - -

    Gets the stored Y data array.

    -
    Syntax
    real(real64)(:) function get_y_data(class(plot_data_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_2d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4222 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pd2d_set_data_1()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_2d::pd2d_set_data_1
    -
    - -

    Definition at line 4200 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pd2d_set_data_2()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_2d::pd2d_set_data_2
    -
    - -

    Definition at line 4201 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_against_y2()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_2d::set_draw_against_y2
    -
    - -

    Sets a value determining if the data should be plotted against the secondary y-axis.

    -
    Syntax
    subroutine set_draw_against_y2(class(plot_data_2d) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_data_2d object.
    [in]xSet to true if the data should be plotted against the secondary y-axis; else, false to plot against the primary y-axis.
    -
    -
    - -

    Definition at line 4139 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_x()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_2d::set_x
    -
    -virtual
    -
    - -

    Sets the requested X data point.

    -
    Syntax
    subroutine set_x(class(plot_data_2d) this, integer(int32) index, real(real64) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]indexThe index of the data point to replace.
    [in]xThe data point.
    -
    -
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4093 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_y()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_2d::set_y
    -
    -virtual
    -
    - -

    Sets the requested Y data point.

    -
    Syntax
    subroutine set_y(class(plot_data_2d) this, integer(int32) index, real(real64) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]indexThe index of the data point to replace.
    [in]xThe data point.
    -
    -
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4115 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_data

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::plot_data_2d::m_data
    -
    -private
    -
    - -

    An N-by-2 matrix containing the x and y data points.

    - -

    Definition at line 4036 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_usey2

    - -
    -
    - - - - -
    logical fplot_core::plot_data_2d::m_usey2 = .false.
    -
    - -

    Draw against the secondary y axis?

    - -

    Definition at line 4038 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__2d.js b/docs/html/structfplot__core_1_1plot__data__2d.js deleted file mode 100644 index 6d84ac9..0000000 --- a/docs/html/structfplot__core_1_1plot__data__2d.js +++ /dev/null @@ -1,20 +0,0 @@ -var structfplot__core_1_1plot__data__2d = -[ - [ "define_data", "structfplot__core_1_1plot__data__2d.html#aff2e615bf20ac66b403695ce10e5be4d", null ], - [ "define_data", "structfplot__core_1_1plot__data__2d.html#a4ef9823b92c13db70504897adac11e70", null ], - [ "get_axes_string", "structfplot__core_1_1plot__data__2d.html#abff268284715672d150a629a1f91f3fe", null ], - [ "get_color_data", "structfplot__core_1_1plot__data__2d.html#a44277af64f3ac00c1b8891d9ab07d097", null ], - [ "get_count", "structfplot__core_1_1plot__data__2d.html#a99a502c8e85b4eedb161e2bcab2f88c6", null ], - [ "get_data_string", "structfplot__core_1_1plot__data__2d.html#a198cd94a65ba98cbd2423b749a572154", null ], - [ "get_draw_against_y2", "structfplot__core_1_1plot__data__2d.html#afcbdba943a724904ce1099d8c48c8b50", null ], - [ "get_point_size_data", "structfplot__core_1_1plot__data__2d.html#a703b322285b948322b82b1450ddb89f3", null ], - [ "get_x", "structfplot__core_1_1plot__data__2d.html#a83fd2bbcc7a8db64d64fa2e4f8540698", null ], - [ "get_x_data", "structfplot__core_1_1plot__data__2d.html#a191daa9d59fb985eae560be76e826d2c", null ], - [ "get_y", "structfplot__core_1_1plot__data__2d.html#a97d6c5a96add7522152fe8b3146081d6", null ], - [ "get_y_data", "structfplot__core_1_1plot__data__2d.html#a1f46fa50e4d2a1eaff9d881b614f3122", null ], - [ "set_draw_against_y2", "structfplot__core_1_1plot__data__2d.html#a77e6f48e4bac69edcf0275d6ad13e550", null ], - [ "set_x", "structfplot__core_1_1plot__data__2d.html#aa605fb042bd378ebf5ba6fd94563d13a", null ], - [ "set_y", "structfplot__core_1_1plot__data__2d.html#a28d89209520ffd1728ff34aaa853f314", null ], - [ "m_data", "structfplot__core_1_1plot__data__2d.html#a35abd4e024ea4e55c55dedcab8e5e3bf", null ], - [ "m_usey2", "structfplot__core_1_1plot__data__2d.html#a94c27807c2a4c6403514fe5a387624be", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data__2d.png b/docs/html/structfplot__core_1_1plot__data__2d.png deleted file mode 100644 index 1f91a86a64e577231b68edf2016ef6e8b4e124d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmeAS@N?(olHy`uVBq!ia0vp^8-Vx+2Q!eYPMVVoq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#LW)JzX3_Dj46+eLHE377yF( z_Enni{&$`4>0+weJ=ykj^u{++8(D65yopch*{I$z=?cG|j_0%;8&o2TbYu?QiTb7T zl8=35@bS3)DqCf^#4DE_niTRez@mmr=9m#b&;IGFo|o;bXvBAw*Cn>=S~gz(>H9JOKl;zjbF$Lu|+uySeTg1zZy-(3%D>-_M1hoViJzOLu3qpJ={dp}Dttu6PAi9ftr z^`rgThrfdLzdgIExABP2^T1bk?Av;Q>Ym;L2S<32YUa`8hYwF%-8ZYBq~)po?;@A? zCHaHEP!JNIrs93?km0c#f(&YV7^)VTKfJ!$`0>4#`}=Ao%hliPW@*qR;C-aPDX>FN z7@IiSC;Wcqc5%`Y?l(*0<`vafNX=~RKB3ogc=>@uozDk8RIjYcdwyDdg_NC7?yu7a z)1Fyw*mvB-HTq#-mDT5^67%#ei#qN6Vq4#z+f(1~`_L@&t6KAtY0tJ*pPzNN{Mw1O z54-&AMgGZ{w;cblwA6El$1kr|^SC!Bvu?!*wTrHs?SK74mZ!v;hrbNBY2T??$-dj= zXKa3sK`A(d)_#s%Boh<*iS~!IQ4t@!xB;dC8|YyMYPjdLbPW z%#=flXVxzDpCtGBoZXy+_jc^x^;^0(qK8sKFpt0fik_eB951P8_z59-2$*3LZ`g0_NjjualE(9~zYFKi)2%tN%6Q)OWjrirumg7kw^o zwU-TkF8lDI;o*p9jSs&EeZ6yTx_^La&5T=LrZ;zgk(e6fWy&rpw{*F2{3v~Prn}eQ|M%sb+?t2856yqv_CaFbmRBq5ohx3i zowsh;)kzs?ews^XyZFQ2ZQWNtEjaXbd7R(HcS7E0O5~QF`%eKnUVzvJXTzyI^Px@lFV&+1nl(p>uGJCb*{7jP(+9I5}q{qy{bm5()nWi^AR LtDnm{r-UW|f9Uax diff --git a/docs/html/structfplot__core_1_1plot__data__3d-members.html b/docs/html/structfplot__core_1_1plot__data__3d-members.html deleted file mode 100644 index 3ec7608..0000000 --- a/docs/html/structfplot__core_1_1plot__data__3d-members.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_data_3d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_3d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    define_datapd3d_set_data_1fplot_core::plot_data_3d
    get_axes_stringpd3d_get_axes_cmdfplot_core::plot_data_3dvirtual
    get_color_datapd3d_get_c_arrayfplot_core::plot_data_3d
    get_color_indexpdc_get_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    get_command_stringspd_get_cmdfplot_core::scatter_plot_datavirtual
    get_countpd3d_get_data_countfplot_core::plot_data_3dvirtual
    get_data_stringpd3d_get_data_cmdfplot_core::plot_data_3dvirtual
    get_draw_linespd_get_draw_linefplot_core::scatter_plot_data
    get_draw_markersspd_get_draw_markersfplot_core::scatter_plot_data
    get_fill_curvespd_get_filledfplot_core::scatter_plot_data
    get_line_colorpdc_get_line_colorfplot_core::plot_data_colored
    get_line_stylespd_get_line_stylefplot_core::scatter_plot_data
    get_line_widthspd_get_line_widthfplot_core::scatter_plot_data
    get_marker_frequencyspd_get_marker_frequencyfplot_core::scatter_plot_data
    get_marker_scalingspd_get_marker_scalingfplot_core::scatter_plot_data
    get_marker_stylespd_get_marker_stylefplot_core::scatter_plot_data
    get_namepd_get_namefplot_core::plot_data
    get_point_size_datapd3d_get_c_arrayfplot_core::plot_data_3d
    get_simplification_factorspd_get_simplify_factorfplot_core::scatter_plot_data
    get_simplify_dataspd_get_simplify_datafplot_core::scatter_plot_data
    get_use_data_dependent_colorsspd_get_data_dependent_colorsfplot_core::scatter_plot_data
    get_use_variable_size_pointsspd_get_use_var_point_sizefplot_core::scatter_plot_data
    get_xpd3d_get_x_datafplot_core::plot_data_3dvirtual
    get_x_datapd3d_get_x_arrayfplot_core::plot_data_3d
    get_ypd3d_get_y_datafplot_core::plot_data_3dvirtual
    get_y_datapd3d_get_y_arrayfplot_core::plot_data_3d
    get_zpd3d_get_z_datafplot_core::plot_data_3d
    get_z_datapd3d_get_z_arrayfplot_core::plot_data_3d
    m_colorfplot_core::plot_data_coloredprivate
    m_colorindexfplot_core::plot_data_colored
    m_datafplot_core::plot_data_3dprivate
    m_datadependentcolorsfplot_core::scatter_plot_data
    m_drawlinefplot_core::scatter_plot_dataprivate
    m_drawmarkersfplot_core::scatter_plot_data
    m_filledcurvefplot_core::scatter_plot_data
    m_linestylefplot_core::scatter_plot_data
    m_linewidthfplot_core::scatter_plot_data
    m_markerfrequencyfplot_core::scatter_plot_data
    m_markersizefplot_core::scatter_plot_data
    m_markertypefplot_core::scatter_plot_data
    m_namefplot_core::plot_dataprivate
    m_simplifydatafplot_core::scatter_plot_data
    m_simplifyfactorfplot_core::scatter_plot_data
    m_useautocolorfplot_core::plot_data_colored
    m_usevariablesizepointsfplot_core::scatter_plot_data
    set_color_indexpdc_set_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    set_draw_linespd_set_draw_linefplot_core::scatter_plot_data
    set_draw_markersspd_set_draw_markersfplot_core::scatter_plot_data
    set_fill_curvespd_set_filledfplot_core::scatter_plot_data
    set_line_colorpdc_set_line_colorfplot_core::plot_data_colored
    set_line_stylespd_set_line_stylefplot_core::scatter_plot_data
    set_line_widthspd_set_line_widthfplot_core::scatter_plot_data
    set_marker_frequencyspd_set_marker_frequencyfplot_core::scatter_plot_data
    set_marker_scalingspd_set_marker_scalingfplot_core::scatter_plot_data
    set_marker_stylespd_set_marker_stylefplot_core::scatter_plot_data
    set_namepd_set_namefplot_core::plot_data
    set_simplification_factorspd_set_simplify_factorfplot_core::scatter_plot_data
    set_simplify_dataspd_set_simplify_datafplot_core::scatter_plot_data
    set_use_data_dependent_colorsspd_set_data_dependent_colorsfplot_core::scatter_plot_data
    set_use_variable_size_pointsspd_set_use_var_point_sizefplot_core::scatter_plot_data
    set_xpd3d_set_x_datafplot_core::plot_data_3dvirtual
    set_ypd3d_set_y_datafplot_core::plot_data_3dvirtual
    set_zpd3d_set_z_datafplot_core::plot_data_3d
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__3d.html b/docs/html/structfplot__core_1_1plot__data__3d.html deleted file mode 100644 index 5855812..0000000 --- a/docs/html/structfplot__core_1_1plot__data__3d.html +++ /dev/null @@ -1,839 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data_3d Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data_3d Type Reference
    -
    -
    - -

    Defines a three-dimensional plot data set. - More...

    -
    -Inheritance diagram for fplot_core::plot_data_3d:
    -
    -
    - - -fplot_core::scatter_plot_data -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_count pd3d_get_data_count
     Gets the number of data points.
     
    procedure, public get_x pd3d_get_x_data
     Gets the requested X data point.
     
    procedure, public set_x pd3d_set_x_data
     Sets the requested X data point.
     
    procedure, public get_y pd3d_get_y_data
     Gets the requested Y data point.
     
    procedure, public set_y pd3d_set_y_data
     Sets the requested Y data point.
     
    procedure, public get_z pd3d_get_z_data
     Gets the requested Z data point.
     
    procedure, public set_z pd3d_set_z_data
     Sets the requested Z data point.
     
    procedure, public get_axes_string pd3d_get_axes_cmd
     Gets the GNUPLOT command string defining which axes the data is to be plotted against.
     
    procedure, public get_data_string pd3d_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public define_data pd3d_set_data_1
     Defines the data set.
     
    procedure, public get_x_data pd3d_get_x_array
     Gets the stored X data array.
     
    procedure, public get_y_data pd3d_get_y_array
     Gets the stored Y data array.
     
    procedure, public get_z_data pd3d_get_z_array
     Gets the stored Z data array.
     
    procedure, public get_color_data pd3d_get_c_array
     Gets the stored color scaling data array.
     
    procedure, public get_point_size_data pd3d_get_c_array
     Gets the stored point scaling data array.
     
    - Public Member Functions inherited from fplot_core::scatter_plot_data
    procedure, public get_command_string spd_get_cmd
     Gets the GNUPLOT command string to represent this scatter_plot_data object.
     
    procedure, public get_line_width spd_get_line_width
     Gets the width of the line, in pixels.
     
    procedure, public set_line_width spd_set_line_width
     Sets the width of the line, in pixels.
     
    procedure, public get_line_style spd_get_line_style
     Gets the line style.
     
    procedure, public set_line_style spd_set_line_style
     Sets the line style.
     
    procedure, public get_draw_line spd_get_draw_line
     Gets a value determining if a line should be drawn.
     
    procedure, public set_draw_line spd_set_draw_line
     Sets a value determining if a line should be drawn.
     
    procedure, public get_draw_markers spd_get_draw_markers
     Gets a value determining if data point markers should be drawn.
     
    procedure, public set_draw_markers spd_set_draw_markers
     Sets a value determining if data point markers should be drawn.
     
    procedure, public get_marker_style spd_get_marker_style
     Gets the marker style.
     
    procedure, public set_marker_style spd_set_marker_style
     Sets the marker style.
     
    procedure, public get_marker_scaling spd_get_marker_scaling
     Gets the marker scaling.
     
    procedure, public set_marker_scaling spd_set_marker_scaling
     Sets the marker scaling.
     
    procedure, public get_marker_frequency spd_get_marker_frequency
     Gets the marker frequency.
     
    procedure, public set_marker_frequency spd_set_marker_frequency
     Sets the marker frequency.
     
    procedure, public get_simplify_data spd_get_simplify_data
     Gets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.
     
    procedure, public set_simplify_data spd_set_simplify_data
     Sets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.
     
    procedure, public get_simplification_factor spd_get_simplify_factor
     Gets a factor used to establish the simplification tolerance.
     
    procedure, public set_simplification_factor spd_set_simplify_factor
     Sets a factor used to establish the simplification tolerance. The tolerance is established by multplying this factor by the range of the dependent variable data.
     
    procedure, public get_use_data_dependent_colors spd_get_data_dependent_colors
     Gets a value determing if data-dependent colors should be used.
     
    procedure, public set_use_data_dependent_colors spd_set_data_dependent_colors
     Sets a value determing if data dependent colors should be used.
     
    procedure, public get_fill_curve spd_get_filled
     Gets a logical value determining if a filled curve should be drawn.
     
    procedure, public set_fill_curve spd_set_filled
     Sets a logical value determining if a filled curve should be drawn.
     
    procedure, public get_use_variable_size_points spd_get_use_var_point_size
     Gets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.
     
    procedure, public set_use_variable_size_points spd_set_use_var_point_size
     Sets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:,:), allocatable m_data
     An N-by-3 matrix containing the x, y, and z data points.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::scatter_plot_data
    logical m_drawmarkers = .false.
     Draw the markers?
     
    integer(int32) m_markerfrequency = 1
     Marker frequency.
     
    real(real32) m_linewidth = 1.0
     Line width.
     
    integer(int32) m_linestyle = LINE_SOLID
     Line style.
     
    integer(int32) m_markertype = MARKER_X
     Marker type.
     
    real(real32) m_markersize = 1.0
     Marker size multiplier.
     
    logical m_simplifydata = .true.
     True if large data sets should be simplified before sending to GNUPLOT.
     
    real(real64) m_simplifyfactor = 1.0d-3
     A scaling factor used to establish the simplification tolerance. The simplification tolerance is established by multiplying this factor by the range in the dependent variable data.
     
    logical m_datadependentcolors = .false.
     Determines if the data should utilize data-dependent colors.
     
    logical m_filledcurve = .false.
     Fill the curve?
     
    logical m_usevariablesizepoints = .false.
     Use variable size data points?
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    -

    Detailed Description

    -

    Defines a three-dimensional plot data set.

    - -

    Definition at line 4334 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::define_data
    -
    - -

    Defines the data set.

    -
    Syntax
    subroutine define_data(class(plot_data_3d) this, real(real64) x(:), real(real64) y(:), real(real64) z(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - -
    [in,out]thisThe plot_data_2d object.
    [in]xAn N-element array containing the x coordinate data.
    [in]yAn N-element array containing the y coordinate data.
    [in]zAn N-element array containing the z coordinate data.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if x, y, and z are not the same size.
    • -
    -
    -
    -
    - -

    Definition at line 4456 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_axes_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_axes_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string defining which axes the data is to be plotted against.

    -
    Syntax
    character(len = :) function, allocatable :: get_axes_string(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4425 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_color_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_color_data
    -
    - -

    Gets the stored color scaling data array.

    -
    Syntax
    real(real64)(:) function get_color_data(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4496 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_count()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_count
    -
    -virtual
    -
    - -

    Gets the number of data points.

    -
    Syntax
    pure integer(int32) function get_count(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    The number of data points.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4348 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    -
    Syntax
    character(len = :) function, allocatable :: get_data_string(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 4436 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_point_size_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_point_size_data
    -
    - -

    Gets the stored point scaling data array.

    -
    Syntax
    real(real64)(:) function get_point_size_data(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4506 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_x
    -
    -virtual
    -
    - -

    Gets the requested X data point.

    -
    Syntax
    pure real(real64) function get_x(class(plot_data_3d), this, integer(int32) index)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot_data_3d object.
    [in]indexThe index of the data point to retrieve.
    -
    -
    -
    Returns
    The requested data point.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4359 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_x_data
    -
    - -

    Gets the stored X data array.

    -
    Syntax
    real(real64)(:) function get_x_data(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4466 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_y
    -
    -virtual
    -
    - -

    Gets the requested Y data point.

    -
    Syntax
    pure real(real64) function get_y(class(plot_data_3d) this, this, integer(int32) index)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot_data_3d object.
    [in]indexThe index of the data point to retrieve.
    -
    -
    -
    Returns
    The requested data point.
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4381 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_y_data
    -
    - -

    Gets the stored Y data array.

    -
    Syntax
    real(real64)(:) function get_y_data(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4476 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_z()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_z
    -
    - -

    Gets the requested Z data point.

    -
    Syntax
    pure real(real64) function get_z(class(plot_data_3d) this, this, integer(int32) index)
    -
    -
    Parameters
    - - - -
    [in]thisThe plot_data_3d object.
    [in]indexThe index of the data point to retrieve.
    -
    -
    -
    Returns
    The requested data point.
    - -

    Definition at line 4403 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_z_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::get_z_data
    -
    - -

    Gets the stored Z data array.

    -
    Syntax
    real(real64)(:) function get_z_data(class(plot_data_3d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_3d object.
    -
    -
    -
    Returns
    A copy of the stored data array.
    - -

    Definition at line 4486 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_x()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_3d::set_x
    -
    -virtual
    -
    - -

    Sets the requested X data point.

    -
    Syntax
    subroutine set_x(class(plot_data_3d) this, integer(int32) index, real(real64) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_data_3d object.
    [in]indexThe index of the data point to replace.
    [in]xThe data point.
    -
    -
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4370 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_y()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_3d::set_y
    -
    -virtual
    -
    - -

    Sets the requested Y data point.

    -
    Syntax
    subroutine set_y(class(plot_data_3d) this, integer(int32) index, real(real64) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_data_3d object.
    [in]indexThe index of the data point to replace.
    [in]xThe data point.
    -
    -
    - -

    Implements fplot_core::scatter_plot_data.

    - -

    Definition at line 4392 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_z()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_3d::set_z
    -
    - -

    Sets the requested Z data point.

    -
    Syntax
    subroutine set_z(class(plot_data_3d) this, integer(int32) index, real(real64) x)
    -
    -
    Parameters
    - - - - -
    [in,out]thisThe plot_data_3d object.
    [in]indexThe index of the data point to replace.
    [in]xThe data point.
    -
    -
    - -

    Definition at line 4414 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_data

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::plot_data_3d::m_data
    -
    -private
    -
    - -

    An N-by-3 matrix containing the x, y, and z data points.

    - -

    Definition at line 4337 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__3d.js b/docs/html/structfplot__core_1_1plot__data__3d.js deleted file mode 100644 index dd096bb..0000000 --- a/docs/html/structfplot__core_1_1plot__data__3d.js +++ /dev/null @@ -1,19 +0,0 @@ -var structfplot__core_1_1plot__data__3d = -[ - [ "define_data", "structfplot__core_1_1plot__data__3d.html#ade9ee50a99ab15f4cfcc8a0ecd75e69c", null ], - [ "get_axes_string", "structfplot__core_1_1plot__data__3d.html#aafb795e54877133e338807877845ee53", null ], - [ "get_color_data", "structfplot__core_1_1plot__data__3d.html#a85627d579d5879fcbe35d3129e9035c3", null ], - [ "get_count", "structfplot__core_1_1plot__data__3d.html#a98903845197a0e6985f61e24f62b970e", null ], - [ "get_data_string", "structfplot__core_1_1plot__data__3d.html#a55720af848b61039e8de8a7357800221", null ], - [ "get_point_size_data", "structfplot__core_1_1plot__data__3d.html#ae49068baed9bb95fed74268ea24ac3ac", null ], - [ "get_x", "structfplot__core_1_1plot__data__3d.html#a73ca5dfd8f294a9c6b5f84767bebaad2", null ], - [ "get_x_data", "structfplot__core_1_1plot__data__3d.html#a13c7c8e4c4ecb9fb80aee24b75a5cff3", null ], - [ "get_y", "structfplot__core_1_1plot__data__3d.html#a487acf51a34ff00fe81c8b9156fafc5a", null ], - [ "get_y_data", "structfplot__core_1_1plot__data__3d.html#a88c4206070248fb431e0456945669bae", null ], - [ "get_z", "structfplot__core_1_1plot__data__3d.html#a6513639ef9e865478e7fcfd556aa1111", null ], - [ "get_z_data", "structfplot__core_1_1plot__data__3d.html#aa9b1507e1841fda61fc9be8a5a0a7013", null ], - [ "set_x", "structfplot__core_1_1plot__data__3d.html#a1013a895c610e3f412701624c60c18a4", null ], - [ "set_y", "structfplot__core_1_1plot__data__3d.html#abcaab55223d65976eb07ab58908ccd66", null ], - [ "set_z", "structfplot__core_1_1plot__data__3d.html#a5adf3d8c20b3b839a76175ca986fcff4", null ], - [ "m_data", "structfplot__core_1_1plot__data__3d.html#a05d33e3351193d2e471083589d3ccb60", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data__3d.png b/docs/html/structfplot__core_1_1plot__data__3d.png deleted file mode 100644 index 5f82a7cd5a1f47e0debd2820505704c0c1ffd246..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1532 zcmeAS@N?(olHy`uVBq!ia0vp^8-Vx+2Q!eYPMVVoq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#LXFJzX3_Dj46+eLHE377yF( z_Enni{&$`4>0+weJ=ykj^u{++8(D65yopch*{I$z=?cG|j_0%;8&o2TbYu?QiTb7T zl8=35@bS3)DqCf^#4DE_niTRez@mmr=9m#b&;IGFo|o;bXvBAw*Cn>=S~gz(>H9JOKl;zjbF$Lu|+uySeTg1zZy-(3%D>-_M1hoViJzOLu3qpJ={dp}Dttu6PAi9ftr z^`rgThrfdLzdgIExABP2^T1bk?Av;Q>Ym;L2S<32YUa`8hYwF%-8ZYBq~)po?;@A? zCHaHEP!JNIrs93?km0c#f(&YV7^)VTKfJ!$`0>4#`}=Ao%hliPW@*qR;C-aPDX>FN z7@IiSC;Wcqc5%`Y?l(*0<`vafNX=~RKB3ogc=>@uozDk8RIjYcdwyDdg_NC7?yu7a z)1Fyw*mvB-HTq#-mDT5^67%#ei#qN6Vq4#z+f(1~`_L@&t6KAtY0tJ*pPzNN{Mw1O z54-&AMgGZ{w;cblwA6El$1kr|^SC!Bvu?!*wTrHs?SK74mZ!v;hrbNBY2T??$-dj= zXKa3sK`A(d)_#s%Boh<*iS~!IQ4t@!xB;dC8|YyMYPjdLbPW z%#=flXVxzDpCtGBoZXy+_jc^x^;^0(qK8sKFpt0fik_eB951P8_z59-2$*3LZ`g0_NjjualE(9~zYFKi)2%tN%6Q)OWjrirumg7kw^o zwU-TkF8lDI;o*p9jSs&EeZ6yTx_^La&5T=LrZ;zgk(e6fWy&rpw{*F2{36E@5>NYiz z*6&}XuMAKBw_IyZkXJpwxSyt~cZ|i-DLR$h?E+5jf7n+l|2&~3sHz1lrx`q5{an^L HB{Ts5Bpl!b diff --git a/docs/html/structfplot__core_1_1plot__data__bar-members.html b/docs/html/structfplot__core_1_1plot__data__bar-members.html deleted file mode 100644 index 4c42353..0000000 --- a/docs/html/structfplot__core_1_1plot__data__bar-members.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_data_bar Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_bar, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    define_datapdb_set_data_1 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    define_datapdb_set_data_2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    define_datapdb_set_data_3 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    getpdb_get_data (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_axes_stringpdb_get_axes_cmd (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_bar_per_label_countpdb_get_col_count (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_color_indexpdc_get_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    get_command_stringpdb_get_cmdfplot_core::plot_data_barvirtual
    get_countpdb_get_count (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_datapdb_get_data_set (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_data_stringpdb_get_data_cmdfplot_core::plot_data_barvirtual
    get_draw_against_y2pdb_get_use_y2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_is_filledpdb_get_is_filled (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_labelpdb_get_label (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_line_colorpdc_get_line_colorfplot_core::plot_data_colored
    get_namepd_get_namefplot_core::plot_data
    get_transparencypdb_get_alpha (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_use_labelspdb_get_use_labels (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    m_alphafplot_core::plot_data_bar
    m_axislabelsfplot_core::plot_data_barprivate
    m_bardatafplot_core::plot_data_bar
    m_colorfplot_core::plot_data_coloredprivate
    m_colorindexfplot_core::plot_data_colored
    m_filledfplot_core::plot_data_bar
    m_namefplot_core::plot_dataprivate
    m_useautocolorfplot_core::plot_data_colored
    m_useaxislabelsfplot_core::plot_data_bar
    m_usey2fplot_core::plot_data_bar
    pdb_set_data_1pdb_set_data_1 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    pdb_set_data_2pdb_set_data_2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    pdb_set_data_3pdb_set_data_3 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    setpdb_set_data (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_color_indexpdc_set_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    set_data_1pdb_set_data_1_core (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_data_2pdb_set_data_2_core (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_data_3pdb_set_data_3_core (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_draw_against_y2pdb_set_use_y2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_is_filledpdb_set_is_filled (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_labelpdb_set_label (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_line_colorpdc_set_line_colorfplot_core::plot_data_colored
    set_namepd_set_namefplot_core::plot_data
    set_transparencypdb_set_alpha (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_use_labelspdb_set_use_labels (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__bar.html b/docs/html/structfplot__core_1_1plot__data__bar.html deleted file mode 100644 index 9e4d08f..0000000 --- a/docs/html/structfplot__core_1_1plot__data__bar.html +++ /dev/null @@ -1,814 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data_bar Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data_bar Type Reference
    -
    -
    - -

    Defines a data set tailored to bar charts. - More...

    -
    -Inheritance diagram for fplot_core::plot_data_bar:
    -
    -
    - - -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object -fplot_core::plot_data_histogram - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_count pdb_get_count
     
    procedure, public get pdb_get_data
     
    procedure, public set pdb_set_data
     
    procedure, public get_data pdb_get_data_set
     
    procedure, public get_label pdb_get_label
     
    procedure, public set_label pdb_set_label
     
    procedure, public get_use_labels pdb_get_use_labels
     
    procedure, public set_use_labels pdb_set_use_labels
     
    procedure, public get_command_string pdb_get_cmd
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    procedure, public get_data_string pdb_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public get_axes_string pdb_get_axes_cmd
     
    procedure, public get_bar_per_label_count pdb_get_col_count
     
    procedure, public get_draw_against_y2 pdb_get_use_y2
     
    procedure, public set_draw_against_y2 pdb_set_use_y2
     
    procedure, public get_is_filled pdb_get_is_filled
     
    procedure, public set_is_filled pdb_set_is_filled
     
    procedure, public get_transparency pdb_get_alpha
     
    procedure, public set_transparency pdb_set_alpha
     
    generic, public define_data pdb_set_data_1
     
    generic, public define_data pdb_set_data_2
     
    generic, public define_data pdb_set_data_3
     
    procedure pdb_set_data_1 pdb_set_data_1
     
    procedure pdb_set_data_2 pdb_set_data_2
     
    procedure pdb_set_data_3 pdb_set_data_3
     
    procedure set_data_1 pdb_set_data_1_core
     
    procedure set_data_2 pdb_set_data_2_core
     
    procedure set_data_3 pdb_set_data_3_core
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    real(real64), dimension(:,:), allocatable m_bardata
     An array of data defining each bar - the matrix contains multiple columns to allow multiple bars per label.
     
    logical m_useaxislabels = .true.
     Determines if the axis labels should be used - only applicable if there is existing data stored in m_axisLabels & m_axisLabels is the same size as m_barData.
     
    logical m_usey2 = .false.
     Draw against the secondary y axis?
     
    logical m_filled = .true.
     Determines if each bar is filled.
     
    real(real32) m_alpha = 1.0
     The alpha value (transparency) for each bar.
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - -

    -Private Attributes

    type(string), dimension(:), allocatable m_axislabels
     An array containing axis labels to associate with each bar.
     
    -

    Detailed Description

    -

    Defines a data set tailored to bar charts.

    - -

    Definition at line 6459 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data() [1/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_bar::define_data
    -
    - -

    Definition at line 6495 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_data() [2/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_bar::define_data
    -
    - -

    Definition at line 6495 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_data() [3/3]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_bar::define_data
    -
    - -

    Definition at line 6495 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get
    -
    - -

    Definition at line 6478 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_axes_string()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_axes_string
    -
    - -

    Definition at line 6487 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_bar_per_label_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_bar_per_label_count
    -
    - -

    Definition at line 6488 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to define the plot object properties.

    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 6485 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_count
    -
    - -

    Definition at line 6477 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_data
    -
    - -

    Definition at line 6480 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 6486 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_against_y2()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_draw_against_y2
    -
    - -

    Definition at line 6489 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_is_filled()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_is_filled
    -
    - -

    Definition at line 6491 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_label
    -
    - -

    Definition at line 6481 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_transparency()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_transparency
    -
    - -

    Definition at line 6493 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_labels()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::get_use_labels
    -
    - -

    Definition at line 6483 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pdb_set_data_1()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_bar::pdb_set_data_1
    -
    - -

    Definition at line 6497 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pdb_set_data_2()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_bar::pdb_set_data_2
    -
    - -

    Definition at line 6498 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pdb_set_data_3()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_bar::pdb_set_data_3
    -
    - -

    Definition at line 6499 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::set
    -
    - -

    Definition at line 6479 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_data_1()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_bar::set_data_1
    -
    - -

    Definition at line 6500 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_data_2()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_bar::set_data_2
    -
    - -

    Definition at line 6501 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_data_3()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_bar::set_data_3
    -
    - -

    Definition at line 6502 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_against_y2()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::set_draw_against_y2
    -
    - -

    Definition at line 6490 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_is_filled()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::set_is_filled
    -
    - -

    Definition at line 6492 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_label()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::set_label
    -
    - -

    Definition at line 6482 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_transparency()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::set_transparency
    -
    - -

    Definition at line 6494 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_labels()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_bar::set_use_labels
    -
    - -

    Definition at line 6484 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_alpha

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_data_bar::m_alpha = 1.0
    -
    - -

    The alpha value (transparency) for each bar.

    - -

    Definition at line 6475 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_axislabels

    - -
    -
    - - - - - -
    - - - - -
    type(string), dimension(:), allocatable fplot_core::plot_data_bar::m_axislabels
    -
    -private
    -
    - -

    An array containing axis labels to associate with each bar.

    - -

    Definition at line 6462 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_bardata

    - -
    -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::plot_data_bar::m_bardata
    -
    - -

    An array of data defining each bar - the matrix contains multiple columns to allow multiple bars per label.

    - -

    Definition at line 6465 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_filled

    - -
    -
    - - - - -
    logical fplot_core::plot_data_bar::m_filled = .true.
    -
    - -

    Determines if each bar is filled.

    - -

    Definition at line 6473 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_useaxislabels

    - -
    -
    - - - - -
    logical fplot_core::plot_data_bar::m_useaxislabels = .true.
    -
    - -

    Determines if the axis labels should be used - only applicable if there is existing data stored in m_axisLabels & m_axisLabels is the same size as m_barData.

    - -

    Definition at line 6469 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_usey2

    - -
    -
    - - - - -
    logical fplot_core::plot_data_bar::m_usey2 = .false.
    -
    - -

    Draw against the secondary y axis?

    - -

    Definition at line 6471 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__bar.js b/docs/html/structfplot__core_1_1plot__data__bar.js deleted file mode 100644 index e61ba30..0000000 --- a/docs/html/structfplot__core_1_1plot__data__bar.js +++ /dev/null @@ -1,11 +0,0 @@ -var structfplot__core_1_1plot__data__bar = -[ - [ "get_command_string", "structfplot__core_1_1plot__data__bar.html#a9711b599bf9cb178ed7c45ec1588aa46", null ], - [ "get_data_string", "structfplot__core_1_1plot__data__bar.html#aa5fa7de9642e1f9e520b4a43cd6f7ae7", null ], - [ "m_alpha", "structfplot__core_1_1plot__data__bar.html#ada9be13d82f4a51e832327bd586c8532", null ], - [ "m_axislabels", "structfplot__core_1_1plot__data__bar.html#ad6ae990580ab689aebe3e4114d650f5f", null ], - [ "m_bardata", "structfplot__core_1_1plot__data__bar.html#ae3afc4495088f5ec9a7f0414470d97b0", null ], - [ "m_filled", "structfplot__core_1_1plot__data__bar.html#ab390e7a9d6d8a0ca0ee2e42397e8da36", null ], - [ "m_useaxislabels", "structfplot__core_1_1plot__data__bar.html#a5651040ed1984f555b236f97e513c52d", null ], - [ "m_usey2", "structfplot__core_1_1plot__data__bar.html#a51124b26f051de4150eee0b120942da5", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data__bar.png b/docs/html/structfplot__core_1_1plot__data__bar.png deleted file mode 100644 index 61529c82015351709248fb9b0f760526df5ff07c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcma)+c~H`67{@U)?Qq@NHceBv!e+2iTgN-3S}(lA)I7q>%rVnd0Wps3Fw4qiLe2HU zGR?Y=Yb^Ssad{PRAa_xn7#!GYd} z8%#HVKp;c7j|W2Q8QQ&QpsTf4E+>>|omsH|F;9&~qdk5UD=?&|HO_XBRFk6qj}sFU z+IxqAuqthCJsJ@h0@B8-%V|w17X;F4hkG18mZ>8tpLx|}y~)ei$lhG4xq+<>-7Mq& zwA9#vj^2GW+s5uyN0&)l&9_!mKmG}_I1LMLoXW-aGIo0O7I zb4H=vCaSd)cs|IrIu012#VCInofVDt0%GaZrYE+kSP-6X{=@>S-@qQ#(U$s^u;d?5 z>i&juuA1d6gahYZjPX0;MmpP+x}AV9!e27IU=V3I`(T?|c^90V9y{)>nQ|Cy6et}% zZC{pDnAlg6k77<7N(+;FOr!Vz~l2 z*grc%BpyGVZ~^mT-vLgNEk0AKiSS;o5WRs2qd#ZHE8h#hGOqHU3G#PrKF6i%XAj?q~Dw*F?8QdNX_oRnvJ0T@0Llqt2KKXT<>wTolcZT!EQ(JJcVo}Jl$K(Y%E zqAl1Uh!vg>tu7Gr(v0LiThhzOxSG!i!C<|jgGZ}dPJ z!uNZX%6$n|KYhoL(+Ww?9Sfp8l?yNlthxe3hIw1j>u{25Re|q~=H&hONUz%KH+Uhw z)DQQiB#s_%fRN~Ljm9^dW(&iH{g38Bs=4puR(P>R+UJz)kf@d#dSc4v%OXxuhLIvZ zEGLiF?a~y9@=e4@H1({xiX<79$RlR%Y~|3L5S$mwMq<1#M15klnlzvQ(KscwIATCt zBZH=Z%3sk{lA(G6TZ&br2=N&JYTbnKe<|v7y#<`QHJ8L+F`o~igfydAQK?ykA33n0 z@UgwH>Hgdd`4L-8sb20SbUIGQhAcCCNRSt6*_v@Fx^($Ag8|clU_Iao?&r=?E zpv$trp=3v1DbS;(DW5z}HjNH~QrdA;uyD9y47d^y)$WJz{&Il5hp9c+S5 - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_data_colored Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_colored, including all inherited members.

    - - - - - - - - - - - - - -
    get_color_indexpdc_get_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    get_command_stringget_string_resultfplot_core::plot_objectpure virtual
    get_data_stringpd_get_string_resultfplot_core::plot_datapure virtual
    get_line_colorpdc_get_line_colorfplot_core::plot_data_colored
    get_namepd_get_namefplot_core::plot_data
    m_colorfplot_core::plot_data_coloredprivate
    m_colorindexfplot_core::plot_data_colored
    m_namefplot_core::plot_dataprivate
    m_useautocolorfplot_core::plot_data_colored
    set_color_indexpdc_set_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    set_line_colorpdc_set_line_colorfplot_core::plot_data_colored
    set_namepd_set_namefplot_core::plot_data
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__colored.html b/docs/html/structfplot__core_1_1plot__data__colored.html deleted file mode 100644 index 93fd0de..0000000 --- a/docs/html/structfplot__core_1_1plot__data__colored.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data_colored Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data_colored Type Reference
    -
    -
    - -

    Defines a plot_data based object best represented by a color. - More...

    -
    -Inheritance diagram for fplot_core::plot_data_colored:
    -
    -
    - - -fplot_core::plot_data -fplot_core::plot_object -fplot_core::filled_plot_data -fplot_core::plot_data_bar -fplot_core::plot_data_error_bars -fplot_core::plot_data_tri_2d -fplot_core::scatter_plot_data -fplot_core::vector_field_plot_data -fplot_core::plot_data_histogram -fplot_core::plot_data_2d -fplot_core::plot_data_3d - -
    - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    procedure(pd_get_string_result), deferred, public get_data_string pd_get_string_result
     Gets the GNUPLOT command string containing the actual data to plot.
     
    - Public Member Functions inherited from fplot_core::plot_object
    procedure(get_string_result), deferred, public get_command_string get_string_result
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    - - - - - - - -

    -Public Attributes

    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - - -

    -Private Member Functions

    procedure, private get_color_index pdc_get_color_index
     
    procedure, private set_color_index pdc_set_color_index
     
    - - - - -

    -Private Attributes

    type(colorm_color = CLR_BLUE
     The line color.
     
    -

    Detailed Description

    -

    Defines a plot_data based object best represented by a color.

    - -

    Definition at line 1723 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_index()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_data_colored::get_color_index
    -
    -private
    -
    - -

    Definition at line 1752 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_line_color()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_colored::get_line_color
    -
    - -

    Gets the line color.

    -
    Syntax
    pure type(color) function get_line_color(class(plot_data_colored) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_colored instance.
    -
    -
    -
    Returns
    The color.
    - -

    Definition at line 1741 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_color_index()

    - -
    -
    - - - - - -
    - - - - -
    procedure, private fplot_core::plot_data_colored::set_color_index
    -
    -private
    -
    - -

    Definition at line 1753 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_line_color()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_colored::set_line_color
    -
    - -

    Sets the line color.

    -
    Syntax
    subroutine set_line_color(class(plot_data_colored) this, type(color) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_data_colored instance.
    [in]xThe color.
    -
    -
    - -

    Definition at line 1751 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_color

    - -
    -
    - - - - - -
    - - - - -
    type(color) fplot_core::plot_data_colored::m_color = CLR_BLUE
    -
    -private
    -
    - -

    The line color.

    - -

    Definition at line 1726 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_colorindex

    - -
    -
    - - - - -
    integer(int32) fplot_core::plot_data_colored::m_colorindex = 1
    -
    - -

    The color index to use, assuming we're using auto color.

    - -

    Definition at line 1730 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_useautocolor

    - -
    -
    - - - - -
    logical fplot_core::plot_data_colored::m_useautocolor = .true.
    -
    - -

    Let the object choose colors automatically.

    - -

    Definition at line 1728 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__colored.js b/docs/html/structfplot__core_1_1plot__data__colored.js deleted file mode 100644 index 40f4306..0000000 --- a/docs/html/structfplot__core_1_1plot__data__colored.js +++ /dev/null @@ -1,8 +0,0 @@ -var structfplot__core_1_1plot__data__colored = -[ - [ "get_line_color", "structfplot__core_1_1plot__data__colored.html#aafd241043c19b55b90412b77766da1bd", null ], - [ "set_line_color", "structfplot__core_1_1plot__data__colored.html#ac266099a66e8f024d142e14a8c5077c2", null ], - [ "m_color", "structfplot__core_1_1plot__data__colored.html#aa24c061813c26938c9001c049f6aa40f", null ], - [ "m_colorindex", "structfplot__core_1_1plot__data__colored.html#a65e7ab13ce7635e4367dca109b168f76", null ], - [ "m_useautocolor", "structfplot__core_1_1plot__data__colored.html#af7888aadd5a7fa64a6af7875e35eb4b0", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data__colored.png b/docs/html/structfplot__core_1_1plot__data__colored.png deleted file mode 100644 index ff92654cd942be86daba0e73ac62e3e1c47771bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4380 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 diff --git a/docs/html/structfplot__core_1_1plot__data__error__bars-members.html b/docs/html/structfplot__core_1_1plot__data__error__bars-members.html deleted file mode 100644 index 68aec80..0000000 --- a/docs/html/structfplot__core_1_1plot__data__error__bars-members.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_data_error_bars Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_error_bars, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    define_x_error_datapde_define_x_errfplot_core::plot_data_error_bars
    define_x_error_datapde_define_x_err_limfplot_core::plot_data_error_bars
    define_xy_error_datapde_define_xy_errfplot_core::plot_data_error_bars
    define_xy_error_datapde_define_xy_err_limfplot_core::plot_data_error_bars
    define_y_error_datapde_define_y_errfplot_core::plot_data_error_bars
    define_y_error_datapde_define_y_err_limfplot_core::plot_data_error_bars
    get_color_indexpdc_get_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    get_command_stringpde_get_cmdfplot_core::plot_data_error_barsvirtual
    get_countpde_get_countfplot_core::plot_data_error_bars
    get_data_stringpde_get_data_cmdfplot_core::plot_data_error_barsvirtual
    get_line_colorpdc_get_line_colorfplot_core::plot_data_colored
    get_namepd_get_namefplot_core::plot_data
    get_plot_x_error_barspde_get_plot_x_errfplot_core::plot_data_error_bars
    get_plot_y_error_barspde_get_plot_y_errfplot_core::plot_data_error_bars
    get_use_error_boxpde_get_boxfplot_core::plot_data_error_bars
    get_use_rangepde_get_use_rangefplot_core::plot_data_error_bars
    m_boxfplot_core::plot_data_error_bars
    m_colorfplot_core::plot_data_coloredprivate
    m_colorindexfplot_core::plot_data_colored
    m_datafplot_core::plot_data_error_bars
    m_namefplot_core::plot_dataprivate
    m_rangefplot_core::plot_data_error_bars
    m_useautocolorfplot_core::plot_data_colored
    m_xbarsfplot_core::plot_data_error_bars
    m_ybarsfplot_core::plot_data_error_bars
    pde_define_x_errpde_define_x_err (defined in fplot_core::plot_data_error_bars)fplot_core::plot_data_error_bars
    pde_define_x_err_limpde_define_x_err_lim (defined in fplot_core::plot_data_error_bars)fplot_core::plot_data_error_bars
    pde_define_xy_errpde_define_xy_err (defined in fplot_core::plot_data_error_bars)fplot_core::plot_data_error_bars
    pde_define_xy_err_limpde_define_xy_err_lim (defined in fplot_core::plot_data_error_bars)fplot_core::plot_data_error_bars
    pde_define_y_errpde_define_y_err (defined in fplot_core::plot_data_error_bars)fplot_core::plot_data_error_bars
    pde_define_y_err_limpde_define_y_err_lim (defined in fplot_core::plot_data_error_bars)fplot_core::plot_data_error_bars
    set_color_indexpdc_set_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    set_line_colorpdc_set_line_colorfplot_core::plot_data_colored
    set_namepd_set_namefplot_core::plot_data
    set_use_error_boxpde_set_boxfplot_core::plot_data_error_bars
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__error__bars.html b/docs/html/structfplot__core_1_1plot__data__error__bars.html deleted file mode 100644 index f2738c1..0000000 --- a/docs/html/structfplot__core_1_1plot__data__error__bars.html +++ /dev/null @@ -1,870 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data_error_bars Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data_error_bars Type Reference
    -
    -
    - -

    Defines a 2D error bar based data set. - More...

    -
    -Inheritance diagram for fplot_core::plot_data_error_bars:
    -
    -
    - - -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_command_string pde_get_cmd
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    procedure, public get_data_string pde_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    generic, public define_x_error_data pde_define_x_err
     Defines the x error data.
     
    generic, public define_x_error_data pde_define_x_err_lim
     Defines the x error data.
     
    generic, public define_y_error_data pde_define_y_err
     Defines the y error data.
     
    generic, public define_y_error_data pde_define_y_err_lim
     Defines the y error data.
     
    generic, public define_xy_error_data pde_define_xy_err
     Defines the x and y error data.
     
    generic, public define_xy_error_data pde_define_xy_err_lim
     Defines the x and y error data.
     
    procedure, public get_plot_x_error_bars pde_get_plot_x_err
     Tests to see if the x error bar data has been defined, and as a result, if the x error data is to be plotted.
     
    procedure, public get_plot_y_error_bars pde_get_plot_y_err
     Tests to see if the y error bar data has been defined, and as a result, if the y error data is to be plotted.
     
    procedure, public get_count pde_get_count
     Gets the number of stored data points.
     
    procedure, public get_use_error_box pde_get_box
     Tests to see if the x and y error boxes should be utilized.
     
    procedure, public set_use_error_box pde_set_box
     Deterimines if the x and y error boxes should be utilized.
     
    procedure, public get_use_range pde_get_use_range
     Gets a value determining if a defined range is being used to define the error bar extremes.
     
    procedure pde_define_x_err pde_define_x_err
     
    procedure pde_define_y_err pde_define_y_err
     
    procedure pde_define_xy_err pde_define_xy_err
     
    procedure pde_define_x_err_lim pde_define_x_err_lim
     
    procedure pde_define_y_err_lim pde_define_y_err_lim
     
    procedure pde_define_xy_err_lim pde_define_xy_err_lim
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    logical m_xbars = .false.
     Display x error bars?
     
    logical m_ybars = .false.
     Display y error bars?
     
    real(real64), dimension(:,:), allocatable m_data
     A matrix containing the raw and error data. Column 1 is for the x coordinate, column 2 for the y coordinate, and the remaining columns are for the error data (x, then y if applicable)
     
    logical m_box = .false.
     Display an error box for the case where x and y errors are defined.
     
    logical m_range = .false.
     Plot error bars using a defined range vs. a +/- value.
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    -

    Detailed Description

    -

    Defines a 2D error bar based data set.

    - -

    Definition at line 6174 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_x_error_data() [1/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_error_bars::define_x_error_data
    -
    - -

    Defines the x error data.

    -
    Syntax
    subroutine define_x_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xerr(:), optional class(errors) err)
    -
    -
    Alternative Syntax
    subroutine define_x_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xmin(:), real(real64) xmax(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - - -
    [in,out]thisThe plot_data_error_bars object.
    [in]xAn N-element array containing the x coordinates of the data.
    [in]yAn N-element array containing the y coordinates of the data.
    [in]xerrAn N-element array containing the x errors at each data point.
    [in]xmin= An N-element array containing the minimum x values at each data point.
    [in]xmax= An N-element array containing the maximum x values at each data point.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not the same size.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    -
    -
    -
    - -

    Definition at line 6221 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_x_error_data() [2/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_error_bars::define_x_error_data
    -
    - -

    Defines the x error data.

    -
    Syntax
    subroutine define_x_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xerr(:), optional class(errors) err)
    -
    -
    Alternative Syntax
    subroutine define_x_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xmin(:), real(real64) xmax(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - - -
    [in,out]thisThe plot_data_error_bars object.
    [in]xAn N-element array containing the x coordinates of the data.
    [in]yAn N-element array containing the y coordinates of the data.
    [in]xerrAn N-element array containing the x errors at each data point.
    [in]xmin= An N-element array containing the minimum x values at each data point.
    [in]xmax= An N-element array containing the maximum x values at each data point.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not the same size.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    -
    -
    -
    - -

    Definition at line 6221 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_xy_error_data() [1/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_error_bars::define_xy_error_data
    -
    - -

    Defines the x and y error data.

    -
    Syntax
    subroutine define_xy_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xerr(:), real(real64) yerr(:), optional class(errors) err)
    -
    -
    Alternative Syntax
    subroutine define_xy_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xmin(:), real(real64) xmax(:), real(real64) ymin(:), real(real64) ymax(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - - - - - -
    [in,out]thisThe plot_data_error_bars object.
    [in]xAn N-element array containing the x coordinates of the data.
    [in]yAn N-element array containing the y coordinates of the data.
    [in]xerrAn N-element array containing the x errors at each data point.
    [in]yerrAn N-element array containing the y errors at each data point.
    [in]xmin= An N-element array containing the minimum x values at each data point.
    [in]xmax= An N-element array containing the maximum x values at each data point.
    [in]ymin= An N-element array containing the minimum y values at each data point.
    [in]ymax= An N-element array containing the maximum y values at each data point.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not the same size.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    -
    -
    -
    - -

    Definition at line 6293 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_xy_error_data() [2/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_error_bars::define_xy_error_data
    -
    - -

    Defines the x and y error data.

    -
    Syntax
    subroutine define_xy_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xerr(:), real(real64) yerr(:), optional class(errors) err)
    -
    -
    Alternative Syntax
    subroutine define_xy_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) xmin(:), real(real64) xmax(:), real(real64) ymin(:), real(real64) ymax(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - - - - - -
    [in,out]thisThe plot_data_error_bars object.
    [in]xAn N-element array containing the x coordinates of the data.
    [in]yAn N-element array containing the y coordinates of the data.
    [in]xerrAn N-element array containing the x errors at each data point.
    [in]yerrAn N-element array containing the y errors at each data point.
    [in]xmin= An N-element array containing the minimum x values at each data point.
    [in]xmax= An N-element array containing the maximum x values at each data point.
    [in]ymin= An N-element array containing the minimum y values at each data point.
    [in]ymax= An N-element array containing the maximum y values at each data point.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not the same size.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    -
    -
    -
    - -

    Definition at line 6293 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_y_error_data() [1/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_error_bars::define_y_error_data
    -
    - -

    Defines the y error data.

    -
    Syntax
    subroutine define_y_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) yerr(:), optional class(errors) err)
    -
    -
    Alternative Syntax
    subroutine define_y_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) ymin(:), real(real64) ymax(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - - -
    [in,out]thisThe plot_data_error_bars object.
    [in]xAn N-element array containing the x coordinates of the data.
    [in]yAn N-element array containing the y coordinates of the data.
    [in]yerrAn N-element array containing the y errors at each data point.
    [in]ymin= An N-element array containing the minimum y values at each data point.
    [in]ymax= An N-element array containing the maximum y values at each data point.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not the same size.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    -
    -
    -
    - -

    Definition at line 6254 of file fplot_core.f90.

    - -
    -
    - -

    ◆ define_y_error_data() [2/2]

    - -
    -
    - - - - -
    generic, public fplot_core::plot_data_error_bars::define_y_error_data
    -
    - -

    Defines the y error data.

    -
    Syntax
    subroutine define_y_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) yerr(:), optional class(errors) err)
    -
    -
    Alternative Syntax
    subroutine define_y_error_data(class(plot_data_error_bars) this, real(real64) x(:), real(real64) y(:), real(real64) ymin(:), real(real64) ymax(:), optional class(errors) err)
    -
    -
    Parameters
    - - - - - - - - -
    [in,out]thisThe plot_data_error_bars object.
    [in]xAn N-element array containing the x coordinates of the data.
    [in]yAn N-element array containing the y coordinates of the data.
    [in]yerrAn N-element array containing the y errors at each data point.
    [in]ymin= An N-element array containing the minimum y values at each data point.
    [in]ymax= An N-element array containing the maximum y values at each data point.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input arrays are not the same size.
    • -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if there is insufficient memory available.
    • -
    -
    -
    -
    - -

    Definition at line 6254 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to define the plot object properties.

    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 6188 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::get_count
    -
    - -

    Gets the number of stored data points.

    -
    Parameters
    - - -
    [in]thisThe plot_data_error_bars object.
    -
    -
    -
    Returns
    The number of data points.
    - -

    Definition at line 6323 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 6189 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_plot_x_error_bars()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::get_plot_x_error_bars
    -
    - -

    Tests to see if the x error bar data has been defined, and as a result, if the x error data is to be plotted.

    -
    Syntax
    pure logical function get_plot_x_error_bars(class(plot_data_error_bars) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_error_bars object.
    -
    -
    -
    Returns
    Returns true if the x error bars are to be plotted; else, false.
    - -

    Definition at line 6306 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_plot_y_error_bars()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::get_plot_y_error_bars
    -
    - -

    Tests to see if the y error bar data has been defined, and as a result, if the y error data is to be plotted.

    -
    Syntax
    pure logical function get_plot_y_error_bars(class(plot_data_error_bars) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_error_bars object.
    -
    -
    -
    Returns
    Returns true if the y error bars are to be plotted; else, false.
    - -

    Definition at line 6318 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_error_box()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::get_use_error_box
    -
    - -

    Tests to see if the x and y error boxes should be utilized.

    -
    Syntax
    pure logical function get_use_error_box(class(plot_data_error_bars) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_error_bars object.
    -
    -
    -
    Returns
    Returns true if the error boxes are to be plotted; else, false.
    -
    Remarks
    Notice, the error boxes are only utilized if there is both x and y error data defined, regardless of the value of this property.
    - -

    Definition at line 6338 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_range()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::get_use_range
    -
    - -

    Gets a value determining if a defined range is being used to define the error bar extremes.

    -
    Syntax
    pure logical function get_use_range(class(plot_data_error_bars) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_error_bars object.
    -
    -
    -
    Returns
    True if a defined range is being used; else, false.
    - -

    Definition at line 6364 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pde_define_x_err()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_error_bars::pde_define_x_err
    -
    - -

    Definition at line 6366 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pde_define_x_err_lim()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_error_bars::pde_define_x_err_lim
    -
    - -

    Definition at line 6369 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pde_define_xy_err()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_error_bars::pde_define_xy_err
    -
    - -

    Definition at line 6368 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pde_define_xy_err_lim()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_error_bars::pde_define_xy_err_lim
    -
    - -

    Definition at line 6371 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pde_define_y_err()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_error_bars::pde_define_y_err
    -
    - -

    Definition at line 6367 of file fplot_core.f90.

    - -
    -
    - -

    ◆ pde_define_y_err_lim()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_error_bars::pde_define_y_err_lim
    -
    - -

    Definition at line 6370 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_error_box()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_error_bars::set_use_error_box
    -
    - -

    Deterimines if the x and y error boxes should be utilized.

    -
    Syntax
    subroutine set_use_error_box(class(plot_data_error_bars) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_data_error_bars object.
    [in]xSet to true if the error boxes are to be plotted; else, false.
    -
    -
    -
    Remarks
    Notice, the error boxes are only utilized if there is both x and y error data defined, regardless of the value of this property.
    - -

    Definition at line 6353 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_box

    - -
    -
    - - - - -
    logical fplot_core::plot_data_error_bars::m_box = .false.
    -
    - -

    Display an error box for the case where x and y errors are defined.

    - -

    Definition at line 6184 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_data

    - -
    -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::plot_data_error_bars::m_data
    -
    - -

    A matrix containing the raw and error data. Column 1 is for the x coordinate, column 2 for the y coordinate, and the remaining columns are for the error data (x, then y if applicable)

    - -

    Definition at line 6182 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_range

    - -
    -
    - - - - -
    logical fplot_core::plot_data_error_bars::m_range = .false.
    -
    - -

    Plot error bars using a defined range vs. a +/- value.

    - -

    Definition at line 6186 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_xbars

    - -
    -
    - - - - -
    logical fplot_core::plot_data_error_bars::m_xbars = .false.
    -
    - -

    Display x error bars?

    - -

    Definition at line 6176 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_ybars

    - -
    -
    - - - - -
    logical fplot_core::plot_data_error_bars::m_ybars = .false.
    -
    - -

    Display y error bars?

    - -

    Definition at line 6178 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__error__bars.js b/docs/html/structfplot__core_1_1plot__data__error__bars.js deleted file mode 100644 index e36be73..0000000 --- a/docs/html/structfplot__core_1_1plot__data__error__bars.js +++ /dev/null @@ -1,22 +0,0 @@ -var structfplot__core_1_1plot__data__error__bars = -[ - [ "define_x_error_data", "structfplot__core_1_1plot__data__error__bars.html#a897524f1b8098654b9963e1d62b69910", null ], - [ "define_x_error_data", "structfplot__core_1_1plot__data__error__bars.html#a43b64e7f217392ce49969bbed71a940d", null ], - [ "define_xy_error_data", "structfplot__core_1_1plot__data__error__bars.html#a49891b23e0387645cbea89ad2405c1c9", null ], - [ "define_xy_error_data", "structfplot__core_1_1plot__data__error__bars.html#ac0fb40f8ce85f194948a10d91b887d58", null ], - [ "define_y_error_data", "structfplot__core_1_1plot__data__error__bars.html#a8312de543a61854de5f12c25329f0e49", null ], - [ "define_y_error_data", "structfplot__core_1_1plot__data__error__bars.html#a8549600a4cd1d3a124292939252f08ba", null ], - [ "get_command_string", "structfplot__core_1_1plot__data__error__bars.html#ab80a5fe8b5abe4ed9b18594ad11b4e43", null ], - [ "get_count", "structfplot__core_1_1plot__data__error__bars.html#a3cdda0b5155304b1ce26a99c1efbb965", null ], - [ "get_data_string", "structfplot__core_1_1plot__data__error__bars.html#aaf126505fb7cb60f95190dccc89d0d4a", null ], - [ "get_plot_x_error_bars", "structfplot__core_1_1plot__data__error__bars.html#a680ba7316765bc7c4b00c603ccf96a05", null ], - [ "get_plot_y_error_bars", "structfplot__core_1_1plot__data__error__bars.html#a44eac08eca6a448fb2424a3ca4e9b3cc", null ], - [ "get_use_error_box", "structfplot__core_1_1plot__data__error__bars.html#a8420ea83599f290a9cd54754b292b2b4", null ], - [ "get_use_range", "structfplot__core_1_1plot__data__error__bars.html#adba3954ad57120529148371629340091", null ], - [ "set_use_error_box", "structfplot__core_1_1plot__data__error__bars.html#a86f2731ad612871fea02c6a8a4d1e7c1", null ], - [ "m_box", "structfplot__core_1_1plot__data__error__bars.html#a0e904bfb3fe7d81b6776040af4461f8e", null ], - [ "m_data", "structfplot__core_1_1plot__data__error__bars.html#a3082871ea6a5b153a9f9a1dc36ef42f9", null ], - [ "m_range", "structfplot__core_1_1plot__data__error__bars.html#afa0a49c315b65a212f8b3c5dc3ee448d", null ], - [ "m_xbars", "structfplot__core_1_1plot__data__error__bars.html#ace03eab48e42aab5b8570d612adc4a75", null ], - [ "m_ybars", "structfplot__core_1_1plot__data__error__bars.html#a372aea519cb462cc9e0e31cb5ef1aac9", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data__error__bars.png b/docs/html/structfplot__core_1_1plot__data__error__bars.png deleted file mode 100644 index eb92129c2055f103f676b7945b362816d2030b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1278 zcmeAS@N?(olHy`uVBq!ia0vp^hk*D12Q!dN{O-d6q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#LVOJzX3_Dj46+y*O#JmH^xA z{#7FH{~uA$3ULYXF-xEJS3OnSCCy+i;~v#x62IFtJZ&FyO-kw2_LyYa%cZEZ_v<{B zyAM^qmOg&5Peu09vI%FugtB_x`jE_(sNpoj%h0GUUfcNl^E8fIJn_q>2~KtJTy-g~ z)$?)bSzog~CdE&r?oNp6zQN)ZG*_DIXaBALe4Y!P7FHzg?=}dPu*=u<>D=$QaMHb) z*2&6VleqS65-;O^dHqf6qYD<66E{sx+qEu;-*1Ucz@$}M_Rr1V&vwtF_O+zEW>56` zhy7W8fB%cBtZcn@<-6R)bqb#Qg~BJOWXCv8T2rZYL?Zb*L(Oz{hx=dFf2b&Ve_{Wj z%L~fe?H4>y7izFw$B@vg%@FaJi{aW1rUp}d+yktJ$8MOrc)pT^8NPF|z@bag?>#Tc z_66Oa|EbN%taLeMSj=B0_WiS?r`6*$QMKOdrsg+4Tsku``%C33y*+y+%0*8tfAdOS zWvWP*`?t+!&wl+9+xoEBIgu;AdQ!>R>#GAIGsLq$+~!_ctN%vq()yd+x06+?!{7KV zF@07#cd6d@#EqYbo;%@ORQyUohRF-r}f1wJ|A5Eu-#bResSQ!Iceel6;>|! zp$H0=gQr$$y!pRVK3u}iTx8jYt=E@KQ1v{ue*P+_RLht(2VXf^t#x`^XulDZWVovn zwXa3BJ_-RQn@`3|ie}^nPyZc!=A&v2qNxm-iofd~vVye=h&#d$Ru;n&x{jd?S=t zkdu;li-6O8fgrDy=`o5+r>rS#of5PuEtI4Cv{q^KdyTKnn);K)T6If!mxDznr(Di$}`lgxAaPpE~6}-pkHTTOh zQ7!JbNxWg=moClI7E!+1dSxFd6hH4RSQhZ6_3f-XVTsjia>}oK^NC1~yB_(fsGe(f z)o$TT>-XEZUSEEGe_y;u{`{Nr%a={Lq#mQ$Gds7qXZe&%^M0??H8!{XyFL`?<6nnG qgS<{kg?nhKX3yhNY`I|ipK;HOH;#8(efI-PDh5wiKbLh*2~7YVS61`@ diff --git a/docs/html/structfplot__core_1_1plot__data__histogram-members.html b/docs/html/structfplot__core_1_1plot__data__histogram-members.html deleted file mode 100644 index d4146a9..0000000 --- a/docs/html/structfplot__core_1_1plot__data__histogram-members.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_data_histogram Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_histogram, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bin_datapdh_bin_data (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    define_datapdb_set_data_1 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    define_datapdb_set_data_2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    define_datapdb_set_data_3 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    getpdb_get_data (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_axes_stringpdb_get_axes_cmd (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_bar_per_label_countpdb_get_col_count (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_bin_countpdh_get_bin_count (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    get_color_indexpdc_get_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    get_command_stringpdb_get_cmdfplot_core::plot_data_barvirtual
    get_countpdb_get_count (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_datapdb_get_data_set (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_data_stringpdb_get_data_cmdfplot_core::plot_data_barvirtual
    get_draw_against_y2pdb_get_use_y2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_extreme_valuespdh_get_extremes (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    get_is_filledpdb_get_is_filled (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_labelpdb_get_label (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_line_colorpdc_get_line_colorfplot_core::plot_data_colored
    get_namepd_get_namefplot_core::plot_data
    get_number_formatpdh_get_num_fmt (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    get_transparencypdb_get_alpha (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    get_use_labelspdb_get_use_labels (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    m_alphafplot_core::plot_data_bar
    m_axislabelsfplot_core::plot_data_barprivate
    m_bardatafplot_core::plot_data_bar
    m_bincountfplot_core::plot_data_histogramprivate
    m_colorfplot_core::plot_data_coloredprivate
    m_colorindexfplot_core::plot_data_colored
    m_filledfplot_core::plot_data_bar
    m_namefplot_core::plot_dataprivate
    m_numberfmtfplot_core::plot_data_histogram
    m_useautocolorfplot_core::plot_data_colored
    m_useaxislabelsfplot_core::plot_data_bar
    m_usey2fplot_core::plot_data_bar
    pdb_set_data_1pdb_set_data_1 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    pdb_set_data_2pdb_set_data_2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    pdb_set_data_3pdb_set_data_3 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    setpdb_set_data (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_bin_countpdh_set_bin_count (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    set_color_indexpdc_set_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    set_data_1pdh_set_data_1 (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    set_data_2pdh_set_data_2 (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    set_data_3pdh_set_data_3 (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    set_draw_against_y2pdb_set_use_y2 (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_is_filledpdb_set_is_filled (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_labelpdb_set_label (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_line_colorpdc_set_line_colorfplot_core::plot_data_colored
    set_namepd_set_namefplot_core::plot_data
    set_number_formatpdh_set_num_fmt (defined in fplot_core::plot_data_histogram)fplot_core::plot_data_histogram
    set_transparencypdb_set_alpha (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    set_use_labelspdb_set_use_labels (defined in fplot_core::plot_data_bar)fplot_core::plot_data_bar
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__histogram.html b/docs/html/structfplot__core_1_1plot__data__histogram.html deleted file mode 100644 index 25425d3..0000000 --- a/docs/html/structfplot__core_1_1plot__data__histogram.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data_histogram Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data_histogram Type Reference
    -
    -
    - -

    A container for plotting data in the form of a histogram. - More...

    -
    -Inheritance diagram for fplot_core::plot_data_histogram:
    -
    -
    - - -fplot_core::plot_data_bar -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_bin_count pdh_get_bin_count
     
    procedure, public set_bin_count pdh_set_bin_count
     
    procedure, public bin_data pdh_bin_data
     
    procedure, public get_extreme_values pdh_get_extremes
     
    procedure, public get_number_format pdh_get_num_fmt
     
    procedure, public set_number_format pdh_set_num_fmt
     
    procedure set_data_1 pdh_set_data_1
     
    procedure set_data_2 pdh_set_data_2
     
    procedure set_data_3 pdh_set_data_3
     
    - Public Member Functions inherited from fplot_core::plot_data_bar
    procedure, public get_count pdb_get_count
     
    procedure, public get pdb_get_data
     
    procedure, public set pdb_set_data
     
    procedure, public get_data pdb_get_data_set
     
    procedure, public get_label pdb_get_label
     
    procedure, public set_label pdb_set_label
     
    procedure, public get_use_labels pdb_get_use_labels
     
    procedure, public set_use_labels pdb_set_use_labels
     
    procedure, public get_command_string pdb_get_cmd
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    procedure, public get_data_string pdb_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public get_axes_string pdb_get_axes_cmd
     
    procedure, public get_bar_per_label_count pdb_get_col_count
     
    procedure, public get_draw_against_y2 pdb_get_use_y2
     
    procedure, public set_draw_against_y2 pdb_set_use_y2
     
    procedure, public get_is_filled pdb_get_is_filled
     
    procedure, public set_is_filled pdb_set_is_filled
     
    procedure, public get_transparency pdb_get_alpha
     
    procedure, public set_transparency pdb_set_alpha
     
    generic, public define_data pdb_set_data_1
     
    generic, public define_data pdb_set_data_2
     
    generic, public define_data pdb_set_data_3
     
    procedure pdb_set_data_1 pdb_set_data_1
     
    procedure pdb_set_data_2 pdb_set_data_2
     
    procedure pdb_set_data_3 pdb_set_data_3
     
    procedure set_data_1 pdb_set_data_1_core
     
    procedure set_data_2 pdb_set_data_2_core
     
    procedure set_data_3 pdb_set_data_3_core
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character(len=:), allocatable m_numberfmt
     The numerical label format string.
     
    - Public Attributes inherited from fplot_core::plot_data_bar
    real(real64), dimension(:,:), allocatable m_bardata
     An array of data defining each bar - the matrix contains multiple columns to allow multiple bars per label.
     
    logical m_useaxislabels = .true.
     Determines if the axis labels should be used - only applicable if there is existing data stored in m_axisLabels & m_axisLabels is the same size as m_barData.
     
    logical m_usey2 = .false.
     Draw against the secondary y axis?
     
    logical m_filled = .true.
     Determines if each bar is filled.
     
    real(real32) m_alpha = 1.0
     The alpha value (transparency) for each bar.
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - -

    -Private Attributes

    integer(int32) m_bincount = 10
     The number of bins.
     
    -

    Detailed Description

    -

    A container for plotting data in the form of a histogram.

    - -

    Definition at line 6649 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ bin_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_histogram::bin_data
    -
    - -

    Definition at line 6658 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_bin_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_histogram::get_bin_count
    -
    - -

    Definition at line 6656 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_extreme_values()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_histogram::get_extreme_values
    -
    - -

    Definition at line 6659 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_number_format()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_histogram::get_number_format
    -
    - -

    Definition at line 6660 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_bin_count()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_histogram::set_bin_count
    -
    - -

    Definition at line 6657 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_data_1()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_histogram::set_data_1
    -
    - -

    Definition at line 6662 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_data_2()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_histogram::set_data_2
    -
    - -

    Definition at line 6663 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_data_3()

    - -
    -
    - - - - -
    procedure fplot_core::plot_data_histogram::set_data_3
    -
    - -

    Definition at line 6664 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_number_format()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_histogram::set_number_format
    -
    - -

    Definition at line 6661 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_bincount

    - -
    -
    - - - - - -
    - - - - -
    integer(int32) fplot_core::plot_data_histogram::m_bincount = 10
    -
    -private
    -
    - -

    The number of bins.

    - -

    Definition at line 6652 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_numberfmt

    - -
    -
    - - - - -
    character(len = :), allocatable fplot_core::plot_data_histogram::m_numberfmt
    -
    - -

    The numerical label format string.

    - -

    Definition at line 6654 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__histogram.js b/docs/html/structfplot__core_1_1plot__data__histogram.js deleted file mode 100644 index 3b38c64..0000000 --- a/docs/html/structfplot__core_1_1plot__data__histogram.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1plot__data__histogram = -[ - [ "m_bincount", "structfplot__core_1_1plot__data__histogram.html#a2ea6672bfb4cdfcf27f3a731f4c6cf4f", null ], - [ "m_numberfmt", "structfplot__core_1_1plot__data__histogram.html#aaf1eb78a557ce9d002aaab7ff552a053", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data__histogram.png b/docs/html/structfplot__core_1_1plot__data__histogram.png deleted file mode 100644 index c93c3fc29db6cd30bed1e34265b5dd519ff6cf57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1577 zcmcJPdsGru7{GC^be)QJa^)*s6IwKnx{+2IS+g=Ur64scF|(w6M5Z_ukkWLOm5C;) zA#G8FhNWeIh<1EbONl0$Z_rRM1)L8aDvwc}&S`&a`>T7-z2E)r{o|hRcfQ}fuqW7m z$s+qj003YKeAjlQIr7X?XKiU-vobLy=HRer_r4t_lgYdtRj6@!jf{;RkW;plw$Z`C zLG!t%Ae3&t`zje3i~^YR_hZ8sr5ymkf=BS}+xDeeD5*;FL)YaCOLNO@jxw$Y4bU}j){1X+>z3%pvMiMI}nQx?#D9O?DmnmI62z{PvD zgbjdCG)V@U9w?)F_4$(%>WDVwtk;(bIS5qi`JFdGorn6gf0%Frc6=&VkRLab-4WWn zW)Io^P_i%~)&l<9wyMVk$HKmDNOaD?auFANaaek!Sew=8aw3VSuM5M-v~vF11y;B< z70x1DQ7sBHwH02@)sWOFn@BEdBUGH?+)yE6ar0wG-QZ!IlDVfYmE6GghF^JsWSGhg zuGu^geW?losDEa86Xl&k+B|n{qT9d}vj{>J8Ux5U%d_m3ssI{}&l#9%>EXQpN?(DV z+WKU#g-5(mk&ouRdmwDUZ~uWf8fYNOT`hpP*J6@1GN+sbph%W?iFAMB$Vnl4^>HZS z`hgjF7Wq-@Wg<-<*+pp0q4YU&cRDjdhgPypSMZyN>hdf)`A7o3wTzM|A0-Hhx`9)) z#;zg|^{-AM_6D;+s;Pk{89wkJ9(1iPiR>))l;Kw0b~B*5JIM6qC-ss1h?lk~99vpDgNQ9 zZt2w&!Q5}*&R^^SGiA3_O%pluHuaB7nnG2VXQrj0wBk4G1CRxIRP9(BK~WcoEOI&NdDMWs7y$9)(9*XgsrTM4oEoQzwFN;FBHMf dEt?xAwbQMVDoWmNGk@v;_>SQ1l|LWO{2Q6DUfBQu diff --git a/docs/html/structfplot__core_1_1plot__data__tri__2d-members.html b/docs/html/structfplot__core_1_1plot__data__tri__2d-members.html deleted file mode 100644 index 70590fd..0000000 --- a/docs/html/structfplot__core_1_1plot__data__tri__2d-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__tri__2d.html b/docs/html/structfplot__core_1_1plot__data__tri__2d.html deleted file mode 100644 index e36deab..0000000 --- a/docs/html/structfplot__core_1_1plot__data__tri__2d.html +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_data_tri_2d Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_data_tri_2d Type Reference
    -
    -
    - -

    Defines a 2D triangulated data set. - More...

    -
    -Inheritance diagram for fplot_core::plot_data_tri_2d:
    -
    -
    - - -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_data_string pdt2d_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public get_command_string pdt2d_get_cmd
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    procedure, public define_data pdt2d_define_data
     Defines the data to plot.
     
    procedure, public get_line_width pdt2d_get_line_width
     Gets the width of the lines used to draw the triangulation.
     
    procedure, public set_line_width pdt2d_set_line_width
     Sets the width of the lines used to draw the triangulation.
     
    procedure, public get_line_style pdt2d_get_line_style
     
    procedure, public set_line_style pdt2d_set_line_style
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    real(real64), dimension(:), allocatable m_y
     An array of the y-coordinates of each point.
     
    integer(int32), dimension(:,:), allocatable m_indices
     A 3-column matrix containing the indices of each triangle's vertex.
     
    real(real32) m_linewidth = 1.0
     The line width.
     
    integer(int32) m_linestyle = LINE_SOLID
     The line style.
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:), allocatable m_x
     An array of the x-coordinates of each point.
     
    -

    Detailed Description

    -

    Defines a 2D triangulated data set.

    - -

    Definition at line 6911 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_tri_2d::define_data
    -
    - -

    Defines the data to plot.

    -
    Syntax
    subroutine(class(plot_data_tri_2d) this, class(delaunay_tri_2d) tri)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_data_tri_2d object.
    [in]triThe triangulation data to plot.
    -
    -
    - -

    Definition at line 6936 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_tri_2d::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to define the plot object properties.

    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 6926 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_data_tri_2d::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 6925 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_line_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_tri_2d::get_line_style
    -
    -
    Syntax
    integer(int32) function get_line_style(class(plot_data_tri_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_tri_2d object.
    -
    -
    -
    Returns
    The line sytle flag.
    - -

    Definition at line 6966 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_tri_2d::get_line_width
    -
    - -

    Gets the width of the lines used to draw the triangulation.

    -
    Syntax
    real(real32) function get_line_width(class(plot_data_tri_2d) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_data_tri_2d object.
    -
    -
    -
    Returns
    The line width.
    - -

    Definition at line 6946 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_line_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_tri_2d::set_line_style
    -
    -
    Syntax
    subroutine set_line_style(class(plot_data_tri_2d) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_data_tri_2d object.
    [in]xThe line style. The line style must be one of the following:
      -
    • LINE_DASHED
    • -
    • LINE_DASH_DOTTED
    • -
    • LINE_DASH_DOT_DOT
    • -
    • LINE_DOTTED
    • -
    • LINE_SOLID
    • -
    -
    -
    -
    - -

    Definition at line 6982 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_data_tri_2d::set_line_width
    -
    - -

    Sets the width of the lines used to draw the triangulation.

    -
    Syntax
    subroutine set_line_width(class(plot_data_tri_2d) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_data_tri_2d object.
    [in]xThe line width.
    -
    -
    - -

    Definition at line 6956 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_indices

    - -
    -
    - - - - -
    integer(int32), dimension(:,:), allocatable fplot_core::plot_data_tri_2d::m_indices
    -
    - -

    A 3-column matrix containing the indices of each triangle's vertex.

    - -

    Definition at line 6919 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_linestyle

    - -
    -
    - - - - -
    integer(int32) fplot_core::plot_data_tri_2d::m_linestyle = LINE_SOLID
    -
    - -

    The line style.

    - -

    Definition at line 6923 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_linewidth

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_data_tri_2d::m_linewidth = 1.0
    -
    - -

    The line width.

    - -

    Definition at line 6921 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_x

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::plot_data_tri_2d::m_x
    -
    -private
    -
    - -

    An array of the x-coordinates of each point.

    - -

    Definition at line 6914 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_y

    - -
    -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::plot_data_tri_2d::m_y
    -
    - -

    An array of the y-coordinates of each point.

    - -

    Definition at line 6916 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__data__tri__2d.js b/docs/html/structfplot__core_1_1plot__data__tri__2d.js deleted file mode 100644 index 846f73c..0000000 --- a/docs/html/structfplot__core_1_1plot__data__tri__2d.js +++ /dev/null @@ -1,15 +0,0 @@ -var structfplot__core_1_1plot__data__tri__2d = -[ - [ "define_data", "structfplot__core_1_1plot__data__tri__2d.html#a3ce95ac57b2dfda69e754d7314d5e113", null ], - [ "get_command_string", "structfplot__core_1_1plot__data__tri__2d.html#afc5f53c3238bd1dfd1a5a0c3ade8c567", null ], - [ "get_data_string", "structfplot__core_1_1plot__data__tri__2d.html#a6a3428fb27e8b2d557075e605781a5bc", null ], - [ "get_line_style", "structfplot__core_1_1plot__data__tri__2d.html#acd24f81dd3ea6e560ef8967762365c59", null ], - [ "get_line_width", "structfplot__core_1_1plot__data__tri__2d.html#a1d6f55f5124ea7fed1db1e1682415f72", null ], - [ "set_line_style", "structfplot__core_1_1plot__data__tri__2d.html#a83fd7aeaaf49e87feca48e47e45dc4f0", null ], - [ "set_line_width", "structfplot__core_1_1plot__data__tri__2d.html#a89979cf628a8d1bbe58616a134d84de4", null ], - [ "m_indices", "structfplot__core_1_1plot__data__tri__2d.html#ab6d39a0103f193a8aa8b795144b7c5a9", null ], - [ "m_linestyle", "structfplot__core_1_1plot__data__tri__2d.html#afe3e3bbe14b41a52103b5d059936cf07", null ], - [ "m_linewidth", "structfplot__core_1_1plot__data__tri__2d.html#a64ecd7d92fb4ac2fadcf5103e8e1287e", null ], - [ "m_x", "structfplot__core_1_1plot__data__tri__2d.html#a7759843e01d8bd9c38aaab6ebbee3968", null ], - [ "m_y", "structfplot__core_1_1plot__data__tri__2d.html#a3ee0322ab193a26b6d2e4bdf46894ce3", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__data__tri__2d.png b/docs/html/structfplot__core_1_1plot__data__tri__2d.png deleted file mode 100644 index ac76e9b4e9eb41c402ed75342dd94123fab5ac21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1235 zcmeAS@N?(olHy`uVBq!ia0vp^8-Vx#2Q!eI>@B$#NJ$6ygt-3y{~ySF@#br3|Doj; z2ATyD)6cwk@ZbSZ-1KbN5}+JsNswPK1CS2}=1jA%Ffg#hdAc};R4~4s`+D7D1s=9` z{*{mZ&aarw%{igke{Xe!Ui$w1UWY*Vv42cZL}sm|k?=Yl&ZfuBTeK?)SIUJ99U@ z7h>49!=OP`k0+s%n>pgqA%FDFowg*tiQ9XUs-BMLv^}lKJsXu7d@2~fxa1#NAD(_}FX#T+-$w8JZj^H}M8`-R z5E5tGaHN${r!bMh8xQwk%@K)Ye*x8%@}K}NO!VB8BFd-uUAK3Us;9Yy*WTLGj~`a1 z2A7QjdpcD}j4P9J=B&O706&rh*jl$2ppDqL6b{BimluI-+XKyypbcXL&zrr!q!)BQdg1XGKElfOWa z7ciVGmQK+rd^ja&(-J|x)9bhX{@BwO-;+N|3kl!o@q&zV9^+@=wg$KG$Acu8;jt@Q+(oV)JI*7r$5CK7Dm&z2}?S z>E$i&*FQWv>BmheJAr+1pk$@CW%m&& - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_label Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__label.html b/docs/html/structfplot__core_1_1plot__label.html deleted file mode 100644 index bad3f3b..0000000 --- a/docs/html/structfplot__core_1_1plot__label.html +++ /dev/null @@ -1,516 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_label Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_label Type Reference
    -
    -
    - -

    Defines a label object for a plot. - More...

    -
    -Inheritance diagram for fplot_core::plot_label:
    -
    -
    - - -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_command_string lbl_get_cmd
     Gets the GNUPLOT command string for the label.
     
    procedure, public get_is_visible lbl_get_is_visible
     Gets a value determining if the label is to be drawn.
     
    procedure, public set_is_visible lbl_set_is_visible
     Sets a value determining if the label is to be drawn.
     
    procedure, public get_position lbl_get_position
     Gets the position of the label in terms of plot coordinates.
     
    procedure, public set_position lbl_set_position
     Sets the position of the label in terms of plot coordinates.
     
    procedure, public get_angle lbl_get_angle
     Gets the angle of the label text, in degrees.
     
    procedure, public set_angle lbl_set_angle
     Sets the angle of the label text, in degrees.
     
    procedure, public get_text lbl_get_txt
     Gets the text displayed by the label.
     
    procedure, public set_text lbl_set_txt
     Sets the text displayed by the label.
     
    - - - - - - - - - - -

    -Public Attributes

    real(real32), dimension(3) m_position
     The x, y, and z coordinates of the label.
     
    real(real32) m_angle = 0.0
     The rotation angle of the label.
     
    character(len=plotdata_max_name_lengthm_text
     The label text.
     
    - - - - -

    -Private Attributes

    logical m_visible = .true.
     Determines if the label is visible.
     
    -

    Detailed Description

    -

    Defines a label object for a plot.

    - -

    Definition at line 469 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_angle()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::get_angle
    -
    - -

    Gets the angle of the label text, in degrees.

    -
    Syntax
    pure real(real32) function get_angle(class(plot_label) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_label object.
    -
    -
    -
    Returns
    The angle, in degrees.
    - -

    Definition at line 540 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_label::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string for the label.

    -
    Syntax
    character(:) function allocatable get_command_string(class(plot_label) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_label object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 489 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_is_visible()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::get_is_visible
    -
    - -

    Gets a value determining if the label is to be drawn.

    -
    Syntax
    pure logical function get_is_visible(class(plot_label) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_label object.
    -
    -
    -
    Returns
    Returns true if the label is to be drawn; else, false.
    - -

    Definition at line 499 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::get_position
    -
    - -

    Gets the position of the label in terms of plot coordinates.

    -
    Syntax
    pure real(real32) dimension(3) function get_position(class(plot_label) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_label object.
    -
    -
    -
    Returns
    A 3-element array containing the X, Y, and Z position of the label.
    - -

    Definition at line 519 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_text()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::get_text
    -
    - -

    Gets the text displayed by the label.

    -
    Syntax
    character(len = :) function allocatable get_text(class(plot_label) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_label object.
    -
    -
    -
    Returns
    The string of text to display.
    - -

    Definition at line 560 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_angle()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::set_angle
    -
    - -

    Sets the angle of the label text, in degrees.

    -
    Syntax
    subroutine set_angle(class(plot_label) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_label object.
    [in]xThe angle, in degrees.
    -
    -
    - -

    Definition at line 550 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_is_visible()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::set_is_visible
    -
    - -

    Sets a value determining if the label is to be drawn.

    -
    Syntax
    subroutine set_is_visible(class(plot_label) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_label object.
    [in]xSet to true to draw the label; else, false.
    -
    -
    - -

    Definition at line 509 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::set_position
    -
    - -

    Sets the position of the label in terms of plot coordinates.

    -
    Syntax
    subroutine set_position(class(plot_label) this, real(real32) x(3))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_label object.
    [in]xA 3-element array containing the X, Y, and Z position of the label.
    -
    -
    - -

    Definition at line 530 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_text()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_label::set_text
    -
    - -

    Sets the text displayed by the label.

    -
    Syntax
    subroutine set_text(class(plot_label) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_label object.
    [in]xThe text string to display.
    -
    -
    - -

    Definition at line 570 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_angle

    - -
    -
    - - - - -
    real(real32) fplot_core::plot_label::m_angle = 0.0
    -
    - -

    The rotation angle of the label.

    - -

    Definition at line 476 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_position

    - -
    -
    - - - - -
    real(real32), dimension(3) fplot_core::plot_label::m_position
    -
    - -

    The x, y, and z coordinates of the label.

    - -

    Definition at line 474 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_text

    - -
    -
    - - - - -
    character(len = plotdata_max_name_length) fplot_core::plot_label::m_text
    -
    - -

    The label text.

    - -

    Definition at line 478 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_visible

    - -
    -
    - - - - - -
    - - - - -
    logical fplot_core::plot_label::m_visible = .true.
    -
    -private
    -
    - -

    Determines if the label is visible.

    - -

    Definition at line 472 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__label.js b/docs/html/structfplot__core_1_1plot__label.js deleted file mode 100644 index b558935..0000000 --- a/docs/html/structfplot__core_1_1plot__label.js +++ /dev/null @@ -1,16 +0,0 @@ -var structfplot__core_1_1plot__label = -[ - [ "get_angle", "structfplot__core_1_1plot__label.html#a1363a76ce4b2124cf606610f34c5289d", null ], - [ "get_command_string", "structfplot__core_1_1plot__label.html#a24d375efbdb3f3a4859a4f9752fa6999", null ], - [ "get_is_visible", "structfplot__core_1_1plot__label.html#a6a58bbc93d4a081c10b912da6273fa03", null ], - [ "get_position", "structfplot__core_1_1plot__label.html#a683715b72ba17d79b0f7f75ce6223ab2", null ], - [ "get_text", "structfplot__core_1_1plot__label.html#a7c60aed4792e8700e1154e213d0cb92e", null ], - [ "set_angle", "structfplot__core_1_1plot__label.html#aa53c460db5af43102ac096d2e9af5fdb", null ], - [ "set_is_visible", "structfplot__core_1_1plot__label.html#acc5b95b081e578d0d05e9ee768579ba9", null ], - [ "set_position", "structfplot__core_1_1plot__label.html#a2ad61a55279d21ae6ebc29ee1fd0b464", null ], - [ "set_text", "structfplot__core_1_1plot__label.html#ae23e191969f98f47b32ee694fe22c993", null ], - [ "m_angle", "structfplot__core_1_1plot__label.html#ad76a1f42a6fc7701e8eff8a10d456eb4", null ], - [ "m_position", "structfplot__core_1_1plot__label.html#a5387d3494c65621d93b54c232e593e49", null ], - [ "m_text", "structfplot__core_1_1plot__label.html#a468e4487a8dc9645e105f93f95035f75", null ], - [ "m_visible", "structfplot__core_1_1plot__label.html#a83e92e7f824f33f14d4a8f2552f3d28e", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__label.png b/docs/html/structfplot__core_1_1plot__label.png deleted file mode 100644 index 51fbd915428cb74e1233d26ecec592077a402f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmeAS@N?(olHy`uVBq!ia0vp^9Y7qw!3-q7a-LNJQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=E7nJY5_^Dj46+eS2xO0#A$i zX&?3P^+%UyIUZ_{I&E!~ekqTw<%r#}mVd4sif0lyRDSNU9$;mX8 z%7c7P_S}2FvP`o4qsieZrR|X7*^!eOnY;JiW|8NG5p&Lb%glHgXfdlN$3Xt5;%z_Y zFL(Cpw`{X1bLXCPf7d=~&&&wMs!u#qk26eoTFjloEyEr(?T)$R%3Ck;dPCNy74(X< z)?P4;G|#c(ep}*OVxs=~`tf7E7v?>dJP{Rf^YX-$(|YaqSQSrdmzi#P{rvwvm0p>a zB^P}Z6k7}$84sNQ#?&C0BR1iBw$P+VhkG)`6MUE-#WFKolVNF?*vw#1B*5Ut$8_L? zBZGt`2ZJ&@W5N>!h8`rz|Kc4TCwSNbLu>EJxP)97p4=oZrF5W#j0&@+AqvBUbO00hh@hqDG=W4=;ETbp?-y9L807p S-&SD6GkCiCxvX^u0 diff --git a/docs/html/structfplot__core_1_1plot__object-members.html b/docs/html/structfplot__core_1_1plot__object-members.html deleted file mode 100644 index f599355..0000000 --- a/docs/html/structfplot__core_1_1plot__object-members.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_object Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_object, including all inherited members.

    - - -
    get_command_stringget_string_resultfplot_core::plot_objectpure virtual
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__object.html b/docs/html/structfplot__core_1_1plot__object.html deleted file mode 100644 index 4d2d77f..0000000 --- a/docs/html/structfplot__core_1_1plot__object.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_object Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_object Type Referenceabstract
    -
    -
    - -

    The base type for a GNUPLOT object. - More...

    -
    -Inheritance diagram for fplot_core::plot_object:
    -
    -
    - - -fplot_core::colormap -fplot_core::legend -fplot_core::multiplot -fplot_core::plot -fplot_core::plot_arrow -fplot_core::plot_axis -fplot_core::plot_data -fplot_core::plot_label -fplot_core::terminal - -
    - - - - - -

    -Public Member Functions

    procedure(get_string_result), deferred, public get_command_string get_string_result
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    -

    Detailed Description

    -

    The base type for a GNUPLOT object.

    - -

    Definition at line 305 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_command_string()

    - - -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__object.js b/docs/html/structfplot__core_1_1plot__object.js deleted file mode 100644 index feb41c5..0000000 --- a/docs/html/structfplot__core_1_1plot__object.js +++ /dev/null @@ -1,4 +0,0 @@ -var structfplot__core_1_1plot__object = -[ - [ "get_command_string", "structfplot__core_1_1plot__object.html#a986486fd0e463722c0d2e46d765d19d3", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__object.png b/docs/html/structfplot__core_1_1plot__object.png deleted file mode 100644 index dffb2bc06bdf05fb943e7ca6b54c2d05adca2d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3533 zcmd55N5-p=>YX~O9C=eb+9w9=+5CV~qySBNx5LgtQp%kazDqG zzmlB*ss*#VYVoRvEy8wuhL>z9t|8}NZDjB8;PM%@q{kxo24Uzdp{7YjjMd0c<=Uhn zb>iu0e3LPB+!&kS_O%8Gb`&@DDEERmGghkG`#T2n-+{3h1d!?K1#`Z+5)D&$n+zrO zJ%g1%qt$ z^pwgXM06tJQC1enB=gEN7*YJJfNaOA?%E8Pg3Ne8z|A~;TBz~|2ZGC}A(U+L;)2=8 z!}LrFx14-7-05}TxZ~BXJOjZsPZp!n%xzZ{OuqW1mhIJmx-F=ZpraDbOMwE9fT1^{ z+5ACXC?$zuJzr#qdK`7a~giArP~BHUsp=>SAbK zx8YC_2EuCx;q4T``kCFZXWl0JP0fyO17MsFG@055hWfkuz*={e_|d8SZZv%xKtE(! zh0|J$-Etrm)JW+&yh)k@pv4&$*wQ>ur)Ap;C!>TqqQzK^DG`hsBtwwq9 zj`Z4BQ)3e(=iF)1#_G>KoyBNmR2!2dVJ*CBB1~S8iO@-b;$v0iGIUg1T7XzD0Y=8h zk3{BaSwLzZr*jjgU@1+~(^>4psaSH*fOjlW!fFapLYS*@>GiemY)cw z%Re)#7{3IxSM2O)mY%UYw?`M@G1tD-Wm*RovD_Yw@`;q!1&$q-YuW07JA-6<@ILlO z*%mlPaanWOOrTJ+oaaweUAyucFFw9Kp#j zZ(9Ntsr#PrpvnozD~}M(QhR4ln4cL8yu|Reh(X#4N06yC9YO(c#9D{1L2PUN3QPGR z8jdL>_*#I&VB|ncKFCb%o8uxLX-KsXVh%embGXx@XG)3ux%2V-6VJ*qN19YoO>dky z07$}ZF@salIHi|UfAV16QN2SUf+CU;5b{-DL*9im)c(@LlYaD_>K&Cu4C0B$_5^?X z(G^B7r}x2+_I>gG{PQnl3HkK@cUC;eETxXBu<9T>YC_2>FJZb}>fV|NQl9`LB1=! zRjb>k^msVQ0bEk913S4km4rTyN4^0U47T-_i+ya4s)CZk zvZM0E#W=yVSRBS*h!>$nH4S3mj|%03Zo#!r$BBCdBVSnC?YJsj?pjbR09)2)ID%RP zXWXvZF;$qKF{e84d}Fg6Rm7P@-AlFB|KMJzf`)3AUj_jiKHKDT~Ub8 zWp9EygF(Pzn^MRIm~n>AmG+(MCaitcl`oIVtO869mwoVtW$1+m4dwC~R4)6WFRpv{ ziwBDVAxVY8XoJ{Hp6;gxahRv;p9F*MUtaZ9*Xq>w3T}c$<1^q+$?!NH?nbHkyHI`Sj(yz4G=5fqjcj_vQ%zoYiP zEv9~%S$X(4tB4VA|5liRTw&@WP<8Rhaaa~^(*W(KNU&brBFs%9ljZwt#m0te?t>I@B!@Aou^YgK^Zz&sj z6A-oL2~94G{eiZU#2JugW=+#M@Lop&>PKk=1d=Jgo1{PeQoq{}vuHwggt+nPk`cC# zGnJ01iOau}G&v$3w*d6B$BkX;DH>22A7a6Z^r*C^nZG$%W8*4r&q6&#s}&2EI_e@t zi!HEa=cN&2!Qp|ZZPpmK#+!x|1NAW~_wR7bj!O_IInAJ5oWnXeCd&EY6*}``Xi#^4 YP(x%%vxvC^`tgEce1mq^d+$H~AMr18YybcN diff --git a/docs/html/structfplot__core_1_1plot__polar-members.html b/docs/html/structfplot__core_1_1plot__polar-members.html deleted file mode 100644 index db89b97..0000000 --- a/docs/html/structfplot__core_1_1plot__polar-members.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::plot_polar Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_polar, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_allplt_clear_allfplot_core::plot
    clear_all_labelsplt_clear_labelsfplot_core::plot
    clear_arrowsplt_clear_arrowsfplot_core::plot
    drawplt_drawfplot_core::plot
    free_resourcesplt_clean_upfplot_core::plot
    getplt_getfplot_core::plot
    get_arrowplt_get_arrowfplot_core::plot
    get_arrow_countplt_get_arrow_countfplot_core::plot
    get_autoscaleplr_get_autoscalefplot_core::plot_polar
    get_axis_equalplt_get_axis_equalfplot_core::plot
    get_colormapplt_get_colormapfplot_core::plot
    get_command_stringplr_get_cmdfplot_core::plot_polarvirtual
    get_countplt_get_countfplot_core::plot
    get_draw_borderplt_get_draw_borderfplot_core::plot
    get_font_nameplt_get_fontfplot_core::plot
    get_font_sizeplt_get_font_sizefplot_core::plot
    get_labelplt_get_labelfplot_core::plot
    get_label_countplt_get_label_countfplot_core::plot
    get_legendplt_get_legendfplot_core::plot
    get_radial_limitsplr_get_limitsfplot_core::plot_polar
    get_show_colorbarplt_get_show_colorbarfplot_core::plot
    get_show_gridlinesplt_get_show_gridfplot_core::plot
    get_terminalplt_get_termfplot_core::plot
    get_theta_directionplr_get_theta_directionfplot_core::plot_polar
    get_theta_start_positionplr_get_theta_startfplot_core::plot_polar
    get_tics_inwardplt_get_tics_infplot_core::plot
    get_titleplt_get_titlefplot_core::plot
    initializeplr_initfplot_core::plot_polar
    is_title_definedplt_has_titlefplot_core::plot
    m_arrowsfplot_core::plot
    m_autoscalefplot_core::plot_polarprivate
    m_axisequalfplot_core::plot
    m_colorindexfplot_core::plot
    m_colormapfplot_core::plot
    m_datafplot_core::plot
    m_drawborderfplot_core::plot
    m_hastitlefplot_core::plot
    m_labelsfplot_core::plot
    m_legendfplot_core::plot
    m_maxradfplot_core::plot_polar
    m_minradfplot_core::plot_polar
    m_showcolorbarfplot_core::plot
    m_showgridfplot_core::plot
    m_terminalfplot_core::plot
    m_thetadirectionfplot_core::plot_polar
    m_thetastartfplot_core::plot_polar
    m_ticsinfplot_core::plot
    m_titlefplot_core::plotprivate
    plr_clean_upplr_clean_up (defined in fplot_core::plot_polar)fplot_core::plot_polar
    popplt_pop_datafplot_core::plot
    pop_arrowplt_pop_arrowfplot_core::plot
    pop_labelplt_pop_labelfplot_core::plot
    pushplt_push_datafplot_core::plot
    push_arrowplt_push_arrowfplot_core::plot
    push_labelplt_push_labelfplot_core::plot
    save_fileplt_savefplot_core::plot
    setplt_setfplot_core::plot
    set_arrowplt_set_arrowfplot_core::plot
    set_autoscaleplr_set_autoscalefplot_core::plot_polar
    set_axis_equalplt_set_axis_equalfplot_core::plot
    set_colormapplt_set_colormapfplot_core::plot
    set_draw_borderplt_set_draw_borderfplot_core::plot
    set_font_nameplt_set_fontfplot_core::plot
    set_font_sizeplt_set_font_sizefplot_core::plot
    set_labelplt_set_labelfplot_core::plot
    set_radial_limitsplr_set_limitsfplot_core::plot_polar
    set_show_colorbarplt_set_show_colorbarfplot_core::plot
    set_show_gridlinesplt_set_show_gridfplot_core::plot
    set_theta_directionplr_set_theta_directionfplot_core::plot_polar
    set_theta_start_positionplr_set_theta_startfplot_core::plot_polar
    set_tics_inwardplt_set_tics_infplot_core::plot
    set_titleplt_set_titlefplot_core::plot
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__polar.html b/docs/html/structfplot__core_1_1plot__polar.html deleted file mode 100644 index d0a4ff7..0000000 --- a/docs/html/structfplot__core_1_1plot__polar.html +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - -fplot: fplot_core::plot_polar Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::plot_polar Type Reference
    -
    -
    - -

    Defines a 2D polar plot. - More...

    -
    -Inheritance diagram for fplot_core::plot_polar:
    -
    -
    - - -fplot_core::plot -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public initialize plr_init
     Initializes the plot_polar object.
     
    procedure, public get_command_string plr_get_cmd
     Gets the GNUPLOT command string to represent this plot_polar object.
     
    procedure, public get_autoscale plr_get_autoscale
     Gets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public set_autoscale plr_set_autoscale
     Sets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public get_radial_limits plr_get_limits
     Gets the radial axis limits if autoscaling is inactive.
     
    procedure, public set_radial_limits plr_set_limits
     Sets the radial axis limits if autoscaling is inactive.
     
    procedure, public get_theta_start_position plr_get_theta_start
     Gets the position for theta = 0.
     
    procedure, public set_theta_start_position plr_set_theta_start
     Sets the position for theta = 0.
     
    procedure, public get_theta_direction plr_get_theta_direction
     Gets the theta direction.
     
    procedure, public set_theta_direction plr_set_theta_direction
     Sets the theta direction.
     
    - Public Member Functions inherited from fplot_core::plot
    procedure, public free_resources plt_clean_up
     Cleans up resources held by the plot object. Inheriting classes are expected to call this routine to free internally held resources.
     
    procedure, public initialize plt_init
     Initializes the plot object.
     
    procedure, public get_title plt_get_title
     Gets the plot's title.
     
    procedure, public set_title plt_set_title
     Sets the plot's title.
     
    procedure, public is_title_defined plt_has_title
     Gets a value determining if a title has been defined for the plot object.
     
    procedure, public get_legend plt_get_legend
     Gets the plot's legend object.
     
    procedure, public get_count plt_get_count
     Gets the number of stored plot_data objects.
     
    procedure, public push plt_push_data
     Pushes a plot_data object onto the stack.
     
    procedure, public pop plt_pop_data
     Pops the last plot_data object from the stack.
     
    procedure, public clear_all plt_clear_all
     Removes all plot_data objects from the plot.
     
    procedure, public get plt_get
     Gets a pointer to the requested plot_data object.
     
    procedure, public set plt_set
     Sets the requested plot_data object into the plot.
     
    procedure, public get_terminal plt_get_term
     Gets the GNUPLOT terminal object.
     
    procedure, public get_show_gridlines plt_get_show_grid
     Gets a flag determining if the grid lines should be shown.
     
    procedure, public set_show_gridlines plt_set_show_grid
     Sets a flag determining if the grid lines should be shown.
     
    procedure, public draw plt_draw
     Launches GNUPLOT and draws the plot per the current state of the command list.
     
    procedure, public save_file plt_save
     Saves a GNUPLOT command file.
     
    procedure, public get_font_name plt_get_font
     Gets the name of the font used for plot text.
     
    procedure, public set_font_name plt_set_font
     Sets the name of the font used for plot text.
     
    procedure, public get_font_size plt_get_font_size
     Gets the size of the font used by the plot.
     
    procedure, public set_font_size plt_set_font_size
     Sets the size of the font used by the plot.
     
    procedure, public get_tics_inward plt_get_tics_in
     Gets a value determining if the axis tic marks should point inwards.
     
    procedure, public set_tics_inward plt_set_tics_in
     Sets a value determining if the axis tic marks should point inwards.
     
    procedure, public get_draw_border plt_get_draw_border
     Gets a value determining if the border should be drawn.
     
    procedure, public set_draw_border plt_set_draw_border
     Sets a value determining if the border should be drawn.
     
    procedure, public push_label plt_push_label
     Adds a label to the plot.
     
    procedure, public pop_label plt_pop_label
     Removes the last label from the plot.
     
    procedure, public get_label plt_get_label
     Gets the requested plot_label from the plot.
     
    procedure, public set_label plt_set_label
     Sets the specified plot_label object.
     
    procedure, public get_label_count plt_get_label_count
     Gets the number of plot_label objects belonging to the plot.
     
    procedure, public clear_all_labels plt_clear_labels
     Clears all plot_label objects from the plot.
     
    procedure, public get_axis_equal plt_get_axis_equal
     Gets a flag determining if the axes should be equally scaled.
     
    procedure, public set_axis_equal plt_set_axis_equal
     Sets a flag determining if the axes should be equally scaled.
     
    procedure, public get_colormap plt_get_colormap
     Gets a pointer to the colormap object.
     
    procedure, public set_colormap plt_set_colormap
     Sets the colormap object.
     
    procedure, public get_show_colorbar plt_get_show_colorbar
     Gets a value determining if the colorbar should be shown.
     
    procedure, public set_show_colorbar plt_set_show_colorbar
     Sets a value determining if the colorbar should be shown.
     
    procedure, public push_arrow plt_push_arrow
     Pushes a new plot_arrow object onto the plot.
     
    procedure, public pop_arrow plt_pop_arrow
     Pops a plot_arrow object from the plot.
     
    procedure, public get_arrow plt_get_arrow
     Gets a pointer to the requested plot_arrow object.
     
    procedure, public set_arrow plt_set_arrow
     Sets a plot_arrow into the plot.
     
    procedure, public get_arrow_count plt_get_arrow_count
     Gets the number of plot_arrow objects held by the plot object.
     
    procedure, public clear_arrows plt_clear_arrows
     Clears all plot_arrow objects from the plot.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    real(real64) m_minrad = 0.0d0
     The minimum radius value - only applicable if m_autoscale is false.
     
    real(real64) m_maxrad = 1.0d0
     The maximum radius value - only applicable if m_autoscale is false.
     
    character(len=:), allocatable m_thetastart
     The location for theta = 0.
     
    character(len=:), allocatable m_thetadirection
     The direction for theta.
     
    - Public Attributes inherited from fplot_core::plot
    logical m_hastitle = .false.
     Has a title?
     
    class(terminal), pointer m_terminal => null()
     The GNUPLOT terminal object to target.
     
    type(list) m_data
     A collection of plot_data items to plot.
     
    type(legend), pointer m_legend => null()
     The legend.
     
    logical m_showgrid = .true.
     Show grid lines?
     
    logical m_ticsin = .true.
     Point tic marks in?
     
    logical m_drawborder = .true.
     Draw the border?
     
    type(list) m_labels
     A collection of plot_label items to draw.
     
    integer(int32) m_colorindex = 1
     The color index to use for automatic line coloring for scatter plots.
     
    logical m_axisequal = .false.
     Determines if the axes should be scaled proportionally.
     
    class(colormap), pointer m_colormap
     The colormap.
     
    logical m_showcolorbar = .true.
     Show the colorbar?
     
    type(list) m_arrows
     A collection of plot_arrow items to draw.
     
    - - - - -

    -Private Attributes

    logical m_autoscale = .true.
     Allow the plot to autoscale?
     
    -

    Detailed Description

    -

    Defines a 2D polar plot.

    - -

    Definition at line 7373 of file fplot_core.f90.

    -

    Constructor & Destructor Documentation

    - -

    ◆ plr_clean_up()

    - -
    -
    - - - - - -
    - - - - -
    final fplot_core::plot_polar::plr_clean_up
    -
    -final
    -
    - -

    Definition at line 7388 of file fplot_core.f90.

    - -
    -
    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_autoscale()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::get_autoscale
    -
    - -

    Gets a logical value determining if the axis should be automatically scaled to fit the data.

    -
    Syntax
    logical get_autoscale(class(plot_polar) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_polar object.
    -
    -
    -
    Returns
    Returns true if the plot will autoscale; else, false.
    - -

    Definition at line 7434 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::plot_polar::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this plot_polar object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(plot_polar) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_polar object.
    -
    -
    -
    Returns
    The command string.
    - -

    Reimplemented from fplot_core::plot.

    - -

    Definition at line 7423 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_radial_limits()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::get_radial_limits
    -
    - -

    Gets the radial axis limits if autoscaling is inactive.

    -
    Syntax
    real(real64)(2) get_radial_limits(class(plot_polar) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_polar object.
    -
    -
    -
    Returns
    A 2-element array containing the minimum and maximum limit values in that order.
    - -

    Definition at line 7456 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_theta_direction()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::get_theta_direction
    -
    - -

    Gets the theta direction.

    -
    Syntax
    character(len = :) get_theta_direction(class(plot_polar) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_polar object.
    -
    -
    -
    Returns
    The direction. It is one of the following flags.
      -
    • POLAR_THETA_CCW
    • -
    • POLAR_THETA_CW
    • -
    -
    - -

    Definition at line 7508 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_theta_start_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::get_theta_start_position
    -
    - -

    Gets the position for theta = 0.

    -
    Syntax
    character(len = :) get_theta_start_position(class(plot_polar) this)
    -
    -
    Parameters
    - - -
    [in]thisThe plot_polar object.
    -
    -
    -
    Returns
    The starting position. It is one of the following flags.
      -
    • POLAR_THETA_BOTTOM
    • -
    • POLAR_THETA_TOP
    • -
    • POLAR_THETA_RIGHT
    • -
    • POLAR_THETA_LEFT
    • -
    -
    - -

    Definition at line 7481 of file fplot_core.f90.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::initialize
    -
    - -

    Initializes the plot_polar object.

    -
    Syntax
    subroutine initialize(class(plot_polar) this, optional integer(int32) term, optional class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in]thisThe plot_polar object.
    [in]termAn optional input that is used to define the terminal. The default terminal is a WXT terminal. The acceptable inputs are:
      -
    • GNUPLOT_TERMINAL_PNG
    • -
    • GNUPLOT_TERMINAL_QT
    • -
    • GNUPLOT_TERMINAL_WIN32
    • -
    • GNUPLOT_TERMINAL_WXT
    • -
    • GNUPLOT_TERMINAL_LATEX
    • -
    -
    [in]fnameA filename to pass to the terminal in the event the terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG).
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 7412 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_autoscale()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::set_autoscale
    -
    - -

    Sets a logical value determining if the axis should be automatically scaled to fit the data.

    -
    Syntax
    subroutine set_autoscale(class(plot_polar) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_polar object.
    [in]xSet to true if the plot will autoscale; else, false.
    -
    -
    - -

    Definition at line 7445 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_radial_limits()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::set_radial_limits
    -
    - -

    Sets the radial axis limits if autoscaling is inactive.

    -
    Syntax
    subroutine set_radial_limits(class(plot_polar) this, real(real64) x(2))
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_polar object.
    [in]A2-element array containing the minimum and maximum limit values.
    -
    -
    - -

    Definition at line 7467 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_theta_direction()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::set_theta_direction
    -
    - -

    Sets the theta direction.

    -
    Syntax
    subroutine set_theta_direction(class(plot_polar) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_polar object.
    [in]xThe direction. It must be one of the following flags.
      -
    • POLAR_THETA_CCW
    • -
    • POLAR_THETA_CW
    • -
    -
    -
    -
    - -

    Definition at line 7520 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_theta_start_position()

    - -
    -
    - - - - -
    procedure, public fplot_core::plot_polar::set_theta_start_position
    -
    - -

    Sets the position for theta = 0.

    -
    Syntax
    subroutine set_theta_start_position(class(plot_polar) this, character(len = *) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe plot_polar object.
    [in]xThe starting position. It must be one of the following flags.
      -
    • POLAR_THETA_BOTTOM
    • -
    • POLAR_THETA_TOP
    • -
    • POLAR_THETA_RIGHT
    • -
    • POLAR_THETA_LEFT
    • -
    -
    -
    -
    - -

    Definition at line 7496 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_autoscale

    - -
    -
    - - - - - -
    - - - - -
    logical fplot_core::plot_polar::m_autoscale = .true.
    -
    -private
    -
    - -

    Allow the plot to autoscale?

    - -

    Definition at line 7376 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_maxrad

    - -
    -
    - - - - -
    real(real64) fplot_core::plot_polar::m_maxrad = 1.0d0
    -
    - -

    The maximum radius value - only applicable if m_autoscale is false.

    - -

    Definition at line 7382 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_minrad

    - -
    -
    - - - - -
    real(real64) fplot_core::plot_polar::m_minrad = 0.0d0
    -
    - -

    The minimum radius value - only applicable if m_autoscale is false.

    - -

    Definition at line 7379 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_thetadirection

    - -
    -
    - - - - -
    character(len = :), allocatable fplot_core::plot_polar::m_thetadirection
    -
    - -

    The direction for theta.

    - -

    Definition at line 7386 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_thetastart

    - -
    -
    - - - - -
    character(len = :), allocatable fplot_core::plot_polar::m_thetastart
    -
    - -

    The location for theta = 0.

    - -

    Definition at line 7384 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1plot__polar.js b/docs/html/structfplot__core_1_1plot__polar.js deleted file mode 100644 index 86d7228..0000000 --- a/docs/html/structfplot__core_1_1plot__polar.js +++ /dev/null @@ -1,18 +0,0 @@ -var structfplot__core_1_1plot__polar = -[ - [ "get_autoscale", "structfplot__core_1_1plot__polar.html#adb315455f8ef25ef6a861b02ee4ef771", null ], - [ "get_command_string", "structfplot__core_1_1plot__polar.html#ad1a4a767c50e8fe86d5526d45b95f794", null ], - [ "get_radial_limits", "structfplot__core_1_1plot__polar.html#a24177754fa37e095f2500a8f0d9cf269", null ], - [ "get_theta_direction", "structfplot__core_1_1plot__polar.html#aa2baa0c84a23e7c3069ce2fcd4050e7e", null ], - [ "get_theta_start_position", "structfplot__core_1_1plot__polar.html#afeb1ddee4cb09260fd4f92a4e70e8e18", null ], - [ "initialize", "structfplot__core_1_1plot__polar.html#a6d386c4b4669e96aa128e17b0d0e3e86", null ], - [ "set_autoscale", "structfplot__core_1_1plot__polar.html#aad0eaf7bd5100040899825fe1281ab86", null ], - [ "set_radial_limits", "structfplot__core_1_1plot__polar.html#a00dbfab2c6a3dc1f814d076574e5fd17", null ], - [ "set_theta_direction", "structfplot__core_1_1plot__polar.html#ab1bf8924f14b0833ca12ded69d6df738", null ], - [ "set_theta_start_position", "structfplot__core_1_1plot__polar.html#a6c09839428e51e17d6ad88608d1d92ae", null ], - [ "m_autoscale", "structfplot__core_1_1plot__polar.html#aae0b529ac9a469cd9ec3e04a125894e7", null ], - [ "m_maxrad", "structfplot__core_1_1plot__polar.html#a0df675cfa213da3a32e6fa441cec713c", null ], - [ "m_minrad", "structfplot__core_1_1plot__polar.html#a0e25b033c0faf43fdb1fbb1cd3518f44", null ], - [ "m_thetadirection", "structfplot__core_1_1plot__polar.html#a1a0d0c47ed00a432cf4d1911c282a624", null ], - [ "m_thetastart", "structfplot__core_1_1plot__polar.html#a1ed3b2f0f0abc341f8da7215764567b9", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1plot__polar.png b/docs/html/structfplot__core_1_1plot__polar.png deleted file mode 100644 index 4858ee87ae97db04640c9a49365eba73279944cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmeAS@N?(olHy`uVBq!ia0vp^9U#oX3?#Wzf)jw0bbwEY>;M1%fy@_gzLxeMT5e&W zSs*d}%!>yP9stEn&xS1l%5jzi`2{lo`CwqqH2Vqz1JfQ)7srqa#_1lskFS%((H9-p`$}FT#&VB=fteoc#V)LB*BNDQHV$%YXP6AY%Oe)>|oI%wANM4m~{(P5!4W!nJBhYv3d`m zW>I&Zhi%slCQ+69Rr{q+7Cd13@<_H!kiVg4ezZdIqhf{B)3w19?;7s9t-O2wvxjn; zQoDt!I}^ z%aRr96C{$~9ANm6%+GM4xtdY3&CjEX@n^vo$4k5&^Q9O9tT`AaHZurV;-@a&XX-RO zCfDOJ>HTd-53s>}LWitwU-S4Ry?tqzFJ}jjza!T8qk5)@g=7~n|^1?y%Ws+`zG(^+*!J57b~?qyY%y~tzX|e zdu6%9vc5HY@8&m7Na>!>s(AALhUN((mK>fJ*;S57SQ{|>xxviv8~}Dg(n!5g}+QlTgrW*yIjMpiY4XG9i~Vjd1lS(4WdsHnty|Q{O*g#QYF{qa6jKV z9zMP~G2ZUW-6BrU{>pwmM|ErJ_3Q~Nl{X)nF;jNuq+dK8Gb6j_ukDz5)4EK+SlF^- iW~ZHkV#|fb|BS^)x+|xw4!H(Q+zg(selF{r5}E+7`eJPW diff --git a/docs/html/structfplot__core_1_1png__terminal-members.html b/docs/html/structfplot__core_1_1png__terminal-members.html deleted file mode 100644 index 2b9e779..0000000 --- a/docs/html/structfplot__core_1_1png__terminal-members.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::png_terminal Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1png__terminal.html b/docs/html/structfplot__core_1_1png__terminal.html deleted file mode 100644 index 645b6bf..0000000 --- a/docs/html/structfplot__core_1_1png__terminal.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - - -fplot: fplot_core::png_terminal Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::png_terminal Type Reference
    -
    -
    - -

    Defines a GNUPLOT PNG terminal object. - More...

    -
    -Inheritance diagram for fplot_core::png_terminal:
    -
    -
    - - -fplot_core::terminal -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_filename png_get_filename
     Gets the filename for the output PNG file.
     
    procedure, public set_filename png_set_filename
     Sets the filename for the output PNG file.
     
    procedure, public get_id_string png_get_term_string
     Retrieves a GNUPLOT terminal identifier string.
     
    procedure, public get_command_string png_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    - Public Member Functions inherited from fplot_core::terminal
    procedure, public get_window_width term_get_window_width
     Gets the width of the plot window.
     
    procedure, public set_window_width term_set_window_width
     Sets the width of the plot window.
     
    procedure, public get_window_height term_get_window_height
     Gets the height of the plot window.
     
    procedure, public set_window_height term_set_window_height
     Sets the height of the plot window.
     
    procedure, public get_command_string term_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    procedure, public get_plot_window_number term_get_plot_window_number
     Gets the targeted plot window number.
     
    procedure, public set_plot_window_number term_set_plot_window_number
     Sets the targeted plot window number.
     
    procedure, public get_title term_get_title
     Gets the plot window's title.
     
    procedure, public set_title term_set_title
     Sets the plot window's title.
     
    procedure, public get_font_name term_get_font_name
     Gets the name of the font used for text displayed by the graph.
     
    procedure, public set_font_name term_set_font_name
     Sets the name of the font used for text displayed by the graph.
     
    procedure, public get_font_size term_get_font_size
     Gets the size of the font used by the graph.
     
    procedure, public set_font_size term_set_font_size
     Sets the size of the font used by the graph.
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character(len=gnuplot_max_path_lengthm_fname = "default.png"
     The filename of the PNG file to write.
     
    - Public Attributes inherited from fplot_core::terminal
    integer(int32) m_windowwidth = GNUPLOT_DEFAULT_WINDOW_WIDTH
     The window width, in pixels.
     
    integer(int32) m_termid = 0
     The plot window number.
     
    character(len=gnuplot_max_label_lengthm_title = ""
     The plot window title.
     
    logical m_hastitle = .false.
     Determines if a plot title is defined.
     
    character(len=gnuplot_max_label_lengthm_fontname = GNUPLOT_DEFAULT_FONTNAME
     The font used by the graph.
     
    integer(int32) m_fontsize = GNUPLOT_DEFAULT_FONT_SIZE
     The size of the font used by the graph.
     
    - - - - -

    -Private Attributes

    character(len=3) m_id = "png"
     The terminal ID string.
     
    -

    Detailed Description

    -

    Defines a GNUPLOT PNG terminal object.

    - -

    Definition at line 1522 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::png_terminal::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to establish appropriate parameters.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(png_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The GNUPLOT command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 1569 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_filename()

    - -
    -
    - - - - -
    procedure, public fplot_core::png_terminal::get_filename
    -
    - -

    Gets the filename for the output PNG file.

    -
    Syntax
    character(len = :) function, allocatable get_filename(class(png_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe png_terminal object.
    -
    -
    -
    Returns
    The filename, including the file extension (.png).
    - -

    Definition at line 1538 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::png_terminal::get_id_string
    -
    -virtual
    -
    - -

    Retrieves a GNUPLOT terminal identifier string.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(png_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe png_terminal object.
    -
    -
    -
    Returns
    The string.
    - -

    Implements fplot_core::terminal.

    - -

    Definition at line 1558 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_filename()

    - -
    -
    - - - - -
    procedure, public fplot_core::png_terminal::set_filename
    -
    - -

    Sets the filename for the output PNG file.

    -
    Syntax
    subroutine set_filename(class(png_terminal) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe png_terminal object.
    [in]txtThe filename, including the file extension (.png).
    -
    -
    - -

    Definition at line 1548 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_fname

    - -
    -
    - - - - -
    character(len = gnuplot_max_path_length) fplot_core::png_terminal::m_fname = "default.png"
    -
    - -

    The filename of the PNG file to write.

    - -

    Definition at line 1527 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_id

    - -
    -
    - - - - - -
    - - - - -
    character(len = 3) fplot_core::png_terminal::m_id = "png"
    -
    -private
    -
    - -

    The terminal ID string.

    - -

    Definition at line 1525 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1png__terminal.js b/docs/html/structfplot__core_1_1png__terminal.js deleted file mode 100644 index 927d124..0000000 --- a/docs/html/structfplot__core_1_1png__terminal.js +++ /dev/null @@ -1,9 +0,0 @@ -var structfplot__core_1_1png__terminal = -[ - [ "get_command_string", "structfplot__core_1_1png__terminal.html#a54f5f9a908cdfb83a849015ca574b22f", null ], - [ "get_filename", "structfplot__core_1_1png__terminal.html#af9f9678ab852cd1cdf1ba93607045ad0", null ], - [ "get_id_string", "structfplot__core_1_1png__terminal.html#a7fc33aaa61a2ecd8d1786b573c1194e9", null ], - [ "set_filename", "structfplot__core_1_1png__terminal.html#a11541efbe8bb3036b670ab5bfd234cb8", null ], - [ "m_fname", "structfplot__core_1_1png__terminal.html#acea6ab706e5e45c059be85af178adb77", null ], - [ "m_id", "structfplot__core_1_1png__terminal.html#ab960a72618e8aaa0fdda0290b11c33d2", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1png__terminal.png b/docs/html/structfplot__core_1_1png__terminal.png deleted file mode 100644 index 232d8823e14b73e2318f8fef9e947a9df0b17b14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 920 zcmeAS@N?(olHy`uVBq!ia0vp^lYzK{gBeI((bB93QqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GW5o-U3d6^w7^zV2IXz{92< zzvR^W|3}hyvIyy!zP)t!%|vZChots{Dlg-U&h0clG3kovLlsXu5SCs(W!mbkzLVk} zdcL|-aINl1NNMdA&q-3}=3WX|W+IxMvL`+}eBJ3xj;vjGujC$ad=NNSZT(M;<*TYK zr=BqV<@74hMY!Tkh<&R4h9xBjj@_)B8+&B0-{JSV%QZhL``w=T%WJNm*rV;wF2B27 zn`f6h?bzhf@U_cdehBiv7Asq^rGNh(*}W5g*?gFE*+PDH_{1f)(}VL1CN0s9@hyGy z??C+qmA_UXXU?^HI;S|E;m%>^1;$n-RW`pSzq;_!d!_YCxw%Pq8DkXZFw`94JfKd1 z`d7SsPVqaQO)90X7M_#*f%yE)V6W3xZ>f1sx9GmJRi160Md-$IE6}Y3qNH2NurQ(bF)rFU*2bBleS{>cRyu->C!fZ@HXrN35Cnv2Jbb zPQB%dD_-iYRLwD6*)BC}`JI=R*)^3Pw)ssCpB%LR(5*P7>n|qVGFh|J_nyY4-t}_V zt*-jtw4NDh_29tHmsxXWea~QeUno@*2LY<=UB$h_urkr z{jBv&|Mk|n*J6!7q}{#Row_;2{B_>E8{Tn7tNWi8dV6i|uTQqVwS1rbjOQkP=T^m} zrMYhrT>9dA(b+YYb|K5lL;jtp-!L;$zGd>vnf}W`-W31O@Q7_1d#+u69WW0uc)I$z JtaD0e0su^T$_xMi diff --git a/docs/html/structfplot__core_1_1qt__terminal-members.html b/docs/html/structfplot__core_1_1qt__terminal-members.html deleted file mode 100644 index 6f91bf1..0000000 --- a/docs/html/structfplot__core_1_1qt__terminal-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::qt_terminal Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1qt__terminal.html b/docs/html/structfplot__core_1_1qt__terminal.html deleted file mode 100644 index c615c38..0000000 --- a/docs/html/structfplot__core_1_1qt__terminal.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - -fplot: fplot_core::qt_terminal Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::qt_terminal Type Reference
    -
    -
    - -

    Defines a GNUPLOT QT terminal object. - More...

    -
    -Inheritance diagram for fplot_core::qt_terminal:
    -
    -
    - - -fplot_core::terminal -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_id_string qt_get_term_string
     Retrieves a GNUPLOT terminal identifier string.
     
    - Public Member Functions inherited from fplot_core::terminal
    procedure, public get_window_width term_get_window_width
     Gets the width of the plot window.
     
    procedure, public set_window_width term_set_window_width
     Sets the width of the plot window.
     
    procedure, public get_window_height term_get_window_height
     Gets the height of the plot window.
     
    procedure, public set_window_height term_set_window_height
     Sets the height of the plot window.
     
    procedure, public get_command_string term_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    procedure, public get_plot_window_number term_get_plot_window_number
     Gets the targeted plot window number.
     
    procedure, public set_plot_window_number term_set_plot_window_number
     Sets the targeted plot window number.
     
    procedure, public get_title term_get_title
     Gets the plot window's title.
     
    procedure, public set_title term_set_title
     Sets the plot window's title.
     
    procedure, public get_font_name term_get_font_name
     Gets the name of the font used for text displayed by the graph.
     
    procedure, public set_font_name term_set_font_name
     Sets the name of the font used for text displayed by the graph.
     
    procedure, public get_font_size term_get_font_size
     Gets the size of the font used by the graph.
     
    procedure, public set_font_size term_set_font_size
     Sets the size of the font used by the graph.
     
    - - - - -

    -Private Attributes

    character(len=2) m_id = "qt"
     The terminal ID string.
     
    - - - - - - - - - - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::terminal
    integer(int32) m_windowwidth = GNUPLOT_DEFAULT_WINDOW_WIDTH
     The window width, in pixels.
     
    integer(int32) m_termid = 0
     The plot window number.
     
    character(len=gnuplot_max_label_lengthm_title = ""
     The plot window title.
     
    logical m_hastitle = .false.
     Determines if a plot title is defined.
     
    character(len=gnuplot_max_label_lengthm_fontname = GNUPLOT_DEFAULT_FONTNAME
     The font used by the graph.
     
    integer(int32) m_fontsize = GNUPLOT_DEFAULT_FONT_SIZE
     The size of the font used by the graph.
     
    -

    Detailed Description

    -

    Defines a GNUPLOT QT terminal object.

    - -

    Definition at line 1464 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::qt_terminal::get_id_string
    -
    -virtual
    -
    - -

    Retrieves a GNUPLOT terminal identifier string.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(qt_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe qt_terminal object.
    -
    -
    -
    Returns
    The string.
    - -

    Implements fplot_core::terminal.

    - -

    Definition at line 1478 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_id

    - -
    -
    - - - - - -
    - - - - -
    character(len = 2) fplot_core::qt_terminal::m_id = "qt"
    -
    -private
    -
    - -

    The terminal ID string.

    - -

    Definition at line 1467 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1qt__terminal.js b/docs/html/structfplot__core_1_1qt__terminal.js deleted file mode 100644 index e3332b7..0000000 --- a/docs/html/structfplot__core_1_1qt__terminal.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1qt__terminal = -[ - [ "get_id_string", "structfplot__core_1_1qt__terminal.html#a2544ce4552975f086ec0f20ae702657d", null ], - [ "m_id", "structfplot__core_1_1qt__terminal.html#ae7f815fdba921412c5befb8778584079", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1qt__terminal.png b/docs/html/structfplot__core_1_1qt__terminal.png deleted file mode 100644 index df2e041948f03accb796c8258232147ac93214ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^9U#oX3?#Wzf)jw0bbwEY>;M1%fy@_gzLxeMT5e&W zSs*d}%!>yP9stEn&xS1l%5jzi`2{lo`CwqqH2Vqz12eOyi(^OyQ+P7|9yJwVMlvW-h^dXyP&i)gY&jovYChae8m>|N+;Tg#6xw3Dq`MW+9 z{~rghq&~=~VJ+m0XI1q4$fn}U>RBAwb-H+U(BAdaH9ZgcFV8bJ>kOJGnHIQr$A_ww zGj)F-xw5xs+6slbmvyF-GLK7NP~X4s^bUrUU)9_x^D1OdYe< zJo{MPhU`0eGrs1$I=F6SXVIp8H930>ziNDx^vKlt{@SDH{PN}dxSb}Y*Oa|VjQjIl zRg+6#(xQnDMdvCRm=7G^$9RB4j`c~IbW4iJ1nc7xDu)}6tYc&-ZD0^!gL7 zFsE4V;0cwV)$Blj1HJ!ML33?+ZjXxpPmRse_xVZ`^d5Q%OcJqY_6&Bs6f^D7r#q`c z-oH-uDoUJhcl6nhJ=Zq960!@ODCu@>0?7A1B3mOWe;d_pc%m$@zl7h(=$_4i z6DIlYR)767xmjiX$H)nn8rK=9RIWU}j>Gd`KGdam9jO%rQ-Y)pdZeWRqkqOs4Tm#6 zR~#;RUAYj~T4T3aIzB$$G3J=LFEK zBZV(MWa8Q7ueBD%Z;k#f@T8{yP0g&sa+S;}o3roSy!2M;{x|QeyL?|migunnlU?hY zJbm)l!_MCpzdY~Yb^Pb&LucL`$Y!5^#(eWKL+zxrZ`$k~Gdr1%oN+0i0QA&>{|o`L WT{oTA-KzxV5e83JKbLh*2~7ZjqmT&z diff --git a/docs/html/structfplot__core_1_1rainbow__colormap-members.html b/docs/html/structfplot__core_1_1rainbow__colormap-members.html deleted file mode 100644 index 97d7976..0000000 --- a/docs/html/structfplot__core_1_1rainbow__colormap-members.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::rainbow_colormap Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1rainbow__colormap.html b/docs/html/structfplot__core_1_1rainbow__colormap.html deleted file mode 100644 index 9bfba8b..0000000 --- a/docs/html/structfplot__core_1_1rainbow__colormap.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - -fplot: fplot_core::rainbow_colormap Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::rainbow_colormap Type Reference
    -
    -
    - -

    Defines a rainbow colormap. - More...

    -
    -Inheritance diagram for fplot_core::rainbow_colormap:
    -
    -
    - - -fplot_core::colormap -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_color_string rcm_get_clr
     Gets the GNUPLOT string defining the color distribution.
     
    - Public Member Functions inherited from fplot_core::colormap
    procedure, public get_command_string cm_get_cmd
     Gets the GNUPLOT command string to represent this colormap object.
     
    procedure, public get_label cm_get_label
     Gets the label to associate with the colorbar.
     
    procedure, public set_label cm_set_label
     Sets the label to associate with the colorbar.
     
    procedure, public get_horizontal cm_get_horizontal
     Gets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public set_horizontal cm_set_horizontal
     Sets a logical value determining if the colormap should be drawn horizontally and below the plot.
     
    procedure, public get_draw_border cm_get_draw_border
     Gets a logical value determining if the border should be drawn.
     
    procedure, public set_draw_border cm_set_draw_border
     Sets a logical value determining if the border should be drawn.
     
    procedure, public get_show_tics cm_get_show_tics
     Gets a logical value determining if the tic marks should be drawn.
     
    procedure, public set_show_tics cm_set_show_tics
     Sets a logical value determining if the tic marks should be drawn.
     
    - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::colormap
    logical m_horizontal = .false.
     The colormap should be drawn horizontally.
     
    logical m_drawborder = .true.
     Draw the colormap border.
     
    logical m_showtics = .true.
     Show the tic marks.
     
    -

    Detailed Description

    -

    Defines a rainbow colormap.

    - -

    Definition at line 2507 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_color_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::rainbow_colormap::get_color_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT string defining the color distribution.

    -
    Syntax
    character(len = :) function, allocatable get_color_string(class(rainbow_colormap) this)
    -
    -
    Parameters
    - - -
    [in]thisThe rainbow_colormap object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::colormap.

    - -

    Definition at line 2518 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1rainbow__colormap.js b/docs/html/structfplot__core_1_1rainbow__colormap.js deleted file mode 100644 index 4ee2675..0000000 --- a/docs/html/structfplot__core_1_1rainbow__colormap.js +++ /dev/null @@ -1,4 +0,0 @@ -var structfplot__core_1_1rainbow__colormap = -[ - [ "get_color_string", "structfplot__core_1_1rainbow__colormap.html#a3acc19f954331a6310d5eb3425519f75", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1rainbow__colormap.png b/docs/html/structfplot__core_1_1rainbow__colormap.png deleted file mode 100644 index 1b956d825ff693e23602d17e6ec22119bda3f70a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 967 zcmeAS@N?(olHy`uVBq!ia0vp^n}N84gBeK9F4tNQq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#Ns?JY5_^Dj46+z1!EUAmGL? z?`i!0|B>jeS}WGtmzGUWnKkdhAs!jcGxsJHpX+s;wqzMcy5}eLIjSe;%RZm7Z23JLdCm|wv5L46M6A5J{n#-Fp%Lqz$UrmuhTe3jS-S@%4jC(R6- z6TJOw=8ZS={=Kh!fBgBzmrbW0R@KZ(?2uV>`k_(qBr}U0=bOLpII!cKjg4vYl1b0< z?}kj=n_?K_tLrH(QyRB!hn1@5rAfUXFYSD_@_x*udygL9sr9qs*Q|fBr|@;z9C3A@ zN%xBWSKhOdzWu!N^v`R+!1)RcoJi$UMjO{jcW*YlGBNtqvDnnmN#88CoGX3)Z;|W` zQBSL$&6`#3o|}7a(wBUAY%VW8XStoVfuFzOSjL5)A2a-SIX+)rRD4O-%Ka|G4_+bz z1r%fn|CUV&N}h1$%q*ojXU_lyjE(Elo|~LJpI`X4cHL9?{<(9yr{vFFUlCJS7q(Y# z?R}K+*|dDl$`iAe-J4e&RXQVk#(J4~VXMFWH2rK-zxVOeU7=^({O|U>53#;pte5^? zwfkY@^0K(J^?sg4n^nL1?>-eDwRd*$NAHk>M{i6&cXv6TL{(ndJhi=<^IvOknHg`k zKDp{tWuex7i}SP7li%)nxv75M_Br?GJwM9(FTniNZ@Zl(wpWj8zCQNrdS$%1SbFl0 z#<0@IeMLEG&sgTe~DWM4ffoS)9 diff --git a/docs/html/structfplot__core_1_1scatter__plot__data-members.html b/docs/html/structfplot__core_1_1scatter__plot__data-members.html deleted file mode 100644 index de56eea..0000000 --- a/docs/html/structfplot__core_1_1scatter__plot__data-members.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::scatter_plot_data Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::scatter_plot_data, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_axes_stringspd_get_string_resultfplot_core::scatter_plot_datapure virtual
    get_color_indexpdc_get_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    get_command_stringspd_get_cmdfplot_core::scatter_plot_datavirtual
    get_countspd_get_int_valuefplot_core::scatter_plot_datapure virtual
    get_data_stringpd_get_string_resultfplot_core::plot_datapure virtual
    get_draw_linespd_get_draw_linefplot_core::scatter_plot_data
    get_draw_markersspd_get_draw_markersfplot_core::scatter_plot_data
    get_fill_curvespd_get_filledfplot_core::scatter_plot_data
    get_line_colorpdc_get_line_colorfplot_core::plot_data_colored
    get_line_stylespd_get_line_stylefplot_core::scatter_plot_data
    get_line_widthspd_get_line_widthfplot_core::scatter_plot_data
    get_marker_frequencyspd_get_marker_frequencyfplot_core::scatter_plot_data
    get_marker_scalingspd_get_marker_scalingfplot_core::scatter_plot_data
    get_marker_stylespd_get_marker_stylefplot_core::scatter_plot_data
    get_namepd_get_namefplot_core::plot_data
    get_simplification_factorspd_get_simplify_factorfplot_core::scatter_plot_data
    get_simplify_dataspd_get_simplify_datafplot_core::scatter_plot_data
    get_use_data_dependent_colorsspd_get_data_dependent_colorsfplot_core::scatter_plot_data
    get_use_variable_size_pointsspd_get_use_var_point_sizefplot_core::scatter_plot_data
    get_xspd_get_valuefplot_core::scatter_plot_datapure virtual
    get_yspd_get_valuefplot_core::scatter_plot_datapure virtual
    m_colorfplot_core::plot_data_coloredprivate
    m_colorindexfplot_core::plot_data_colored
    m_datadependentcolorsfplot_core::scatter_plot_data
    m_drawlinefplot_core::scatter_plot_dataprivate
    m_drawmarkersfplot_core::scatter_plot_data
    m_filledcurvefplot_core::scatter_plot_data
    m_linestylefplot_core::scatter_plot_data
    m_linewidthfplot_core::scatter_plot_data
    m_markerfrequencyfplot_core::scatter_plot_data
    m_markersizefplot_core::scatter_plot_data
    m_markertypefplot_core::scatter_plot_data
    m_namefplot_core::plot_dataprivate
    m_simplifydatafplot_core::scatter_plot_data
    m_simplifyfactorfplot_core::scatter_plot_data
    m_useautocolorfplot_core::plot_data_colored
    m_usevariablesizepointsfplot_core::scatter_plot_data
    set_color_indexpdc_set_color_index (defined in fplot_core::plot_data_colored)fplot_core::plot_data_coloredprivate
    set_draw_linespd_set_draw_linefplot_core::scatter_plot_data
    set_draw_markersspd_set_draw_markersfplot_core::scatter_plot_data
    set_fill_curvespd_set_filledfplot_core::scatter_plot_data
    set_line_colorpdc_set_line_colorfplot_core::plot_data_colored
    set_line_stylespd_set_line_stylefplot_core::scatter_plot_data
    set_line_widthspd_set_line_widthfplot_core::scatter_plot_data
    set_marker_frequencyspd_set_marker_frequencyfplot_core::scatter_plot_data
    set_marker_scalingspd_set_marker_scalingfplot_core::scatter_plot_data
    set_marker_stylespd_set_marker_stylefplot_core::scatter_plot_data
    set_namepd_set_namefplot_core::plot_data
    set_simplification_factorspd_set_simplify_factorfplot_core::scatter_plot_data
    set_simplify_dataspd_set_simplify_datafplot_core::scatter_plot_data
    set_use_data_dependent_colorsspd_set_data_dependent_colorsfplot_core::scatter_plot_data
    set_use_variable_size_pointsspd_set_use_var_point_sizefplot_core::scatter_plot_data
    set_xspd_set_valuefplot_core::scatter_plot_datapure virtual
    set_yspd_set_valuefplot_core::scatter_plot_datapure virtual
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1scatter__plot__data.html b/docs/html/structfplot__core_1_1scatter__plot__data.html deleted file mode 100644 index 7260b70..0000000 --- a/docs/html/structfplot__core_1_1scatter__plot__data.html +++ /dev/null @@ -1,1422 +0,0 @@ - - - - - - - -fplot: fplot_core::scatter_plot_data Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::scatter_plot_data Type Referenceabstract
    -
    -
    - -

    A plot_data object for describing scatter plot data sets. - More...

    -
    -Inheritance diagram for fplot_core::scatter_plot_data:
    -
    -
    - - -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object -fplot_core::plot_data_2d -fplot_core::plot_data_3d - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_command_string spd_get_cmd
     Gets the GNUPLOT command string to represent this scatter_plot_data object.
     
    procedure, public get_line_width spd_get_line_width
     Gets the width of the line, in pixels.
     
    procedure, public set_line_width spd_set_line_width
     Sets the width of the line, in pixels.
     
    procedure, public get_line_style spd_get_line_style
     Gets the line style.
     
    procedure, public set_line_style spd_set_line_style
     Sets the line style.
     
    procedure, public get_draw_line spd_get_draw_line
     Gets a value determining if a line should be drawn.
     
    procedure, public set_draw_line spd_set_draw_line
     Sets a value determining if a line should be drawn.
     
    procedure, public get_draw_markers spd_get_draw_markers
     Gets a value determining if data point markers should be drawn.
     
    procedure, public set_draw_markers spd_set_draw_markers
     Sets a value determining if data point markers should be drawn.
     
    procedure, public get_marker_style spd_get_marker_style
     Gets the marker style.
     
    procedure, public set_marker_style spd_set_marker_style
     Sets the marker style.
     
    procedure, public get_marker_scaling spd_get_marker_scaling
     Gets the marker scaling.
     
    procedure, public set_marker_scaling spd_set_marker_scaling
     Sets the marker scaling.
     
    procedure, public get_marker_frequency spd_get_marker_frequency
     Gets the marker frequency.
     
    procedure, public set_marker_frequency spd_set_marker_frequency
     Sets the marker frequency.
     
    procedure(spd_get_int_value), deferred, public get_count spd_get_int_value
     Gets the number of data points.
     
    procedure(spd_get_value), deferred, public get_x spd_get_value
     Gets the requested X data point.
     
    procedure(spd_set_value), deferred, public set_x spd_set_value
     Sets the requested X data point.
     
    procedure(spd_get_value), deferred, public get_y spd_get_value
     Gets the requested Y data point.
     
    procedure(spd_set_value), deferred, public set_y spd_set_value
     Sets the requested X data point.
     
    procedure(spd_get_string_result), deferred, public get_axes_string spd_get_string_result
     Gets the GNUPLOT command string defining which axes the data is to be plotted against.
     
    procedure, public get_simplify_data spd_get_simplify_data
     Gets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.
     
    procedure, public set_simplify_data spd_set_simplify_data
     Sets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.
     
    procedure, public get_simplification_factor spd_get_simplify_factor
     Gets a factor used to establish the simplification tolerance.
     
    procedure, public set_simplification_factor spd_set_simplify_factor
     Sets a factor used to establish the simplification tolerance. The tolerance is established by multplying this factor by the range of the dependent variable data.
     
    procedure, public get_use_data_dependent_colors spd_get_data_dependent_colors
     Gets a value determing if data-dependent colors should be used.
     
    procedure, public set_use_data_dependent_colors spd_set_data_dependent_colors
     Sets a value determing if data dependent colors should be used.
     
    procedure, public get_fill_curve spd_get_filled
     Gets a logical value determining if a filled curve should be drawn.
     
    procedure, public set_fill_curve spd_set_filled
     Sets a logical value determining if a filled curve should be drawn.
     
    procedure, public get_use_variable_size_points spd_get_use_var_point_size
     Gets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.
     
    procedure, public set_use_variable_size_points spd_set_use_var_point_size
     Sets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    procedure(pd_get_string_result), deferred, public get_data_string pd_get_string_result
     Gets the GNUPLOT command string containing the actual data to plot.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    logical m_drawmarkers = .false.
     Draw the markers?
     
    integer(int32) m_markerfrequency = 1
     Marker frequency.
     
    real(real32) m_linewidth = 1.0
     Line width.
     
    integer(int32) m_linestyle = LINE_SOLID
     Line style.
     
    integer(int32) m_markertype = MARKER_X
     Marker type.
     
    real(real32) m_markersize = 1.0
     Marker size multiplier.
     
    logical m_simplifydata = .true.
     True if large data sets should be simplified before sending to GNUPLOT.
     
    real(real64) m_simplifyfactor = 1.0d-3
     A scaling factor used to establish the simplification tolerance. The simplification tolerance is established by multiplying this factor by the range in the dependent variable data.
     
    logical m_datadependentcolors = .false.
     Determines if the data should utilize data-dependent colors.
     
    logical m_filledcurve = .false.
     Fill the curve?
     
    logical m_usevariablesizepoints = .false.
     Use variable size data points?
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - -

    -Private Attributes

    logical m_drawline = .true.
     Draw the line?
     
    -

    Detailed Description

    -

    A plot_data object for describing scatter plot data sets.

    - -

    Definition at line 3546 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_axes_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure(spd_get_string_result), deferred, public fplot_core::scatter_plot_data::get_axes_string
    -
    -pure virtual
    -
    - -

    Gets the GNUPLOT command string defining which axes the data is to be plotted against.

    - -

    Implemented in fplot_core::plot_data_2d, and fplot_core::plot_data_3d.

    - -

    Definition at line 3779 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this scatter_plot_data object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 3586 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_count()

    - -
    -
    - - - - - -
    - - - - -
    procedure(spd_get_int_value), deferred, public fplot_core::scatter_plot_data::get_count
    -
    -pure virtual
    -
    - -

    Gets the number of data points.

    - -

    Implemented in fplot_core::plot_data_2d, and fplot_core::plot_data_3d.

    - -

    Definition at line 3768 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_line()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_draw_line
    -
    - -

    Gets a value determining if a line should be drawn.

    -
    Syntax
    pure logical function get_draw_line(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    Returns true if the line should be drawn; else, false.
    - -

    Definition at line 3647 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_draw_markers()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_draw_markers
    -
    - -

    Gets a value determining if data point markers should be drawn.

    -
    Syntax
    pure logical function get_draw_markers(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    Returns true if the markers should be drawn; else, false.
    - -

    Definition at line 3668 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_fill_curve()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_fill_curve
    -
    - -

    Gets a logical value determining if a filled curve should be drawn.

    -
    Syntax
    logical function get_fill_curve(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    Returns true if the curve should be filled; else, false.
    - -

    Definition at line 3862 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_line_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_line_style
    -
    - -

    Gets the line style.

    -
    Syntax
    pure integer(int32) function get_line_style(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    The line style. The line style must be one of the following:
      -
    • LINE_DASHED
    • -
    • LINE_DASH_DOTTED
    • -
    • LINE_DASH_DOT_DOT
    • -
    • LINE_DOTTED
    • -
    • LINE_SOLID
    • -
    -
    - -

    Definition at line 3621 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_line_width
    -
    - -

    Gets the width of the line, in pixels.

    -
    Syntax
    pure real(real32) function get_line_width(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    The line width.
    - -

    Definition at line 3596 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_marker_frequency()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_marker_frequency
    -
    - -

    Gets the marker frequency.

    -
    Syntax
    pure integer(int32) function get_marker_frequency(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    The marker frequency.
    - -

    Definition at line 3756 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_marker_scaling()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_marker_scaling
    -
    - -

    Gets the marker scaling.

    -
    Syntax
    pure real(real32) function get_marker_scaling(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    The scaling factor.
    - -

    Definition at line 3736 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_marker_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_marker_style
    -
    - -

    Gets the marker style.

    -
    Syntax
    pure integer(int32) function get_marker_style(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    The marker type. The marker type must be one of the following:
      -
    • MARKER_ASTERISK
    • -
    • MARKER_EMPTY_CIRCLE
    • -
    • MARKER_EMPTY_NABLA
    • -
    • MARKER_EMPTY_RHOMBUS
    • -
    • MARKER_EMPTY_SQUARE
    • -
    • MARKER_EMPTY_TRIANGLE
    • -
    • MARKER_FILLED_CIRCLE
    • -
    • MARKER_FILLED_NABLA
    • -
    • MARKER_FILLED_RHOMBUS
    • -
    • MARKER_FILLED_SQUARE
    • -
    • MARKER_FILLED_TRIANGLE
    • -
    • MARKER_PLUS
    • -
    • MARKER_X
    • -
    -
    - -

    Definition at line 3702 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_simplification_factor()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_simplification_factor
    -
    - -

    Gets a factor used to establish the simplification tolerance.

    -
    Syntax
    pure real(real64) function get_simplification_factor(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    Returns the scaling factor.
    - -

    Definition at line 3813 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_simplify_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_simplify_data
    -
    - -

    Gets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.

    -
    Syntax
    pure logical function get_simplify_data(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    Returns true if the data should be simplified prior to sending to GNUPLOT; else, false to leave the data alone.
    - -

    Definition at line 3791 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_data_dependent_colors()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_use_data_dependent_colors
    -
    - -

    Gets a value determing if data-dependent colors should be used.

    -
    Syntax
    pure logical function get_use_data_dependent_colors(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    Returns true if data-dependent colors should be used; else, false.
    - -

    Definition at line 3837 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_variable_size_points()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::get_use_variable_size_points
    -
    - -

    Gets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.

    -
    Syntax
    pure logical function get_use_variable_size_points(class(scatter_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe scatter_plot_data object.
    -
    -
    -
    Returns
    True if variable size points should be used; else, false.
    - -

    Definition at line 3885 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x()

    - -
    -
    - - - - - -
    - - - - -
    procedure(spd_get_value), deferred, public fplot_core::scatter_plot_data::get_x
    -
    -pure virtual
    -
    - -

    Gets the requested X data point.

    - -

    Implemented in fplot_core::plot_data_2d, and fplot_core::plot_data_3d.

    - -

    Definition at line 3770 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y()

    - -
    -
    - - - - - -
    - - - - -
    procedure(spd_get_value), deferred, public fplot_core::scatter_plot_data::get_y
    -
    -pure virtual
    -
    - -

    Gets the requested Y data point.

    - -

    Implemented in fplot_core::plot_data_2d, and fplot_core::plot_data_3d.

    - -

    Definition at line 3774 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_line()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_draw_line
    -
    - -

    Sets a value determining if a line should be drawn.

    -
    Syntax
    subroutine set_draw_line(class(scatter_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xSet to true if the line should be drawn; else, false.
    -
    -
    - -

    Definition at line 3657 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_draw_markers()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_draw_markers
    -
    - -

    Sets a value determining if data point markers should be drawn.

    -
    Syntax
    subroutine set_draw_markers(class(scatter_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xSet to true if the markers should be drawn; else, false.
    -
    -
    - -

    Definition at line 3679 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_fill_curve()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_fill_curve
    -
    - -

    Sets a logical value determining if a filled curve should be drawn.

    -
    Syntax
    subroutine set_fill_curve(class(scatter_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]Setto true if the curve should be filled; else, false.
    -
    -
    - -

    Definition at line 3873 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_line_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_line_style
    -
    - -

    Sets the line style.

    -
    Syntax
    subroutine set_line_style(class(scatter_plot_data) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xThe line style. The line style must be one of the following:
      -
    • LINE_DASHED
    • -
    • LINE_DASH_DOTTED
    • -
    • LINE_DASH_DOT_DOT
    • -
    • LINE_DOTTED
    • -
    • LINE_SOLID
    • -
    -
    -
    -
    - -

    Definition at line 3637 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_line_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_line_width
    -
    - -

    Sets the width of the line, in pixels.

    -
    Syntax
    subroutine set_line_width(class(scatter_plot_data) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xThe line width.
    -
    -
    - -

    Definition at line 3606 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_marker_frequency()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_marker_frequency
    -
    - -

    Sets the marker frequency.

    -
    Syntax
    subroutine set_marker_frequency(class(scatter_plot_data) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xThe marker frequency.
    -
    -
    - -

    Definition at line 3766 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_marker_scaling()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_marker_scaling
    -
    - -

    Sets the marker scaling.

    -
    Syntax
    subroutine set_marker_scaling(class(scatter_plot_data) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xThe scaling factor.
    -
    -
    - -

    Definition at line 3746 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_marker_style()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_marker_style
    -
    - -

    Sets the marker style.

    -
    Syntax
    subroutine set_marker_style(class(scatter_plot_data) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xThe marker type. The marker type must be one of the following:
      -
    • MARKER_ASTERISK
    • -
    • MARKER_EMPTY_CIRCLE
    • -
    • MARKER_EMPTY_NABLA
    • -
    • MARKER_EMPTY_RHOMBUS
    • -
    • MARKER_EMPTY_SQUARE
    • -
    • MARKER_EMPTY_TRIANGLE
    • -
    • MARKER_FILLED_CIRCLE
    • -
    • MARKER_FILLED_NABLA
    • -
    • MARKER_FILLED_RHOMBUS
    • -
    • MARKER_FILLED_SQUARE
    • -
    • MARKER_FILLED_TRIANGLE
    • -
    • MARKER_PLUS
    • -
    • MARKER_X
    • -
    -
    -
    -
    - -

    Definition at line 3726 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_simplification_factor()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_simplification_factor
    -
    - -

    Sets a factor used to establish the simplification tolerance. The tolerance is established by multplying this factor by the range of the dependent variable data.

    -
    Syntax
    subroutine set_simplification_factor(class(scatter_plot_data) this, real(real64) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xThe scaling factor.
    -
    -
    - -

    Definition at line 3825 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_simplify_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_simplify_data
    -
    - -

    Sets a value determining if the stored data should be simplified (reduced) before passing to GNUPLOT.

    -
    Syntax
    subroutine set_simplify_data(class(scatter_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xTrue if the data should be simplified prior to sending to GNUPLOT; else, false to leave the data alone.
    -
    -
    - -

    Definition at line 3803 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_data_dependent_colors()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_use_data_dependent_colors
    -
    - -

    Sets a value determing if data dependent colors should be used.

    -
    Syntax
    subroutine set_use_data_dependent_colors(class(scatter_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe scatter_plot_data object.
    [in]xTrue if data-dependent colors should be used; else, false.
    -
    -
    - -

    Definition at line 3850 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_variable_size_points()

    - -
    -
    - - - - -
    procedure, public fplot_core::scatter_plot_data::set_use_variable_size_points
    -
    - -

    Sets a logical value determining if variable sized data points should be used. The default is false, such that points will be of a constant size.

    -
    Syntax
    subroutine set_use_variable_size_points(class(scatter_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in]thisThe scatter_plot_data object.
    [in]xTrue if variable size points should be used; else, false.
    -
    -
    - -

    Definition at line 3898 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_x()

    - -
    -
    - - - - - -
    - - - - -
    procedure(spd_set_value), deferred, public fplot_core::scatter_plot_data::set_x
    -
    -pure virtual
    -
    - -

    Sets the requested X data point.

    - -

    Implemented in fplot_core::plot_data_2d, and fplot_core::plot_data_3d.

    - -

    Definition at line 3772 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_y()

    - -
    -
    - - - - - -
    - - - - -
    procedure(spd_set_value), deferred, public fplot_core::scatter_plot_data::set_y
    -
    -pure virtual
    -
    - -

    Sets the requested X data point.

    - -

    Implemented in fplot_core::plot_data_2d, and fplot_core::plot_data_3d.

    - -

    Definition at line 3776 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_datadependentcolors

    - -
    -
    - - - - -
    logical fplot_core::scatter_plot_data::m_datadependentcolors = .false.
    -
    - -

    Determines if the data should utilize data-dependent colors.

    - -

    Definition at line 3570 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_drawline

    - -
    -
    - - - - - -
    - - - - -
    logical fplot_core::scatter_plot_data::m_drawline = .true.
    -
    -private
    -
    - -

    Draw the line?

    - -

    Definition at line 3549 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_drawmarkers

    - -
    -
    - - - - -
    logical fplot_core::scatter_plot_data::m_drawmarkers = .false.
    -
    - -

    Draw the markers?

    - -

    Definition at line 3551 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_filledcurve

    - -
    -
    - - - - -
    logical fplot_core::scatter_plot_data::m_filledcurve = .false.
    -
    - -

    Fill the curve?

    - -

    Definition at line 3572 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_linestyle

    - -
    -
    - - - - -
    integer(int32) fplot_core::scatter_plot_data::m_linestyle = LINE_SOLID
    -
    - -

    Line style.

    - -

    Definition at line 3557 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_linewidth

    - -
    -
    - - - - -
    real(real32) fplot_core::scatter_plot_data::m_linewidth = 1.0
    -
    - -

    Line width.

    - -

    Definition at line 3555 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_markerfrequency

    - -
    -
    - - - - -
    integer(int32) fplot_core::scatter_plot_data::m_markerfrequency = 1
    -
    - -

    Marker frequency.

    - -

    Definition at line 3553 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_markersize

    - -
    -
    - - - - -
    real(real32) fplot_core::scatter_plot_data::m_markersize = 1.0
    -
    - -

    Marker size multiplier.

    - -

    Definition at line 3561 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_markertype

    - -
    -
    - - - - -
    integer(int32) fplot_core::scatter_plot_data::m_markertype = MARKER_X
    -
    - -

    Marker type.

    - -

    Definition at line 3559 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_simplifydata

    - -
    -
    - - - - -
    logical fplot_core::scatter_plot_data::m_simplifydata = .true.
    -
    - -

    True if large data sets should be simplified before sending to GNUPLOT.

    - -

    Definition at line 3564 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_simplifyfactor

    - -
    -
    - - - - -
    real(real64) fplot_core::scatter_plot_data::m_simplifyfactor = 1.0d-3
    -
    - -

    A scaling factor used to establish the simplification tolerance. The simplification tolerance is established by multiplying this factor by the range in the dependent variable data.

    - -

    Definition at line 3568 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_usevariablesizepoints

    - -
    -
    - - - - -
    logical fplot_core::scatter_plot_data::m_usevariablesizepoints = .false.
    -
    - -

    Use variable size data points?

    - -

    Definition at line 3574 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1scatter__plot__data.js b/docs/html/structfplot__core_1_1scatter__plot__data.js deleted file mode 100644 index fb1f21a..0000000 --- a/docs/html/structfplot__core_1_1scatter__plot__data.js +++ /dev/null @@ -1,46 +0,0 @@ -var structfplot__core_1_1scatter__plot__data = -[ - [ "get_axes_string", "structfplot__core_1_1scatter__plot__data.html#a7ab0b579124a815634cbdcac8c81dde0", null ], - [ "get_command_string", "structfplot__core_1_1scatter__plot__data.html#a38752353ad9e2129840b07df8836e400", null ], - [ "get_count", "structfplot__core_1_1scatter__plot__data.html#af220d3b0ebfaba65fb9c2b9326d39d0f", null ], - [ "get_draw_line", "structfplot__core_1_1scatter__plot__data.html#a5f8e8427299c380b69eef4207fdac6fd", null ], - [ "get_draw_markers", "structfplot__core_1_1scatter__plot__data.html#aa78996b052703cd440b579a3f19c0323", null ], - [ "get_fill_curve", "structfplot__core_1_1scatter__plot__data.html#a574f1a94ca7ad3fbb1a1da445a50cbee", null ], - [ "get_line_style", "structfplot__core_1_1scatter__plot__data.html#a207dc9773f6dd173799dd607c4e321b6", null ], - [ "get_line_width", "structfplot__core_1_1scatter__plot__data.html#acfab9f133dae8af4eee2a0151d3cb8e7", null ], - [ "get_marker_frequency", "structfplot__core_1_1scatter__plot__data.html#abecca27ba9033242c9cb76692bb8d9ec", null ], - [ "get_marker_scaling", "structfplot__core_1_1scatter__plot__data.html#a3a09033deefd1c5d3157dff1a0b4c05d", null ], - [ "get_marker_style", "structfplot__core_1_1scatter__plot__data.html#af7386b5c9cecb7c57e619185f0284ee6", null ], - [ "get_simplification_factor", "structfplot__core_1_1scatter__plot__data.html#a9e1b45badadfa1bda1b20ea8d9a2f1fe", null ], - [ "get_simplify_data", "structfplot__core_1_1scatter__plot__data.html#a0d0755bca68c8c758bc7f5ab880f65e3", null ], - [ "get_use_data_dependent_colors", "structfplot__core_1_1scatter__plot__data.html#a65e5e58525b877b9bfd4873dc7b2e9e4", null ], - [ "get_use_variable_size_points", "structfplot__core_1_1scatter__plot__data.html#ae7263aa5d4f1fb5fdd8941a7c69a19a3", null ], - [ "get_x", "structfplot__core_1_1scatter__plot__data.html#a12a4a9e221cd17546332eab66ee3587f", null ], - [ "get_y", "structfplot__core_1_1scatter__plot__data.html#a593db6ad20d55e9f6240d66713352a26", null ], - [ "set_draw_line", "structfplot__core_1_1scatter__plot__data.html#a4219776e9fb097422c3ec43122f031fb", null ], - [ "set_draw_markers", "structfplot__core_1_1scatter__plot__data.html#a2d478600f6026a7515f89cb156896654", null ], - [ "set_fill_curve", "structfplot__core_1_1scatter__plot__data.html#a6305c7c347d54e042186e197e63d4572", null ], - [ "set_line_style", "structfplot__core_1_1scatter__plot__data.html#ab03c2603a873c9065c83650ac7b59577", null ], - [ "set_line_width", "structfplot__core_1_1scatter__plot__data.html#ad2169acc049adff557adfa5a7da7a047", null ], - [ "set_marker_frequency", "structfplot__core_1_1scatter__plot__data.html#afbe660fce6672bf6dc20f3f594a14361", null ], - [ "set_marker_scaling", "structfplot__core_1_1scatter__plot__data.html#afc01fb76af6a0a422b9a9f8571959e88", null ], - [ "set_marker_style", "structfplot__core_1_1scatter__plot__data.html#a149b23714fce0691b4131c7701ff6166", null ], - [ "set_simplification_factor", "structfplot__core_1_1scatter__plot__data.html#a8a4056fe6969456124db007f962b9c7b", null ], - [ "set_simplify_data", "structfplot__core_1_1scatter__plot__data.html#a1fd9079ccba6a8227501584208f2991e", null ], - [ "set_use_data_dependent_colors", "structfplot__core_1_1scatter__plot__data.html#a9ea43c66bf884fc5380dc82b178e2634", null ], - [ "set_use_variable_size_points", "structfplot__core_1_1scatter__plot__data.html#a4b8720c814de24f0a8c54de333f6b192", null ], - [ "set_x", "structfplot__core_1_1scatter__plot__data.html#a767bed829c0dc83b2b265910b3834608", null ], - [ "set_y", "structfplot__core_1_1scatter__plot__data.html#a313f4dd3f4a4596772901c0cfbf15a97", null ], - [ "m_datadependentcolors", "structfplot__core_1_1scatter__plot__data.html#a5177e61ef1056be4a7be88c85d129554", null ], - [ "m_drawline", "structfplot__core_1_1scatter__plot__data.html#a06df1b2ace5394328f5cc69c56aae2fe", null ], - [ "m_drawmarkers", "structfplot__core_1_1scatter__plot__data.html#ab22889699bb2ac1e437760ae3053e61f", null ], - [ "m_filledcurve", "structfplot__core_1_1scatter__plot__data.html#ae502a1cb64b81989b2ae30e0498fb2a3", null ], - [ "m_linestyle", "structfplot__core_1_1scatter__plot__data.html#ad6526edc0a71a3f3a52c90ba6bf2a7b4", null ], - [ "m_linewidth", "structfplot__core_1_1scatter__plot__data.html#a5f0a764e897869a8b40e5572cf643eff", null ], - [ "m_markerfrequency", "structfplot__core_1_1scatter__plot__data.html#afd73c87e0c8333d8e2af840d73aa5467", null ], - [ "m_markersize", "structfplot__core_1_1scatter__plot__data.html#ac32e05719b497dca629b92ccaa2bc40a", null ], - [ "m_markertype", "structfplot__core_1_1scatter__plot__data.html#a5cf90a01f00ed353e00df87c099999ce", null ], - [ "m_simplifydata", "structfplot__core_1_1scatter__plot__data.html#a98d9bfb493e1dae5462ac95979fbcbb4", null ], - [ "m_simplifyfactor", "structfplot__core_1_1scatter__plot__data.html#a307b01a8a110ab7a676ac51c05d3074b", null ], - [ "m_usevariablesizepoints", "structfplot__core_1_1scatter__plot__data.html#a720cc3f633f78c871e76ea19b34fe6da", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1scatter__plot__data.png b/docs/html/structfplot__core_1_1scatter__plot__data.png deleted file mode 100644 index bf8b23ef48667bda32131b5a6044839024012a7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2107 zcmb_de^ioJ82;2nTTYK$kEh{pu z$R9ZcA<0UahCyVdvqCrVld=h)*CA&(o?Hck{A3ER?w2WHOoI$hekzs*SsOlUv%V zvPUCowc31+l10^+WA9`T@DYG{|NB5&vU>qwaXS|C36W+oQ9hR5=wtU5JN#UT#&pjW z_W7iq)qUvQ3(MDb?%RNA+?Z?OALLfM=AFC(0%CMCMu;F4QLs1cK-L$|{0*ILq)4<( zjQ$4OgB%YP+a#Y1>A7^4?>I0O6dBU<)mEVIzl@S9^Bp%S;&^QKKxFF-gaA|I{>ZQ_ul)7>6eJw zf-DkihDL{w3jJ>W(_N48gW@eH{vMLCX9K>T%#s|hD@9m`yJJ^WlUW-V^4r`55rRLq z11we*TL%Do?{FKnI{kPOV6^}`GGeT9D(YaHmi`E=sCJMB60JThq5#(6HhZ1<78^0B zyrXrnYj)uO3+@g47s`2mQl5-s9PaeG;^pT`}szGL#}7t zWLu#!f**8to)*lk@)gccD6k&>&c8EeniKd z;V3&=uU%~xO<$Ah9gNF{!~Bd<*q)GA`}hdI?!%GIs@m{l!95NQyBL}Ku|w-g<@GR{ zbf*x(@cl>L2f*5rbSJ=a)0&lez%PkrvEO;IOaZ_az^Ty|n0|{{^y{kMnCSmm8tGS@ z#Ea`K(!ws1ll*MM_aq5cREzq^?ii{-NG^iNNy0Q+P$u?uxFYOpp1mM$mG)6HujVcR zzimB1$;-v(ddW~cwuf+cziJytXOtxR72{R0C%)|MzCHE9M2S+Zq{a`)uK;UGuu)ke zL-HlWivxR?lh{66IkMyjBiEDT60Xnay``UA;8&>BgOMo|!J!?)+{gnQI@x&!KH4;o zp+>{o7kxo2hJnr36hu{YiTe}!J=l#c*sjEWy(p!jL@|Y{l~H)q*t&fS>)H!keVA9htGg zZk1|6up3-0_4Qa#*zRyfQ1MLyJ^oQ+S(U@x?}!$GE0u-}GY_gRh`S@1kkfo1Z)|KjTF*p30p64jM)(2T?h#gC~_?A%gj4UpOR2$R5j} z(GJ?Jd#`-`@BLIP=IN$9>c?!Xb@t4&py_T`;kmen(Ej^nHQd?zL~Q@i87Ngbi(H*@ zC}qf~ALvbpW=3nH$G4D-rUbJi;oWtmHJbH*Z - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::surface_plot Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::surface_plot, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_allplt_clear_allfplot_core::plot
    clear_all_labelsplt_clear_labelsfplot_core::plot
    clear_arrowsplt_clear_arrowsfplot_core::plot
    drawplt_drawfplot_core::plot
    free_resourcesplt_clean_upfplot_core::plot
    getplt_getfplot_core::plot
    get_allow_smoothingsurf_get_smoothfplot_core::surface_plot
    get_arrowplt_get_arrowfplot_core::plot
    get_arrow_countplt_get_arrow_countfplot_core::plot
    get_axis_equalplt_get_axis_equalfplot_core::plot
    get_azimuthp3d_get_azimuthfplot_core::plot_3d
    get_colormapplt_get_colormapfplot_core::plot
    get_command_stringsurf_get_cmdfplot_core::surface_plotvirtual
    get_coordinate_systemp3d_get_csysfplot_core::plot_3d
    get_countplt_get_countfplot_core::plot
    get_draw_borderplt_get_draw_borderfplot_core::plot
    get_elevationp3d_get_elevationfplot_core::plot_3d
    get_font_nameplt_get_fontfplot_core::plot
    get_font_sizeplt_get_font_sizefplot_core::plot
    get_labelplt_get_labelfplot_core::plot
    get_label_countplt_get_label_countfplot_core::plot
    get_legendplt_get_legendfplot_core::plot
    get_light_intensitysurf_get_light_intensityfplot_core::surface_plot
    get_show_colorbarplt_get_show_colorbarfplot_core::plot
    get_show_contourssurf_get_show_contoursfplot_core::surface_plot
    get_show_gridlinesplt_get_show_gridfplot_core::plot
    get_show_hiddensurf_get_show_hiddenfplot_core::surface_plot
    get_specular_intensitysurf_get_specular_intensityfplot_core::surface_plot
    get_terminalplt_get_termfplot_core::plot
    get_tics_inwardplt_get_tics_infplot_core::plot
    get_titleplt_get_titlefplot_core::plot
    get_transparencysurf_get_transparencyfplot_core::surface_plot
    get_use_lightingsurf_get_use_lightingfplot_core::surface_plot
    get_use_map_viewp3d_get_use_map_viewfplot_core::plot_3d
    get_x_axisp3d_get_x_axisfplot_core::plot_3d
    get_y_axisp3d_get_y_axisfplot_core::plot_3d
    get_z_axisp3d_get_z_axisfplot_core::plot_3d
    get_z_intersect_xyp3d_get_z_axis_intersectfplot_core::plot_3d
    initializesurf_initfplot_core::surface_plot
    is_title_definedplt_has_titlefplot_core::plot
    m_arrowsfplot_core::plot
    m_axisequalfplot_core::plot
    m_azimuthfplot_core::plot_3d
    m_colorindexfplot_core::plot
    m_colormapfplot_core::plot
    m_contourfplot_core::surface_plot
    m_csysfplot_core::plot_3d
    m_datafplot_core::plot
    m_drawborderfplot_core::plot
    m_elevationfplot_core::plot_3d
    m_hastitlefplot_core::plot
    m_labelsfplot_core::plot
    m_legendfplot_core::plot
    m_lightintensityfplot_core::surface_plot
    m_setmapfplot_core::plot_3d
    m_showcolorbarfplot_core::plot
    m_showgridfplot_core::plot
    m_showhiddenfplot_core::surface_plotprivate
    m_smoothfplot_core::surface_plot
    m_specularfplot_core::surface_plot
    m_terminalfplot_core::plot
    m_ticsinfplot_core::plot
    m_titlefplot_core::plotprivate
    m_transparencyfplot_core::surface_plot
    m_uselightingfplot_core::surface_plot
    m_xaxisfplot_core::plot_3dprivate
    m_yaxisfplot_core::plot_3d
    m_zaxisfplot_core::plot_3d
    m_zintersectfplot_core::plot_3d
    p3d_clean_upp3d_clean_upfplot_core::plot_3d
    popplt_pop_datafplot_core::plot
    pop_arrowplt_pop_arrowfplot_core::plot
    pop_labelplt_pop_labelfplot_core::plot
    pushplt_push_datafplot_core::plot
    push_arrowplt_push_arrowfplot_core::plot
    push_labelplt_push_labelfplot_core::plot
    save_fileplt_savefplot_core::plot
    setplt_setfplot_core::plot
    set_allow_smoothingsurf_set_smoothfplot_core::surface_plot
    set_arrowplt_set_arrowfplot_core::plot
    set_axis_equalplt_set_axis_equalfplot_core::plot
    set_azimuthp3d_set_azimuthfplot_core::plot_3d
    set_colormapplt_set_colormapfplot_core::plot
    set_coordinate_systemp3d_set_csysfplot_core::plot_3d
    set_draw_borderplt_set_draw_borderfplot_core::plot
    set_elevationp3d_set_elevationfplot_core::plot_3d
    set_font_nameplt_set_fontfplot_core::plot
    set_font_sizeplt_set_font_sizefplot_core::plot
    set_labelplt_set_labelfplot_core::plot
    set_light_intensitysurf_set_light_intensityfplot_core::surface_plot
    set_show_colorbarplt_set_show_colorbarfplot_core::plot
    set_show_contourssurf_set_show_contoursfplot_core::surface_plot
    set_show_gridlinesplt_set_show_gridfplot_core::plot
    set_show_hiddensurf_set_show_hiddenfplot_core::surface_plot
    set_specular_intensitysurf_set_specular_intensityfplot_core::surface_plot
    set_tics_inwardplt_set_tics_infplot_core::plot
    set_titleplt_set_titlefplot_core::plot
    set_transparencysurf_set_transparencyfplot_core::surface_plot
    set_use_lightingsurf_set_use_lightingfplot_core::surface_plot
    set_use_map_viewp3d_set_use_map_viewfplot_core::plot_3d
    set_z_intersect_xyp3d_set_z_axis_intersectfplot_core::plot_3d
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1surface__plot.html b/docs/html/structfplot__core_1_1surface__plot.html deleted file mode 100644 index 655b70f..0000000 --- a/docs/html/structfplot__core_1_1surface__plot.html +++ /dev/null @@ -1,1050 +0,0 @@ - - - - - - - -fplot: fplot_core::surface_plot Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::surface_plot Type Reference
    -
    -
    - -

    A plot object defining a 3D surface plot. - More...

    -
    -Inheritance diagram for fplot_core::surface_plot:
    -
    -
    - - -fplot_core::plot_3d -fplot_core::plot -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public initialize surf_init
     Cleans up resources held by the surface_plot object.
     
    procedure, public get_show_hidden surf_get_show_hidden
     Gets a value indicating if hidden lines should be shown.
     
    procedure, public set_show_hidden surf_set_show_hidden
     Sets a value indicating if hidden lines should be shown.
     
    procedure, public get_command_string surf_get_cmd
     Gets the GNUPLOT command string to represent this plot_3d object.
     
    procedure, public get_allow_smoothing surf_get_smooth
     Gets a value determining if the plotted surfaces should be smoothed.
     
    procedure, public set_allow_smoothing surf_set_smooth
     Sets a value determining if the plotted surfaces should be smoothed.
     
    procedure, public get_show_contours surf_get_show_contours
     Gets a value determining if a contour plot should be drawn in conjunction with the surface plot.
     
    procedure, public set_show_contours surf_set_show_contours
     Sets a value determining if a contour plot should be drawn in conjunction with the surface plot.
     
    procedure, public get_use_lighting surf_get_use_lighting
     Gets a value indicating if lighting, beyond the ambient light source, is to be used.
     
    procedure, public set_use_lighting surf_set_use_lighting
     Sets a value indicating if lighting, beyond the ambient light source, is to be used.
     
    procedure, public get_light_intensity surf_get_light_intensity
     Gets the ratio of the strength of the light source relative to the ambient light.
     
    procedure, public set_light_intensity surf_set_light_intensity
     Sets the ratio of the strength of the light source relative to the ambient light.
     
    procedure, public get_specular_intensity surf_get_specular_intensity
     Gets the ratio of the strength of the specular light source relative to the ambient light.
     
    procedure, public set_specular_intensity surf_set_specular_intensity
     Sets the ratio of the strength of the specular light source relative to the ambient light.
     
    procedure, public get_transparency surf_get_transparency
     Gets a factor defining the transparency of plotted surfaces.
     
    procedure, public set_transparency surf_set_transparency
     Sets a factor defining the transparency of plotted surfaces.
     
    - Public Member Functions inherited from fplot_core::plot_3d
    final p3d_clean_up p3d_clean_up
     Cleans up resources held by the plot_3d object.
     
    procedure, public initialize p3d_init
     Initializes the plot_3d object.
     
    procedure, public get_x_axis p3d_get_x_axis
     Gets the x-axis object.
     
    procedure, public get_y_axis p3d_get_y_axis
     Gets the y-axis object.
     
    procedure, public get_z_axis p3d_get_z_axis
     Gets the z-axis object.
     
    procedure, public get_elevation p3d_get_elevation
     Gets the plot elevation angle.
     
    procedure, public set_elevation p3d_set_elevation
     Sets the plot elevation angle.
     
    procedure, public get_azimuth p3d_get_azimuth
     Gets the plot azimuth angle.
     
    procedure, public set_azimuth p3d_set_azimuth
     Sets the plot azimuth angle.
     
    procedure, public get_z_intersect_xy p3d_get_z_axis_intersect
     Gets a value determining if the z-axis should intersect the x-y plane.
     
    procedure, public set_z_intersect_xy p3d_set_z_axis_intersect
     Sets a value determining if the z-axis should intersect the x-y plane.
     
    procedure, public get_use_map_view p3d_get_use_map_view
     Gets a value determining if the view should be set to a 2D map view. If true, the azimuth and elevation terms are ignored.
     
    procedure, public set_use_map_view p3d_set_use_map_view
     Sets a value determining if the view should be set to a 2D map view. If true, the azimuth and elevation terms are ignored.
     
    procedure, public get_coordinate_system p3d_get_csys
     Gets a value determining the coordinate system.
     
    procedure, public set_coordinate_system p3d_set_csys
     Sets a value determining the coordinate system.
     
    - Public Member Functions inherited from fplot_core::plot
    procedure, public free_resources plt_clean_up
     Cleans up resources held by the plot object. Inheriting classes are expected to call this routine to free internally held resources.
     
    procedure, public initialize plt_init
     Initializes the plot object.
     
    procedure, public get_title plt_get_title
     Gets the plot's title.
     
    procedure, public set_title plt_set_title
     Sets the plot's title.
     
    procedure, public is_title_defined plt_has_title
     Gets a value determining if a title has been defined for the plot object.
     
    procedure, public get_legend plt_get_legend
     Gets the plot's legend object.
     
    procedure, public get_count plt_get_count
     Gets the number of stored plot_data objects.
     
    procedure, public push plt_push_data
     Pushes a plot_data object onto the stack.
     
    procedure, public pop plt_pop_data
     Pops the last plot_data object from the stack.
     
    procedure, public clear_all plt_clear_all
     Removes all plot_data objects from the plot.
     
    procedure, public get plt_get
     Gets a pointer to the requested plot_data object.
     
    procedure, public set plt_set
     Sets the requested plot_data object into the plot.
     
    procedure, public get_terminal plt_get_term
     Gets the GNUPLOT terminal object.
     
    procedure, public get_show_gridlines plt_get_show_grid
     Gets a flag determining if the grid lines should be shown.
     
    procedure, public set_show_gridlines plt_set_show_grid
     Sets a flag determining if the grid lines should be shown.
     
    procedure, public draw plt_draw
     Launches GNUPLOT and draws the plot per the current state of the command list.
     
    procedure, public save_file plt_save
     Saves a GNUPLOT command file.
     
    procedure, public get_font_name plt_get_font
     Gets the name of the font used for plot text.
     
    procedure, public set_font_name plt_set_font
     Sets the name of the font used for plot text.
     
    procedure, public get_font_size plt_get_font_size
     Gets the size of the font used by the plot.
     
    procedure, public set_font_size plt_set_font_size
     Sets the size of the font used by the plot.
     
    procedure, public get_tics_inward plt_get_tics_in
     Gets a value determining if the axis tic marks should point inwards.
     
    procedure, public set_tics_inward plt_set_tics_in
     Sets a value determining if the axis tic marks should point inwards.
     
    procedure, public get_draw_border plt_get_draw_border
     Gets a value determining if the border should be drawn.
     
    procedure, public set_draw_border plt_set_draw_border
     Sets a value determining if the border should be drawn.
     
    procedure, public push_label plt_push_label
     Adds a label to the plot.
     
    procedure, public pop_label plt_pop_label
     Removes the last label from the plot.
     
    procedure, public get_label plt_get_label
     Gets the requested plot_label from the plot.
     
    procedure, public set_label plt_set_label
     Sets the specified plot_label object.
     
    procedure, public get_label_count plt_get_label_count
     Gets the number of plot_label objects belonging to the plot.
     
    procedure, public clear_all_labels plt_clear_labels
     Clears all plot_label objects from the plot.
     
    procedure, public get_axis_equal plt_get_axis_equal
     Gets a flag determining if the axes should be equally scaled.
     
    procedure, public set_axis_equal plt_set_axis_equal
     Sets a flag determining if the axes should be equally scaled.
     
    procedure, public get_colormap plt_get_colormap
     Gets a pointer to the colormap object.
     
    procedure, public set_colormap plt_set_colormap
     Sets the colormap object.
     
    procedure, public get_show_colorbar plt_get_show_colorbar
     Gets a value determining if the colorbar should be shown.
     
    procedure, public set_show_colorbar plt_set_show_colorbar
     Sets a value determining if the colorbar should be shown.
     
    procedure, public push_arrow plt_push_arrow
     Pushes a new plot_arrow object onto the plot.
     
    procedure, public pop_arrow plt_pop_arrow
     Pops a plot_arrow object from the plot.
     
    procedure, public get_arrow plt_get_arrow
     Gets a pointer to the requested plot_arrow object.
     
    procedure, public set_arrow plt_set_arrow
     Sets a plot_arrow into the plot.
     
    procedure, public get_arrow_count plt_get_arrow_count
     Gets the number of plot_arrow objects held by the plot object.
     
    procedure, public clear_arrows plt_clear_arrows
     Clears all plot_arrow objects from the plot.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    logical m_smooth = .true.
     The colormap.
     
    logical m_contour = .false.
     Show a contour plot as well as the surface plot?
     
    logical m_uselighting = .false.
     Use lighting?
     
    real(real32) m_lightintensity = 0.5
     Lighting intensity (0 - 1) - default is 0.5.
     
    real(real32) m_specular = 0.5
     Specular highlight intensity (0 - 1)
     
    real(real32) m_transparency = 1.0
     Defines the translucency value. Must exist on (0, 1].
     
    - Public Attributes inherited from fplot_core::plot_3d
    type(y_axis), pointer m_yaxis => null()
     The y-axis.
     
    type(z_axis), pointer m_zaxis => null()
     The z-axis.
     
    real(real64) m_elevation = 60.0d0
     The elevation angle.
     
    real(real64) m_azimuth = 30.0d0
     The azimuth.
     
    logical m_zintersect = .true.
     Z-axis intersect X-Y plane?
     
    logical m_setmap = .false.
     Set map projection.
     
    integer(int32) m_csys = COORDINATES_CARTESIAN
     Plot coordinate system.
     
    - Public Attributes inherited from fplot_core::plot
    logical m_hastitle = .false.
     Has a title?
     
    class(terminal), pointer m_terminal => null()
     The GNUPLOT terminal object to target.
     
    type(list) m_data
     A collection of plot_data items to plot.
     
    type(legend), pointer m_legend => null()
     The legend.
     
    logical m_showgrid = .true.
     Show grid lines?
     
    logical m_ticsin = .true.
     Point tic marks in?
     
    logical m_drawborder = .true.
     Draw the border?
     
    type(list) m_labels
     A collection of plot_label items to draw.
     
    integer(int32) m_colorindex = 1
     The color index to use for automatic line coloring for scatter plots.
     
    logical m_axisequal = .false.
     Determines if the axes should be scaled proportionally.
     
    class(colormap), pointer m_colormap
     The colormap.
     
    logical m_showcolorbar = .true.
     Show the colorbar?
     
    type(list) m_arrows
     A collection of plot_arrow items to draw.
     
    - - - - -

    -Private Attributes

    logical m_showhidden = .false.
     Show hidden lines.
     
    -

    Detailed Description

    -

    A plot object defining a 3D surface plot.

    - -

    Definition at line 5323 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_allow_smoothing()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::get_allow_smoothing
    -
    - -

    Gets a value determining if the plotted surfaces should be smoothed.

    -
    Syntax
    pure logical function get_allow_smoothing(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    Returns true if the surface should be smoothed; else, false.
    - -

    Definition at line 5413 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::surface_plot::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this plot_3d object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    The command string.
    - -

    Reimplemented from fplot_core::plot_3d.

    - -

    Definition at line 5402 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_light_intensity()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::get_light_intensity
    -
    - -

    Gets the ratio of the strength of the light source relative to the ambient light.

    -
    Syntax
    pure real(real32) function get_light_intensity(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    The light intensity ratio.
    - -

    Definition at line 5481 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_show_contours()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::get_show_contours
    -
    - -

    Gets a value determining if a contour plot should be drawn in conjunction with the surface plot.

    -
    Syntax
    pure logical function get_show_contours(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    Returns true if the contour plot should be drawn; else, false to only draw the surface.
    - -

    Definition at line 5436 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_show_hidden()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::get_show_hidden
    -
    - -

    Gets a value indicating if hidden lines should be shown.

    -
    Syntax
    pure logical function get_show_hidden(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    Returns true if hidden lines should be shown; else, false.
    - -

    Definition at line 5381 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_specular_intensity()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::get_specular_intensity
    -
    - -

    Gets the ratio of the strength of the specular light source relative to the ambient light.

    -
    Syntax
    pure real(real32) function get_specular_intensity(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    The specular light intensity ratio.
    - -

    Definition at line 5504 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_transparency()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::get_transparency
    -
    - -

    Gets a factor defining the transparency of plotted surfaces.

    -
    Syntax
    pure real(real32) function get_transparency(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    A value existing on the set (0 1] defining the level of transparency. A value of 1 indicates a fully opaque surface.
    - -

    Definition at line 5528 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_lighting()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::get_use_lighting
    -
    - -

    Gets a value indicating if lighting, beyond the ambient light source, is to be used.

    -
    Syntax
    pure logical function get_use_lighting(class(surface_plot) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot object.
    -
    -
    -
    Returns
    True if lighting should be used; else, false.
    - -

    Definition at line 5459 of file fplot_core.f90.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::initialize
    -
    - -

    Cleans up resources held by the surface_plot object.

    -
    Parameters
    - - -
    [in,out]thisThe surface_plot object.
    -
    -
    -

    Initializes the surface_plot object.

    -
    Syntax
    subroutine initialize(class(surface_plot) this, optional integer(int32) term, optional class(errors) err)
    -
    -
    Parameters
    - - - - - -
    [in]thisThe surface_plot object.
    [in]termAn optional input that is used to define the terminal. The default terminal is a WXT terminal. The acceptable inputs are:
      -
    • GNUPLOT_TERMINAL_PNG
    • -
    • GNUPLOT_TERMINAL_QT
    • -
    • GNUPLOT_TERMINAL_WIN32
    • -
    • GNUPLOT_TERMINAL_WXT
    • -
    • GNUPLOT_TERMINAL_LATEX
    • -
    -
    [in]fnameA filename to pass to the terminal in the event the terminal is a file type (e.g. GNUPLOT_TERMINAL_PNG).
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    -
    -
    -
    - -

    Definition at line 5371 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_allow_smoothing()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::set_allow_smoothing
    -
    - -

    Sets a value determining if the plotted surfaces should be smoothed.

    -
    Syntax
    subroutine set_allow_smoothing(class(surface_plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot object.
    [in]xSet to true if the surface should be smoothed; else, false.
    -
    -
    - -

    Definition at line 5424 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_light_intensity()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::set_light_intensity
    -
    - -

    Sets the ratio of the strength of the light source relative to the ambient light.

    -
    Syntax
    subroutine set_light_intensity(class(surface_plot) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot object.
    [in]xThe light intensity ratio. The value must exist in the set [0, 1]; else, it will be clipped to lie within the range.
    -
    -
    - -

    Definition at line 5493 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_show_contours()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::set_show_contours
    -
    - -

    Sets a value determining if a contour plot should be drawn in conjunction with the surface plot.

    -
    Syntax
    subroutine set_show_contours(class(surface_plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot object.
    [in]xSet to true if the contour plot should be drawn; else, false to only draw the surface.
    -
    -
    - -

    Definition at line 5448 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_show_hidden()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::set_show_hidden
    -
    - -

    Sets a value indicating if hidden lines should be shown.

    -
    Syntax
    subroutine set_show_hidden(class(surface_plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot object.
    [in]xSet to true if hidden lines should be shown; else, false.
    -
    -
    - -

    Definition at line 5391 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_specular_intensity()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::set_specular_intensity
    -
    - -

    Sets the ratio of the strength of the specular light source relative to the ambient light.

    -
    Syntax
    subroutine set_specular_intensity(class(surface_plot) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot object.
    [in]xThe specular light intensity ratio. The value must exist in the set [0, 1]; else, it will be clipped to lie within the range.
    -
    -
    - -

    Definition at line 5517 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_transparency()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::set_transparency
    -
    - -

    Sets a factor defining the transparency of plotted surfaces.

    -
    Syntax
    subroutine set_transparency(class(surface_plot) this, real(real32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot object.
    [in]xA value existing on the set (0 1] defining the level of transparency. A value of 1 indicates a fully opaque surface.
    - Any values supplied outside of the set are clipped to fit within (0 1].
    -
    -
    - -

    Definition at line 5541 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_lighting()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot::set_use_lighting
    -
    - -

    Sets a value indicating if lighting, beyond the ambient light source, is to be used.

    -
    Syntax
    subroutine set_use_lighting(class(surface_plot) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot object.
    [in]xTrue if lighting should be used; else, false.
    -
    -
    - -

    Definition at line 5470 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_contour

    - -
    -
    - - - - -
    logical fplot_core::surface_plot::m_contour = .false.
    -
    - -

    Show a contour plot as well as the surface plot?

    - -

    Definition at line 5332 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_lightintensity

    - -
    -
    - - - - -
    real(real32) fplot_core::surface_plot::m_lightintensity = 0.5
    -
    - -

    Lighting intensity (0 - 1) - default is 0.5.

    - -

    Definition at line 5338 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_showhidden

    - -
    -
    - - - - - -
    - - - - -
    logical fplot_core::surface_plot::m_showhidden = .false.
    -
    -private
    -
    - -

    Show hidden lines.

    - -

    Definition at line 5326 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_smooth

    - -
    -
    - - - - -
    logical fplot_core::surface_plot::m_smooth = .true.
    -
    - -

    The colormap.

    -

    Smooth the surface?

    - -

    Definition at line 5330 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_specular

    - -
    -
    - - - - -
    real(real32) fplot_core::surface_plot::m_specular = 0.5
    -
    - -

    Specular highlight intensity (0 - 1)

    - -

    Definition at line 5340 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_transparency

    - -
    -
    - - - - -
    real(real32) fplot_core::surface_plot::m_transparency = 1.0
    -
    - -

    Defines the translucency value. Must exist on (0, 1].

    - -

    Definition at line 5342 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_uselighting

    - -
    -
    - - - - -
    logical fplot_core::surface_plot::m_uselighting = .false.
    -
    - -

    Use lighting?

    - -

    Definition at line 5336 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1surface__plot.js b/docs/html/structfplot__core_1_1surface__plot.js deleted file mode 100644 index 1be69a3..0000000 --- a/docs/html/structfplot__core_1_1surface__plot.js +++ /dev/null @@ -1,26 +0,0 @@ -var structfplot__core_1_1surface__plot = -[ - [ "get_allow_smoothing", "structfplot__core_1_1surface__plot.html#abb567cd750a1388b1130514713fc8c38", null ], - [ "get_command_string", "structfplot__core_1_1surface__plot.html#a1fc12a0c4034588eb95d67b8dc3d010b", null ], - [ "get_light_intensity", "structfplot__core_1_1surface__plot.html#a23afb86c55364a3669f9e995d256c55c", null ], - [ "get_show_contours", "structfplot__core_1_1surface__plot.html#a3a41ac572a7b31cf23e582ee8023d651", null ], - [ "get_show_hidden", "structfplot__core_1_1surface__plot.html#ab30c5358ab2f8852753150774befd898", null ], - [ "get_specular_intensity", "structfplot__core_1_1surface__plot.html#a88ad210fb239e4ef9943c805b73add68", null ], - [ "get_transparency", "structfplot__core_1_1surface__plot.html#a16dbdc679951a0f58e449349d7d5c3c0", null ], - [ "get_use_lighting", "structfplot__core_1_1surface__plot.html#a66de771aa5424068059cc90db5150393", null ], - [ "initialize", "structfplot__core_1_1surface__plot.html#afdc405472449e47ac82e3cc7af3bd63d", null ], - [ "set_allow_smoothing", "structfplot__core_1_1surface__plot.html#a9e04fc534b0506d32401d21a695efbae", null ], - [ "set_light_intensity", "structfplot__core_1_1surface__plot.html#aadd6772415d91480a12ee88a49216cc7", null ], - [ "set_show_contours", "structfplot__core_1_1surface__plot.html#a8aeebb0ceda2d5f18c960bea089f2c58", null ], - [ "set_show_hidden", "structfplot__core_1_1surface__plot.html#a4dfb89ce7bea300b0baf615df28666be", null ], - [ "set_specular_intensity", "structfplot__core_1_1surface__plot.html#ab40b141891860f87ec370bba31d83b8a", null ], - [ "set_transparency", "structfplot__core_1_1surface__plot.html#a94436759af21d4fcd87a2358e4afe569", null ], - [ "set_use_lighting", "structfplot__core_1_1surface__plot.html#a238591a3e35fea687b802ee34d3f3bdf", null ], - [ "m_contour", "structfplot__core_1_1surface__plot.html#a07676b9f7be385dbfb2fcc9c547e86e1", null ], - [ "m_lightintensity", "structfplot__core_1_1surface__plot.html#a899848b6087f3c257c23d22779ff86b8", null ], - [ "m_showhidden", "structfplot__core_1_1surface__plot.html#ac881849ed85ad0b25e59c00204aa0960", null ], - [ "m_smooth", "structfplot__core_1_1surface__plot.html#ac54f0f8105db3eb118eb8a05b7ca7857", null ], - [ "m_specular", "structfplot__core_1_1surface__plot.html#a33443c0ebe2f233cdeb90a2eed6267ad", null ], - [ "m_transparency", "structfplot__core_1_1surface__plot.html#acf55e49e1212536b0bca656c8d5f302d", null ], - [ "m_uselighting", "structfplot__core_1_1surface__plot.html#ad25c21f74ffc0f3b18bce8207621ba70", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1surface__plot.png b/docs/html/structfplot__core_1_1surface__plot.png deleted file mode 100644 index 6eee30678b3f7d58712afde8c8b5a832261feae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1107 zcmeAS@N?(olHy`uVBq!ia0vp^6M^^u2Q!c~zEbE6q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#NuEdAc};R4~4so0<38fQQX} zenZ1|`;Xn*BR(C{=)C+&l*eXj?!;>uZ{v&3?bJRo>55>Yil-e2Zw>V7-~Dy2%HF2Q zR{Jfg_nT{J?aNZ}6is)_lvrfKd*#HBJ$<)}_KP?Ng#I-tl`a(6A;0)!*1lRZenh?i+h;P1y~Gb(dzw9+~QP_`U98&5zt}x4-^8B_W%?&;Q!RyleZm z_L<#2cr*K`+^lu!E7hyl^4yt!Q(xXbf61;!UAMb0nX@~HV^pf3QmtC2AF?NOV(tkZk>ltm7dl+gCaU4)5K>gbk zc+Rq%HFA=bQjf|>bs%1TP-E%wyTAM<#Vxe`x-;-&t6k3}1D8yx6%#*J%5HyJr`fh( z)h*AdOJsACO(M@;4-&cBpVS$%cy5U2t;-o9+cug{n!hU>`n86iOXq2MTHiYNW_tg8{-FD2Qq$jW{`YUiM3t={RFyq{X@YzQ z!tdNHpWhK?m|npAqU&8x-u8P_b{X&DE?stIe&8F^hV&M}27d|09|WlL@n*nqTBqP0 zwr0!wV;)i*4RYx=4xX)tCN~wuEp1U)? zOL4`jvLN~Q@zD5v_2O36&ny!Q-?`#PWK=w*Z5D6p-8*qf$$?`(4y<_9qjEJS-Q>?N zBP);m83mrJcBaX`O@i|+@0#5UWbuZ4nD0}U@(t7dkfON0Fl1Jm1E8GZs85AmiQWsAN zdc`$qW+c$tGiUls%$)gijoZtG+pOwRcGq1v^QI>@nSZg;U#Z2%?gTIXZE3Ja`nRc( zo%r23@24kmXszx(v$AT{os>{c_1;ieJiAT~J!7_Z&ApnnZypsUZwut>%yKzg;7``_kQP@8qj9|1LiMJu>-x&#|jF%6`q7X}Y22W300A=Jyv; nQqsP?hI`{qZ;;nY^?!_Uk2k94X77#yW`71xS3j3^P6 - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/structfplot__core_1_1surface__plot__data.html b/docs/html/structfplot__core_1_1surface__plot__data.html deleted file mode 100644 index 631843f..0000000 --- a/docs/html/structfplot__core_1_1surface__plot__data.html +++ /dev/null @@ -1,644 +0,0 @@ - - - - - - - -fplot: fplot_core::surface_plot_data Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::surface_plot_data Type Reference
    -
    -
    - -

    Provides a three-dimensional surface plot data set. - More...

    -
    -Inheritance diagram for fplot_core::surface_plot_data:
    -
    -
    - - -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_size surfd_get_size
     Gets the size of the stored data set.
     
    procedure, public get_x surfd_get_x
     Gets the requested X data point.
     
    procedure, public set_x surfd_set_x
     Sets the requested X data point.
     
    procedure, public get_y surfd_get_y
     Gets the requested Y data point.
     
    procedure, public set_y surfd_set_y
     Sets the requested Y data point.
     
    procedure, public get_z surfd_get_z
     Gets the requested Z data point.
     
    procedure, public set_z surfd_set_z
     Sets the requested Z data point.
     
    procedure, public get_use_wireframe surfd_get_wireframe
     Gets a value determining if a wireframe mesh should be displayed.
     
    procedure, public set_use_wireframe surfd_set_wireframe
     Sets a value determining if a wireframe mesh should be displayed.
     
    procedure, public get_command_string surfd_get_cmd
     Gets the GNUPLOT command string to represent this surface_plot_data object.
     
    procedure, public get_data_string surfd_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public define_data surfd_set_data_1
     Defines the data set.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - -

    -Public Attributes

    real(real64), dimension(:,:), allocatable m_y
     Stores the y-coordinate data.
     
    real(real64), dimension(:,:), allocatable m_z
     Stores the z-coordinate data.
     
    logical m_wireframe = .false.
     Set to true to display a wireframe of the surface; else, just a smooth surface will be drawn.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:,:), allocatable m_x
     Stores the x-coordinate data.
     
    -

    Detailed Description

    -

    Provides a three-dimensional surface plot data set.

    - -

    Definition at line 4599 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::define_data
    -
    - -

    Defines the data set.

    -
    Syntax
    subroutine define_data(class(surface_plot_data) this, real(real64) x(:,:), real(real64) y(:,:), real(real64) z(:,:))
    -
    -
    Parameters
    - - - - - - -
    [in,out]thisThe surface_plot_data object.
    [in]xAn M-by-N matrix containing the x-coordinate data.
    [in]yAn M-by-N matrix containing the y-coordinate data.
    [in]zAn M-by-N matrix containing the z-coordinate data.
    [out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if x, y, and z are not the same size.
    • -
    -
    -
    -
    - -

    Definition at line 4760 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::surface_plot_data::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this surface_plot_data object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(surface_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot_data object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 4729 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::surface_plot_data::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    -
    Syntax
    character(len = :) function, allocatable get_data_string(class(surface_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot_data object.
    -
    -
    -
    Returns
    The GNUPLOT command string.
    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 4740 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::get_size
    -
    - -

    Gets the size of the stored data set.

    -
    Syntax
    pure integer(int32) function get_size(class(surface_plot_data) this, integer(int32) dim)
    -
    -
    Parameters
    - - - -
    [in]thisThe suface_plot_data object.
    [in]dimThe dimension of interest. Notice, data is stored as a 2D matrix (i.e. only 1 and 2 are valid inputs).
    -
    -
    -
    Returns
    The size of the requested dimension.
    - -

    Definition at line 4622 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_wireframe()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::get_use_wireframe
    -
    - -

    Gets a value determining if a wireframe mesh should be displayed.

    -
    Syntax
    pure logical function get_wireframe(class(surface_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe surface_plot_data object.
    -
    -
    -
    Returns
    Returns true if a wireframe mesh should be displayed; else, false to display a solid surface.
    - -

    Definition at line 4706 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_x()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::get_x
    -
    - -

    Gets the requested X data point.

    -
    Syntax
    pure real(real64) function get_x(class(surface_plot_data) this, integer(int32) i, integer(int32) j)
    -
    -
    Parameters
    - - - - -
    [in]thisThe surface_plot_data object.
    [in]iThe row index.
    [in]jThe column index.
    -
    -
    -
    Returns
    The value.
    - -

    Definition at line 4634 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_y()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::get_y
    -
    - -

    Gets the requested Y data point.

    -
    Syntax
    pure real(real64) function get_y(class(surface_plot_data) this, integer(int32) i, integer(int32) j)
    -
    -
    Parameters
    - - - - -
    [in]thisThe surface_plot_data object.
    [in]iThe row index.
    [in]jThe column index.
    -
    -
    -
    Returns
    The value.
    - -

    Definition at line 4658 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_z()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::get_z
    -
    - -

    Gets the requested Z data point.

    -
    Syntax
    pure real(real64) function get_z(class(surface_plot_data) this, integer(int32) i, integer(int32) j)
    -
    -
    Parameters
    - - - - -
    [in]thisThe surface_plot_data object.
    [in]iThe row index.
    [in]jThe column index.
    -
    -
    -
    Returns
    The value.
    - -

    Definition at line 4682 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_wireframe()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::set_use_wireframe
    -
    - -

    Sets a value determining if a wireframe mesh should be displayed.

    -
    Syntax
    subroutine set_wireframe(class(surface_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe surface_plot_data object.
    [in]xSet to true if a wireframe mesh should be displayed; else, false to display a solid surface.
    -
    -
    - -

    Definition at line 4718 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_x()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::set_x
    -
    - -

    Sets the requested X data point.

    -
    Syntax
    subroutine set_x(class(surface_plot_data) this, integer(int32) i, integer(int32) j, real(real64) x)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe surface_plot_data object.
    [in]iThe row index.
    [in]jThe column index.
    [in]xThe value.
    -
    -
    - -

    Definition at line 4646 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_y()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::set_y
    -
    - -

    Sets the requested Y data point.

    -
    Syntax
    subroutine set_y(class(surface_plot_data) this, integer(int32) i, integer(int32) j, real(real64) x)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe surface_plot_data object.
    [in]iThe row index.
    [in]jThe column index.
    [in]xThe value.
    -
    -
    - -

    Definition at line 4670 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_z()

    - -
    -
    - - - - -
    procedure, public fplot_core::surface_plot_data::set_z
    -
    - -

    Sets the requested Z data point.

    -
    Syntax
    subroutine set_z(class(surface_plot_data) this, integer(int32) i, integer(int32) j, real(real64) x)
    -
    -
    Parameters
    - - - - - -
    [in,out]thisThe surface_plot_data object.
    [in]iThe row index.
    [in]jThe column index.
    [in]xThe value.
    -
    -
    - -

    Definition at line 4694 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_wireframe

    - -
    -
    - - - - -
    logical fplot_core::surface_plot_data::m_wireframe = .false.
    -
    - -

    Set to true to display a wireframe of the surface; else, just a smooth surface will be drawn.

    - -

    Definition at line 4609 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_x

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::surface_plot_data::m_x
    -
    -private
    -
    - -

    Stores the x-coordinate data.

    - -

    Definition at line 4602 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_y

    - -
    -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::surface_plot_data::m_y
    -
    - -

    Stores the y-coordinate data.

    - -

    Definition at line 4604 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_z

    - -
    -
    - - - - -
    real(real64), dimension(:,:), allocatable fplot_core::surface_plot_data::m_z
    -
    - -

    Stores the z-coordinate data.

    - -

    Definition at line 4606 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1surface__plot__data.js b/docs/html/structfplot__core_1_1surface__plot__data.js deleted file mode 100644 index 08ed332..0000000 --- a/docs/html/structfplot__core_1_1surface__plot__data.js +++ /dev/null @@ -1,19 +0,0 @@ -var structfplot__core_1_1surface__plot__data = -[ - [ "define_data", "structfplot__core_1_1surface__plot__data.html#a1dbe06af4e164ada4b80277e70d0320e", null ], - [ "get_command_string", "structfplot__core_1_1surface__plot__data.html#ac7a97a7065529fbf23cc78ed003d3e6b", null ], - [ "get_data_string", "structfplot__core_1_1surface__plot__data.html#a41149a1d16e0dfbdeda8667abf0f50c2", null ], - [ "get_size", "structfplot__core_1_1surface__plot__data.html#a3a90bfbfccf24c272e1bd151167cf8ae", null ], - [ "get_use_wireframe", "structfplot__core_1_1surface__plot__data.html#a0d2cebb75afa92984e700aaa36251683", null ], - [ "get_x", "structfplot__core_1_1surface__plot__data.html#aaf4084060174d016296cf8cedc37b34a", null ], - [ "get_y", "structfplot__core_1_1surface__plot__data.html#ae6395f27b33c147226f04afdd4d08471", null ], - [ "get_z", "structfplot__core_1_1surface__plot__data.html#a9405a52b7728bef74de50586d23b2f28", null ], - [ "set_use_wireframe", "structfplot__core_1_1surface__plot__data.html#a2dd4d9da621cc049e8d9acb772d64b27", null ], - [ "set_x", "structfplot__core_1_1surface__plot__data.html#a2ef34c8a632cf6fdb9f6247eaf817d57", null ], - [ "set_y", "structfplot__core_1_1surface__plot__data.html#a4d709bdb48e019c6a7f167e2712a11e9", null ], - [ "set_z", "structfplot__core_1_1surface__plot__data.html#a32ff64443790d15faf76401d2c06c0f9", null ], - [ "m_wireframe", "structfplot__core_1_1surface__plot__data.html#aa7856569c70fa73c451702de74e3fab6", null ], - [ "m_x", "structfplot__core_1_1surface__plot__data.html#aab0f3a84a1a1f29f56da00e954b384e6", null ], - [ "m_y", "structfplot__core_1_1surface__plot__data.html#a82294e25bd1321370f5f55e2051bd000", null ], - [ "m_z", "structfplot__core_1_1surface__plot__data.html#ab528d77583bf8dcde5ab0182f807e6d6", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1surface__plot__data.png b/docs/html/structfplot__core_1_1surface__plot__data.png deleted file mode 100644 index 0e3318ffe123ed016ea32a7d8297c4886587ccfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmeAS@N?(olHy`uVBq!ia0vp^8-TcjgBeH`I80mvq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#NrxJY5_^Dj46+eYbdE`!VS?}Z=7a^U%S8Z)knLyX$uzZo*m^rhh>t^xxCiq zFJ;HPukDRbO6ijGu%#*uWRp!7m4e0Kcx8ad#nGYcI`Vi z%u1epNc8%1QD&W3QS$T?Vf7Z(E5&!a$a!qC*d4#?_U(7gSFDq51mna#7ISP5-rDL} z)N=7kv~x+T=cm~QiIc7zY4Hr2ynVy>d;Tm8D?Tta%$(u-%`A>{k+Ye$$crlU!B6=OWi%5*4Fi*=#Bv2!+*Appuuyl zr)!3l?)!D~!aPjbta$`>dq1>#^kKh+;L4M~&hNUEto86)g68r$o9A=n*Z+Pw<%W@y zhmW4{uS1&FsdW(#vu0WdT0Y#duDykQ*^wVIb~A-;zjRsRRLD1-+x))Q>sY0uOQ!pt zw&wTj-m}wtO7q*diaFJOf0zEg+JEox!Ky>Aog{y!b$0Lw%>PlaVW+l^(x - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::terminal Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1terminal.html b/docs/html/structfplot__core_1_1terminal.html deleted file mode 100644 index 9c37a89..0000000 --- a/docs/html/structfplot__core_1_1terminal.html +++ /dev/null @@ -1,735 +0,0 @@ - - - - - - - -fplot: fplot_core::terminal Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::terminal Type Referenceabstract
    -
    -
    - -

    Defines a GNUPLOT terminal object. - More...

    -
    -Inheritance diagram for fplot_core::terminal:
    -
    -
    - - -fplot_core::plot_object -fplot_core::latex_terminal -fplot_core::png_terminal -fplot_core::qt_terminal -fplot_core::windows_terminal -fplot_core::wxt_terminal - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_window_width term_get_window_width
     Gets the width of the plot window.
     
    procedure, public set_window_width term_set_window_width
     Sets the width of the plot window.
     
    procedure, public get_window_height term_get_window_height
     Gets the height of the plot window.
     
    procedure, public set_window_height term_set_window_height
     Sets the height of the plot window.
     
    procedure, public get_command_string term_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    procedure, public get_plot_window_number term_get_plot_window_number
     Gets the targeted plot window number.
     
    procedure, public set_plot_window_number term_set_plot_window_number
     Sets the targeted plot window number.
     
    procedure, public get_title term_get_title
     Gets the plot window's title.
     
    procedure, public set_title term_set_title
     Sets the plot window's title.
     
    procedure, public get_font_name term_get_font_name
     Gets the name of the font used for text displayed by the graph.
     
    procedure, public set_font_name term_set_font_name
     Sets the name of the font used for text displayed by the graph.
     
    procedure, public get_font_size term_get_font_size
     Gets the size of the font used by the graph.
     
    procedure, public set_font_size term_set_font_size
     Sets the size of the font used by the graph.
     
    procedure(term_get_string_result), deferred, public get_id_string term_get_string_result
     Gets the GNUPLOT terminal identification string.
     
    - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    integer(int32) m_windowwidth = GNUPLOT_DEFAULT_WINDOW_WIDTH
     The window width, in pixels.
     
    integer(int32) m_termid = 0
     The plot window number.
     
    character(len=gnuplot_max_label_lengthm_title = ""
     The plot window title.
     
    logical m_hastitle = .false.
     Determines if a plot title is defined.
     
    character(len=gnuplot_max_label_lengthm_fontname = GNUPLOT_DEFAULT_FONTNAME
     The font used by the graph.
     
    integer(int32) m_fontsize = GNUPLOT_DEFAULT_FONT_SIZE
     The size of the font used by the graph.
     
    - - - - -

    -Private Attributes

    integer(int32) m_windowheight = GNUPLOT_DEFAULT_WINDOW_HEIGHT
     The window height, in pixels.
     
    -

    Detailed Description

    -

    Defines a GNUPLOT terminal object.

    - -

    Definition at line 1197 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::terminal::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to establish appropriate parameters.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The GNUPLOT command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 1271 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_font_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::get_font_name
    -
    - -

    Gets the name of the font used for text displayed by the graph.

    -
    Syntax
    character(len = :) function, allocatable get_font_name(class(terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The font name.
    - -

    Definition at line 1324 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_font_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::get_font_size
    -
    - -

    Gets the size of the font used by the graph.

    -
    Syntax
    pure integer(int32) function get_font_size(class(terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The font size, in points.
    - -

    Definition at line 1346 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure(term_get_string_result), deferred, public fplot_core::terminal::get_id_string
    -
    -pure virtual
    -
    - -

    Gets the GNUPLOT terminal identification string.

    - -

    Implemented in fplot_core::png_terminal, fplot_core::qt_terminal, fplot_core::latex_terminal, fplot_core::windows_terminal, and fplot_core::wxt_terminal.

    - -

    Definition at line 1360 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_plot_window_number()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::get_plot_window_number
    -
    - -

    Gets the targeted plot window number.

    -
    Syntax
    pure integer(int32) function get_plot_window_number(class(terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The plot window number.
    - -

    Definition at line 1281 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::get_title
    -
    - -

    Gets the plot window's title.

    -
    Syntax
    character(len = :) function, allocatable get_title(class(terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The title.
    - -

    Definition at line 1303 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_window_height()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::get_window_height
    -
    - -

    Gets the height of the plot window.

    -
    Syntax
    pure integer(int32) function get_window_height(class(terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The height of the plot window.
    - -

    Definition at line 1247 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_window_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::get_window_width
    -
    - -

    Gets the width of the plot window.

    -
    Syntax
    pure integer(int32) function get_window_width(class(terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe terminal object.
    -
    -
    -
    Returns
    The width of the plot window.
    - -

    Definition at line 1224 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_font_name()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::set_font_name
    -
    - -

    Sets the name of the font used for text displayed by the graph.

    -
    Syntax
    subroutine set_font_name(class(terminal) this, character(len = *) name)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe terminal object.
    [in]nameThe name of the font. If no name is supplied, the name is reset back to its default setting.
    -
    -
    - -

    Definition at line 1336 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_font_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::set_font_size
    -
    - -

    Sets the size of the font used by the graph.

    -
    Syntax
    subroutine set_font_size(class(terminal) this, integer(int32) sz)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe terminal object.
    [in]szThe font size, in points. If a value of zero is provided, the font size is reset to its default value; or, if a negative value is provided, the absolute value of the supplied value is utilized.
    -
    -
    - -

    Definition at line 1358 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_plot_window_number()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::set_plot_window_number
    -
    - -

    Sets the targeted plot window number.

    -
    Syntax
    subroutine set_plot_window_number(class(terminal) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe terminal object.
    [in]xThe plot window number.
    -
    -
    - -

    Definition at line 1292 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_title()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::set_title
    -
    - -

    Sets the plot window's title.

    -
    Syntax
    subroutine set_title(class(terminal) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe terminal object.
    [in]txtThe title.
    -
    -
    - -

    Definition at line 1313 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_window_height()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::set_window_height
    -
    - -

    Sets the height of the plot window.

    -
    Syntax
    subroutine set_window_height(class(terminal) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe terminal object.
    [in]xThe height of the plot window. If a value of zero is provided, the window height is reset to its default value; or, if a negative value is provided, the absolute value of the supplied value is utilized.
    -
    -
    - -

    Definition at line 1260 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_window_width()

    - -
    -
    - - - - -
    procedure, public fplot_core::terminal::set_window_width
    -
    - -

    Sets the width of the plot window.

    -
    Syntax
    subroutine set_window_width(class(terminal) this, integer(int32) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe terminal object.
    [in]xThe width of the plot window. If a value of zero is provided, the window width is reset to its default value; or, if a negative value is provided, the absolute value of the supplied value is utilized.
    -
    -
    - -

    Definition at line 1237 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_fontname

    - -
    -
    - - - - -
    character(len = gnuplot_max_label_length) fplot_core::terminal::m_fontname = GNUPLOT_DEFAULT_FONTNAME
    -
    - -

    The font used by the graph.

    - -

    Definition at line 1210 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_fontsize

    - -
    -
    - - - - -
    integer(int32) fplot_core::terminal::m_fontsize = GNUPLOT_DEFAULT_FONT_SIZE
    -
    - -

    The size of the font used by the graph.

    - -

    Definition at line 1213 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_hastitle

    - -
    -
    - - - - -
    logical fplot_core::terminal::m_hastitle = .false.
    -
    - -

    Determines if a plot title is defined.

    - -

    Definition at line 1208 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_termid

    - -
    -
    - - - - -
    integer(int32) fplot_core::terminal::m_termid = 0
    -
    - -

    The plot window number.

    - -

    Definition at line 1204 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_title

    - -
    -
    - - - - -
    character(len = gnuplot_max_label_length) fplot_core::terminal::m_title = ""
    -
    - -

    The plot window title.

    - -

    Definition at line 1206 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_windowheight

    - -
    -
    - - - - - -
    - - - - -
    integer(int32) fplot_core::terminal::m_windowheight = GNUPLOT_DEFAULT_WINDOW_HEIGHT
    -
    -private
    -
    - -

    The window height, in pixels.

    - -

    Definition at line 1200 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_windowwidth

    - -
    -
    - - - - -
    integer(int32) fplot_core::terminal::m_windowwidth = GNUPLOT_DEFAULT_WINDOW_WIDTH
    -
    - -

    The window width, in pixels.

    - -

    Definition at line 1202 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1terminal.js b/docs/html/structfplot__core_1_1terminal.js deleted file mode 100644 index 23bb82e..0000000 --- a/docs/html/structfplot__core_1_1terminal.js +++ /dev/null @@ -1,24 +0,0 @@ -var structfplot__core_1_1terminal = -[ - [ "get_command_string", "structfplot__core_1_1terminal.html#a5167d5b60a3a9dde0ddfdd9bd6a41f9c", null ], - [ "get_font_name", "structfplot__core_1_1terminal.html#a4958475366c740ba22f15aea8ca61efb", null ], - [ "get_font_size", "structfplot__core_1_1terminal.html#a1d21543a70c7aa857b8f6104671d3770", null ], - [ "get_id_string", "structfplot__core_1_1terminal.html#a806a00204a80a6cc2676d2fd05179ba4", null ], - [ "get_plot_window_number", "structfplot__core_1_1terminal.html#a791d7842cbb35ef499cbc9089f5921eb", null ], - [ "get_title", "structfplot__core_1_1terminal.html#ac706187861e60e83f2d327ed86175bb3", null ], - [ "get_window_height", "structfplot__core_1_1terminal.html#ab368a38267c496220bea42ea79be8413", null ], - [ "get_window_width", "structfplot__core_1_1terminal.html#adc47a1a1c7156f8f2adf8510193ee26c", null ], - [ "set_font_name", "structfplot__core_1_1terminal.html#acd92729e62790df27b3c1003ef821593", null ], - [ "set_font_size", "structfplot__core_1_1terminal.html#a27f4875d74e90fef7f4555de55543abd", null ], - [ "set_plot_window_number", "structfplot__core_1_1terminal.html#a97e236d25bfdfb88c47aac07ac636baf", null ], - [ "set_title", "structfplot__core_1_1terminal.html#a4c433fb993c05ba8f2485d76dac5d571", null ], - [ "set_window_height", "structfplot__core_1_1terminal.html#a7bfbe230aacd2ebfc66a48f45e3b7c02", null ], - [ "set_window_width", "structfplot__core_1_1terminal.html#adc7393357e996438ef5afec36dde7054", null ], - [ "m_fontname", "structfplot__core_1_1terminal.html#a65c25946f36a8146b5d189cad922259e", null ], - [ "m_fontsize", "structfplot__core_1_1terminal.html#a92e1f3f32996f5ca36f87a4ca73e8406", null ], - [ "m_hastitle", "structfplot__core_1_1terminal.html#a313c30a86f2e84b24394fc88802ac073", null ], - [ "m_termid", "structfplot__core_1_1terminal.html#a3a008d4ce638c31b5fca9866912e7637", null ], - [ "m_title", "structfplot__core_1_1terminal.html#af1bc227957d1404beefc0d106cfa72be", null ], - [ "m_windowheight", "structfplot__core_1_1terminal.html#a019b0dcd0e49554333c3e71226a30559", null ], - [ "m_windowwidth", "structfplot__core_1_1terminal.html#ad4fc168e1f6bac6b589e41b5e4d5d676", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1terminal.png b/docs/html/structfplot__core_1_1terminal.png deleted file mode 100644 index b4face8e1ca5001af6799c88b7944aa36f7da2ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2227 zcmc&$Yg7~I84gHW>OsWq(Xt4v3h1%IBBBrz2#B&2R)_^gL=dzTVPPReh+O32T6d9E zk`)$|YiLE%3=)VS0aAj<(m5<5AQCQN3^2$gk%VxOOA^vA@$7NC=k#Y!=bV}EnR(xN z=Xt;HdCoUEXZ*ajZ8h79!{N4h|M8SR4!4C4@GZkF;L5!3xgQL>&zuhQ)MzvS&c0ot zF`lvThYu#0-g`bfK0XefAL}_=31YuZ^7jkCfqUKItY7j9hchI3pE?nkqBoC9ul(J| z^jCdvyb3y%Zi?fd<&N*%IotpCPW923zD}-RZrB?vT_d0XrqC!!pzV&`ok7ml$8`EApe zEu8s1)Ozv0ER`yA)PccdQ1~YvbZlppGn$Un!Qa%r+MzEPP@~lFt`6y%6JDjfYMyH5 zdP(wR$Ahn+V`&fRCJSYjuc+thy8WQR>2K>>NYRU(x4>JQ#lg}hWh$Gl%wby@sQ#2F zrw0+7onX zV)Y{5x)!H7OkTMNZ3_q0(pe&!$}SihT-s00n50x{NtAOi4RKh;f+d`;fB;ZtsaQ_$ zRpq>IfN&O4pVSoxuNxdKAb7aD2mB0P7@{$^={>{T{$#A1!2q`u}HmvAE}Q{kpk{$pXzOL%hn|2Ub@8{VzMzHGAxD z^b)ZHt9>9OJ$9;dH6Tx`rqs|I?YE9ghgUP)@(3PJnJaY$CFpe12<5I@W~STxeWVxR zp%v{D6ALI;txz``N4c8&0WtL!Hxgxsj>o*5U66~Ye`%ZZsvY1mjV%Rj)E@#VuOTs&~r>}Nxuw86S7IhBkkn@szu=3H>j4Us$B)(vy)D+d4GM5lm z`dF^qgmtU;10k%sFBRGF6*G*aDN)I%!N+S$T8Of(snOG1CW0ve!-1KTGnpz&(Xx7B z<=T&E8(_eH&%o#Km~=xR7wHVp8j5Im4JcW>s*cfxM|7*0RT&MYj-it?c>EuBdhaZ! zlAdW`KKG{)A%-AsqqSRMqev?XGo2D1YDD)*Ks`j=Ocx&cg~EO&w*Lx4xoAA^r!)LF zB!oq($=@x^AFFG!b$oQ7`I0N!%Jx$*bZxuceWW8T55x%1Cbh%=DkZnQTG|q?C*nw3 z)@_o9Xz0!^l!nf&aGUusOm+yJ2G_e|5F}k68w&QT!eENYZa70SUe%veaofcvnUh!T6n2Y;VlC z+3`C4EP@R=@6)`fg(qS+31QZ40m$!9+Mh$ZmlJKux%8;L2ZV~6kjpuQu+}@VwDgGn z8IeV;%O1Z0PTVY}Keq9S_TzU^MfwJyT+r7oqel(Q__)Yrc)UQ9%%W%OQEE0l_*hN% z{kVRLP%#?JK^u5Zi~Vnz5kbGU^+%lZn7zAQD#V6b+99ilXz30LlpwHNw0&{0%o(Ch zuf!IeMON*xgoxh8Szaz$|Dv&1v5xmorKHLA${E-3z8#!afQ-4}^DANwg|EW!nMia2h3Y@Y4-I&1{UQn(byj{tR|7vnBK zE8D$gK=$eJGTTIG@L3)oj&Ws!=;W1afxsfoAUz*!Q+A(zKs+yC5nZBYhzmCV2&2Mg j?O?4nVjAh#YF1Io=f38fdk%u%3!Jy7-zkpA#T)+y`s03B diff --git a/docs/html/structfplot__core_1_1tri__surface__plot__data-members.html b/docs/html/structfplot__core_1_1tri__surface__plot__data-members.html deleted file mode 100644 index 34127f0..0000000 --- a/docs/html/structfplot__core_1_1tri__surface__plot__data-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/structfplot__core_1_1tri__surface__plot__data.html b/docs/html/structfplot__core_1_1tri__surface__plot__data.html deleted file mode 100644 index 8575356..0000000 --- a/docs/html/structfplot__core_1_1tri__surface__plot__data.html +++ /dev/null @@ -1,417 +0,0 @@ - - - - - - - -fplot: fplot_core::tri_surface_plot_data Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::tri_surface_plot_data Type Reference
    -
    -
    - -

    Provides a three-dimensional surface plot data set constructed of triangulated points. - More...

    -
    -Inheritance diagram for fplot_core::tri_surface_plot_data:
    -
    -
    - - -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_data_string tspd_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public get_command_string tspd_get_cmd
     Returns the appropriate GNUPLOT command string to define the plot object properties.
     
    procedure, public get_use_wireframe tspd_get_wireframe
     Gets a value determining if a wireframe mesh should be displayed.
     
    procedure, public set_use_wireframe tspd_set_wireframe
     Sets a value determining if a wireframe mesh should be displayed.
     
    procedure, public define_data tspd_define_data
     Defines the data to plot.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - - - -

    -Public Attributes

    real(real64), dimension(:), allocatable m_y
     An array of the y-coordinates of each point.
     
    real(real64), dimension(:), allocatable m_z
     An array of the z-coordinates of each point.
     
    integer(int32), dimension(:,:), allocatable m_indices
     A 3-column matrix containing the indices of each triangle's vertex.
     
    logical m_wireframe = .true.
     Determines if the surface should be drawn as a wireframe.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:), allocatable m_x
     An array of the x-coordinates of each point.
     
    -

    Detailed Description

    -

    Provides a three-dimensional surface plot data set constructed of triangulated points.

    - -

    Definition at line 7123 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::tri_surface_plot_data::define_data
    -
    - -

    Defines the data to plot.

    -
    Syntax
    subroutine define_data(class(tri_surface_plot_data) this, class(delaunay_tri_surface) tri)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe tri_surface_plot_data object.
    [in]triThe triangulation to plot.
    -
    -
    - -

    Definition at line 7172 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::tri_surface_plot_data::get_command_string
    -
    -virtual
    -
    - -

    Returns the appropriate GNUPLOT command string to define the plot object properties.

    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 7138 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::tri_surface_plot_data::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 7137 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_wireframe()

    - -
    -
    - - - - -
    procedure, public fplot_core::tri_surface_plot_data::get_use_wireframe
    -
    - -

    Gets a value determining if a wireframe mesh should be displayed.

    -
    Syntax
    logical function get_use_wireframe(class(tri_surface_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe tri_surface_plot_data object.
    -
    -
    -
    Returns
    Returns true if the plot is to be drawn as a wireframe; else, false to draw as a surface.
    - -

    Definition at line 7150 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_use_wireframe()

    - -
    -
    - - - - -
    procedure, public fplot_core::tri_surface_plot_data::set_use_wireframe
    -
    - -

    Sets a value determining if a wireframe mesh should be displayed.

    -
    Syntax
    subroutine set_use_wireframe(class(tri_surface_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe tri_surface_plot_data object.
    [in]xSet to true if the plot is to be drawn as a wireframe; else, set to false to draw as a surface.
    -
    -
    - -

    Definition at line 7162 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_indices

    - -
    -
    - - - - -
    integer(int32), dimension(:,:), allocatable fplot_core::tri_surface_plot_data::m_indices
    -
    - -

    A 3-column matrix containing the indices of each triangle's vertex.

    - -

    Definition at line 7133 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_wireframe

    - -
    -
    - - - - -
    logical fplot_core::tri_surface_plot_data::m_wireframe = .true.
    -
    - -

    Determines if the surface should be drawn as a wireframe.

    - -

    Definition at line 7135 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_x

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::tri_surface_plot_data::m_x
    -
    -private
    -
    - -

    An array of the x-coordinates of each point.

    - -

    Definition at line 7126 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_y

    - -
    -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::tri_surface_plot_data::m_y
    -
    - -

    An array of the y-coordinates of each point.

    - -

    Definition at line 7128 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_z

    - -
    -
    - - - - -
    real(real64), dimension(:), allocatable fplot_core::tri_surface_plot_data::m_z
    -
    - -

    An array of the z-coordinates of each point.

    - -

    Definition at line 7130 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1tri__surface__plot__data.js b/docs/html/structfplot__core_1_1tri__surface__plot__data.js deleted file mode 100644 index 9699d53..0000000 --- a/docs/html/structfplot__core_1_1tri__surface__plot__data.js +++ /dev/null @@ -1,13 +0,0 @@ -var structfplot__core_1_1tri__surface__plot__data = -[ - [ "define_data", "structfplot__core_1_1tri__surface__plot__data.html#ad2fa70d7577676babf477c89d3562060", null ], - [ "get_command_string", "structfplot__core_1_1tri__surface__plot__data.html#a469efa44e12737b0ec95737f5cd3aabb", null ], - [ "get_data_string", "structfplot__core_1_1tri__surface__plot__data.html#abf08b1c7f2c4980d238a2a8c649af522", null ], - [ "get_use_wireframe", "structfplot__core_1_1tri__surface__plot__data.html#a3fc771c7f1bdb8104ae08fabf6c665dd", null ], - [ "set_use_wireframe", "structfplot__core_1_1tri__surface__plot__data.html#a920b578a7bd5dda514379761daad8d87", null ], - [ "m_indices", "structfplot__core_1_1tri__surface__plot__data.html#ae2f7495459a379be5318da146fb893ae", null ], - [ "m_wireframe", "structfplot__core_1_1tri__surface__plot__data.html#ab488110fbd8508f9c34b62430577dfaf", null ], - [ "m_x", "structfplot__core_1_1tri__surface__plot__data.html#a0d748864ab5f589fdcac1bfa61ac06e1", null ], - [ "m_y", "structfplot__core_1_1tri__surface__plot__data.html#a23462d63b8ffe52541d975e443044f4a", null ], - [ "m_z", "structfplot__core_1_1tri__surface__plot__data.html#a8201960050d3276b59d9bfad7d14ca10", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1tri__surface__plot__data.png b/docs/html/structfplot__core_1_1tri__surface__plot__data.png deleted file mode 100644 index 6d32cbc85b583ae51b690379e02dbc3ce45f0356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmeAS@N?(olHy`uVBq!ia0vp^hk&?)gBeIR{W-!3q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#NsiJzX3_Dj46+y(zRh7V);Ew14y6)a;Jm76}QNzwDZzbfd~n&;J@M zy-&Nguc_L5^n}RWiMvDtStdO(6Bqe3J?nn+lG_V{Y&PaAg@`V@uiHA|2QQcO%e#vU zHn>hqIjWq!aHdE6X0cVij}zQamCY)cyY$@~k4gp4yi4^~@pf!^OYXgTtlV1pvb1K! zyDRnU9VXd+S$6OBqWDIY{X)SCp1B~GS87+h|9gSqz~(&+2|35YEB3aPOT<6SHQ05S zU*kp}3&XD&Obi*xTnr0(H5nSrmN78gA}F8^H1WoP$xlwqVDijL=2BUCR+RPmwdEmh zlfrL!@4f$owRO!)N6|Yb9C|!Q&-}6P^{MIGuDN1`ozL1+pS>p8JbHv2AhmODwS4D4 z7TUUNdfFe^le4@E&)eOKnd5(6%V$3~m!ggB#3z>h{fCaZSkG+s_h0gF>jj@B>m#|J zZkse$^laahq-n1;N_F`YA9kvo-&p|)m49AZp6@>IJhUgxTI@diN|l}G|C@8E{LFlc~4mxl8yHrdTqMr@DHy1=8Lj*4hPFr7%m(aVQ`QRW?;zmVPx21$jWfx z7$E_RgO<;avH7{Ar1&_xxJU;J2wqgv+;LUa^Xu!iYdbpLOxz_Pcr$tZ@4KH?Oc1SK zq@c9PJw3Zz^xo~)A*S`qXa21Jc5~YEirGz@Ud@QB>D;<@g218GWuF=?-|f@#pL$fI z<$J`siqoq$n` - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::vector_field_plot_data Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1vector__field__plot__data.html b/docs/html/structfplot__core_1_1vector__field__plot__data.html deleted file mode 100644 index ff56677..0000000 --- a/docs/html/structfplot__core_1_1vector__field__plot__data.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - - - -fplot: fplot_core::vector_field_plot_data Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::vector_field_plot_data Type Reference
    -
    -
    - -

    Defines a two-dimensional vector-field plot data set. - More...

    -
    -Inheritance diagram for fplot_core::vector_field_plot_data:
    -
    -
    - - -fplot_core::plot_data_colored -fplot_core::plot_data -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_data_string vfpd_get_data_cmd
     Gets the GNUPLOT command string containing the actual data to plot.
     
    procedure, public get_command_string vfpd_get_cmd
     Gets the GNUPLOT command string to represent this vector_field_plot_data object.
     
    procedure, public define_data vfpd_define_data
     Defines the data set.
     
    procedure, public get_arrow_size vfpd_get_arrow_size
     Gets the scaling factor used to determine the arrow size.
     
    procedure, public set_arrow_size vfpd_set_arrow_size
     Sets the scaling factor used to determine the arrow size.
     
    procedure, public get_fill_arrow vfpd_get_fill_arrow
     Gets a value determining if the arrow heads should be filled.
     
    procedure, public set_fill_arrow vfpd_set_fill_arrow
     Sets a value determining if the arrow heads should be filled.
     
    procedure, public get_use_data_dependent_colors vfpd_get_use_data_dependent_colors
     Gets a value indicating if data-dependent coloring should be used. This is defined by supplying information on how to scale the coloring when calling define_data.
     
    - Public Member Functions inherited from fplot_core::plot_data_colored
    procedure, public get_line_color pdc_get_line_color
     Gets the line color.
     
    procedure, public set_line_color pdc_set_line_color
     Sets the line color.
     
    - Public Member Functions inherited from fplot_core::plot_data
    procedure, public get_name pd_get_name
     Gets the name to associate with this data set.
     
    procedure, public set_name pd_set_name
     Sets the name to associate with this data set.
     
    - - - - - - - - - - - - - - -

    -Public Attributes

    real(real64) m_arrowsize = 1.0d0
     The vector size (scaling factor).
     
    logical m_filledheads = .false.
     Fill the arrow heads?
     
    - Public Attributes inherited from fplot_core::plot_data_colored
    logical m_useautocolor = .true.
     Let the object choose colors automatically.
     
    integer(int32) m_colorindex = 1
     The color index to use, assuming we're using auto color.
     
    - - - - -

    -Private Attributes

    real(real64), dimension(:,:,:), allocatable m_data
     An M-by-N-by-4 array containing the x, y, dx, and dy plot data points. Optionally, a 5th page can be added to define the color for each arrow.
     
    -

    Detailed Description

    -

    Defines a two-dimensional vector-field plot data set.

    - -

    Definition at line 7212 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ define_data()

    - -
    -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::define_data
    -
    - -

    Defines the data set.

    -
    Syntax
    subroutine define_data(class(vector_field_plot_data) this, real(real64) x(:,:), real(real64) y(:,:), real(real64) dx(:,:), real(real64) dy(:,:), real(real64) c(:,:), class(errors) err)
    -
    -
    Parameters
    - - - - - - - - -
    [in,out]thisThe vector_field_plot_data object.
    [in]xAn M-by-N matrix containing the x-locations of each arrow's origin.
    [in]yAn M-by-N matrix containing the y-locations of each arrow's origin.
    [in]dxAn M-by-N matrix containing the x-direction of each arrow.
    [in]dyAn M-by-N matrix containing the y-direction of each arrow.
    [in]cAn optional M-by-N matrix containing information on how to color the arrows. The colors are determined by the active colormap.
    [in,out]errAn optional errors-based object that if provided can be used to retrieve information relating to any errors encountered during execution. If not provided, a default implementation of the errors class is used internally to provide error handling. Possible errors and warning messages that may be encountered are as follows.
      -
    • PLOT_OUT_OF_MEMORY_ERROR: Occurs if insufficient memory is available.
    • -
    • PLOT_ARRAY_SIZE_MISMATCH_ERROR: Occurs if the input matrices are not the same size.
    • -
    -
    -
    -
    - -

    Definition at line 7267 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_arrow_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::get_arrow_size
    -
    - -

    Gets the scaling factor used to determine the arrow size.

    -
    Syntax
    real(real64) get_arrow_size(class(vector_field_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe vector_field_plot_data object.
    -
    -
    -
    Returns
    The scaling factor.
    - -

    Definition at line 7277 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_command_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::get_command_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string to represent this vector_field_plot_data object.

    -
    Syntax
    character(len = :) function, allocatable get_command_string(class(vector_field_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe vector_field_plot_data object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_object.

    - -

    Definition at line 7244 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_data_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::get_data_string
    -
    -virtual
    -
    - -

    Gets the GNUPLOT command string containing the actual data to plot.

    -
    Syntax
    character(len = :) function, allocatable get_data_string(class(vector_field_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe vector_field_plot_data object.
    -
    -
    -
    Returns
    The command string.
    - -

    Implements fplot_core::plot_data.

    - -

    Definition at line 7233 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_fill_arrow()

    - -
    -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::get_fill_arrow
    -
    - -

    Gets a value determining if the arrow heads should be filled.

    -
    Syntax
    logical get_fill_arrow(class(vector_field_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe vector_field_plot_data object.
    -
    -
    -
    Returns
    True if the arrow heads should be filled; else, false.
    - -

    Definition at line 7297 of file fplot_core.f90.

    - -
    -
    - -

    ◆ get_use_data_dependent_colors()

    - -
    -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::get_use_data_dependent_colors
    -
    - -

    Gets a value indicating if data-dependent coloring should be used. This is defined by supplying information on how to scale the coloring when calling define_data.

    -
    Syntax
    logical get_use_data_dependent_colors(class(vector_field_plot_data) this)
    -
    -
    Parameters
    - - -
    [in]thisThe vector_field_plot_data object. return Returns true if data-dependent coloring is being used; else, false.
    -
    -
    - -

    Definition at line 7320 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_arrow_size()

    - -
    -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::set_arrow_size
    -
    - -

    Sets the scaling factor used to determine the arrow size.

    -
    Syntax
    subroutine set_arrow_size(class(vector_field_plot_data) this, real(real64) x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe vector_field_plot_data object.
    [in]xThe scaling factor.
    -
    -
    - -

    Definition at line 7287 of file fplot_core.f90.

    - -
    -
    - -

    ◆ set_fill_arrow()

    - -
    -
    - - - - -
    procedure, public fplot_core::vector_field_plot_data::set_fill_arrow
    -
    - -

    Sets a value determining if the arrow heads should be filled.

    -
    Syntax
    subroutine set_fill_arrow(class(vector_field_plot_data) this, logical x)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe vector_field_plot_data object.
    [in]xTrue if the arrow heads should be filled; else, false.
    -
    -
    - -

    Definition at line 7307 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_arrowsize

    - -
    -
    - - - - -
    real(real64) fplot_core::vector_field_plot_data::m_arrowsize = 1.0d0
    -
    - -

    The vector size (scaling factor).

    - -

    Definition at line 7219 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_data

    - -
    -
    - - - - - -
    - - - - -
    real(real64), dimension(:,:,:), allocatable fplot_core::vector_field_plot_data::m_data
    -
    -private
    -
    - -

    An M-by-N-by-4 array containing the x, y, dx, and dy plot data points. Optionally, a 5th page can be added to define the color for each arrow.

    - -

    Definition at line 7217 of file fplot_core.f90.

    - -
    -
    - -

    ◆ m_filledheads

    - -
    -
    - - - - -
    logical fplot_core::vector_field_plot_data::m_filledheads = .false.
    -
    - -

    Fill the arrow heads?

    - -

    Definition at line 7221 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1vector__field__plot__data.js b/docs/html/structfplot__core_1_1vector__field__plot__data.js deleted file mode 100644 index 1236be6..0000000 --- a/docs/html/structfplot__core_1_1vector__field__plot__data.js +++ /dev/null @@ -1,14 +0,0 @@ -var structfplot__core_1_1vector__field__plot__data = -[ - [ "define_data", "structfplot__core_1_1vector__field__plot__data.html#a833b60ff6a9ca8c533e089f2968d335e", null ], - [ "get_arrow_size", "structfplot__core_1_1vector__field__plot__data.html#aa081611ba3786ab60023567662d1ab39", null ], - [ "get_command_string", "structfplot__core_1_1vector__field__plot__data.html#acb5a624f5190d33c63bef21abd6d191e", null ], - [ "get_data_string", "structfplot__core_1_1vector__field__plot__data.html#a35f10299e5447c27a670ec648d4dff9a", null ], - [ "get_fill_arrow", "structfplot__core_1_1vector__field__plot__data.html#ac83b7d14395a9c7894ae89f86c3aeb96", null ], - [ "get_use_data_dependent_colors", "structfplot__core_1_1vector__field__plot__data.html#a1c8d0b54c39a88ec703fe887395d9de1", null ], - [ "set_arrow_size", "structfplot__core_1_1vector__field__plot__data.html#ac744dea773420c6600c3306311ef2d93", null ], - [ "set_fill_arrow", "structfplot__core_1_1vector__field__plot__data.html#aa1c31e27261ed54d1728c6d17a2c0db0", null ], - [ "m_arrowsize", "structfplot__core_1_1vector__field__plot__data.html#adb43db20bfd010f251c8141acf894e23", null ], - [ "m_data", "structfplot__core_1_1vector__field__plot__data.html#ab8f9fd516cb896988615cd6a378eb7e1", null ], - [ "m_filledheads", "structfplot__core_1_1vector__field__plot__data.html#abfd90138c5821640f049c79d587c6939", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1vector__field__plot__data.png b/docs/html/structfplot__core_1_1vector__field__plot__data.png deleted file mode 100644 index 2397ab71564caeab7bd8be6da65497887d4c2311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1287 zcmeAS@N?(olHy`uVBq!ia0vp^CxG|>2Q!c?yL#s!kdhAY332`Z|38rV;?396{zJ_-9+Ok>y7d0B(xenl@rf$lTe@2ercbl- z+;zzFdic@6y()7r>IB)mU#&DL>{` zdwh)6Yv1pB_H&x@^cQXGss%$AsK^%iE}3(y%xuyjKJAOYtx>?Fz8zmu_y4)M;!);uXdNwjM>^sN2fW1nv(#Fd0rR$TI7u!9} zmFlt>Zya)E(0QoDFs(q4!FvZsgK7-R0UCL=TS{myC@5#c!H&`llI7=-K75;a^i1 ztL%MP<)$|C`qX^a&o!qfdVi_B?)ziukvjsB{aYgi9WTwA`r@MX3BT*%H?F(3-DjPs zS)=J0B>Z1V+1mU4*;Rkcy;s*lf+R@Z_UQK1;w)Xm^{>~wj>ZJ@f#5yTYpYGe%4xdx034} z|Lzt=#YC^uCw|nQ4AOgkTOh=Aep&3*>AkDf&o_RRSnuwkwf-Y3S3Oo0cD5tt3nlVhSX)`G?lu4Q}xY-GMd|cmS)wZPmZ{%-y7-{=lrDc z+Ar_gJ|9Kh>+jaS+3dfjn%>7KOuvdRag4?5rM`uQSPtp8un zi4WT0M}n@a7`4ZVMY2UM`*6Hx%H`Gf!-L&k%?O*=w)E;g_ixY3H@Tmie(m^okJ^MQ z=hyqM{d6O8)vFD!u2@+-xHm6K`y?n8EY$w*G9A&&XB;EV39pUHx3vIVCg!0J*bU AIRF3v diff --git a/docs/html/structfplot__core_1_1windows__terminal-members.html b/docs/html/structfplot__core_1_1windows__terminal-members.html deleted file mode 100644 index 12edf9d..0000000 --- a/docs/html/structfplot__core_1_1windows__terminal-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::windows_terminal Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1windows__terminal.html b/docs/html/structfplot__core_1_1windows__terminal.html deleted file mode 100644 index 0ba209b..0000000 --- a/docs/html/structfplot__core_1_1windows__terminal.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - -fplot: fplot_core::windows_terminal Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::windows_terminal Type Reference
    -
    -
    - -

    Defines a GNUPLOT Win32 terminal object. - More...

    -
    -Inheritance diagram for fplot_core::windows_terminal:
    -
    -
    - - -fplot_core::terminal -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_id_string wt_get_term_string
     Retrieves a GNUPLOT terminal identifier string.
     
    - Public Member Functions inherited from fplot_core::terminal
    procedure, public get_window_width term_get_window_width
     Gets the width of the plot window.
     
    procedure, public set_window_width term_set_window_width
     Sets the width of the plot window.
     
    procedure, public get_window_height term_get_window_height
     Gets the height of the plot window.
     
    procedure, public set_window_height term_set_window_height
     Sets the height of the plot window.
     
    procedure, public get_command_string term_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    procedure, public get_plot_window_number term_get_plot_window_number
     Gets the targeted plot window number.
     
    procedure, public set_plot_window_number term_set_plot_window_number
     Sets the targeted plot window number.
     
    procedure, public get_title term_get_title
     Gets the plot window's title.
     
    procedure, public set_title term_set_title
     Sets the plot window's title.
     
    procedure, public get_font_name term_get_font_name
     Gets the name of the font used for text displayed by the graph.
     
    procedure, public set_font_name term_set_font_name
     Sets the name of the font used for text displayed by the graph.
     
    procedure, public get_font_size term_get_font_size
     Gets the size of the font used by the graph.
     
    procedure, public set_font_size term_set_font_size
     Sets the size of the font used by the graph.
     
    - - - - -

    -Private Attributes

    character(len=3) m_id = "win"
     The terminal ID string.
     
    - - - - - - - - - - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::terminal
    integer(int32) m_windowwidth = GNUPLOT_DEFAULT_WINDOW_WIDTH
     The window width, in pixels.
     
    integer(int32) m_termid = 0
     The plot window number.
     
    character(len=gnuplot_max_label_lengthm_title = ""
     The plot window title.
     
    logical m_hastitle = .false.
     Determines if a plot title is defined.
     
    character(len=gnuplot_max_label_lengthm_fontname = GNUPLOT_DEFAULT_FONTNAME
     The font used by the graph.
     
    integer(int32) m_fontsize = GNUPLOT_DEFAULT_FONT_SIZE
     The size of the font used by the graph.
     
    -

    Detailed Description

    -

    Defines a GNUPLOT Win32 terminal object.

    - -

    Definition at line 1435 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::windows_terminal::get_id_string
    -
    -virtual
    -
    - -

    Retrieves a GNUPLOT terminal identifier string.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(windows_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe windows_terminal object.
    -
    -
    -
    Returns
    The string.
    - -

    Implements fplot_core::terminal.

    - -

    Definition at line 1449 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_id

    - -
    -
    - - - - - -
    - - - - -
    character(len = 3) fplot_core::windows_terminal::m_id = "win"
    -
    -private
    -
    - -

    The terminal ID string.

    - -

    Definition at line 1438 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1windows__terminal.js b/docs/html/structfplot__core_1_1windows__terminal.js deleted file mode 100644 index ba15b25..0000000 --- a/docs/html/structfplot__core_1_1windows__terminal.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1windows__terminal = -[ - [ "get_id_string", "structfplot__core_1_1windows__terminal.html#aa9422d9df32df6bae76145d27663f32b", null ], - [ "m_id", "structfplot__core_1_1windows__terminal.html#af215f20aa2e4e2de14bed3f928a4f40f", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1windows__terminal.png b/docs/html/structfplot__core_1_1windows__terminal.png deleted file mode 100644 index 1dac9fe96bf8a18593f978f5ffeb2a069ca6a082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 979 zcmeAS@N?(olHy`uVBq!ia0vp^>wvg}gBeJAsw;d4QqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GV1o-U3d6^w7^-d^`ufydQc zdgZ78^&eGQx=-%Sv<-Iai%{p3*z|$%SC>Sx47yAFY_D5slRBnFsFh6sW*Skyj<=)giHq&p*TrrI=i*`wt=-*4 zdQX?ldcD?V+Y9N~?@GHICdKZ&a+T?J{v;mjHOq<(FZ&*ezdU!n`!4U}``7Ni{I{&k zzmKbX>+VRN|0!?RnY}-GazWXjpmn?C=I~feSfUrcKPz8;GykrAAA8w%Wk$=WKlrV*l@U%@c`F#RtD`DafUSou?!my;TO1Da#Z56g~FsK8X(gj?o!D-s(V-9Rq$%% zlhHD+d9U($D&50*Kl{c`dh??%Z^mTlX(H;Es!vx`>TS35Fn#@DXKrTvu~UnmJ=0Gs z4}7=pis|*}&Xk1ksOX|IU)h}}J<;1+h05e5rvEd`JU_7)#7^3BsMPaPm#6tLiFQT?oeIVS7ClRUSMffzp7t)q zdeZxZU3Eqb4YKRF8Gr%E5bwyk71;mnRoq9{F?2%@?cITwN9@opmG2F6&0#i6=L{zV)q&Ro$>y zTPczK>s{aHSJ(V94Bz#8@ro7vrO#j2#_pB)G%3qFKxIXc{pYoBR(;#{iLa#iK$ZUW z$uEm8$*;NFTV#Lt?5(>jcVc;#XK%NcG@Bifo4hx@Jg4ZrS;*|z?Gj&3DhT}w+C9DA z`~T{1zwHaccV#NSsOjjaId?hH{oJ~a6ZwyUehJ&LuA@VAavp~w&tZ9<+KpeP@+3|H PW - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::wxt_terminal Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__core_1_1wxt__terminal.html b/docs/html/structfplot__core_1_1wxt__terminal.html deleted file mode 100644 index efcd674..0000000 --- a/docs/html/structfplot__core_1_1wxt__terminal.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - -fplot: fplot_core::wxt_terminal Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::wxt_terminal Type Reference
    -
    -
    - -

    Defines a GNUPLOT WXT terminal object. - More...

    -
    -Inheritance diagram for fplot_core::wxt_terminal:
    -
    -
    - - -fplot_core::terminal -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_id_string wxt_get_term_string
     Retrieves a GNUPLOT terminal identifier string.
     
    - Public Member Functions inherited from fplot_core::terminal
    procedure, public get_window_width term_get_window_width
     Gets the width of the plot window.
     
    procedure, public set_window_width term_set_window_width
     Sets the width of the plot window.
     
    procedure, public get_window_height term_get_window_height
     Gets the height of the plot window.
     
    procedure, public set_window_height term_set_window_height
     Sets the height of the plot window.
     
    procedure, public get_command_string term_get_command_string
     Returns the appropriate GNUPLOT command string to establish appropriate parameters.
     
    procedure, public get_plot_window_number term_get_plot_window_number
     Gets the targeted plot window number.
     
    procedure, public set_plot_window_number term_set_plot_window_number
     Sets the targeted plot window number.
     
    procedure, public get_title term_get_title
     Gets the plot window's title.
     
    procedure, public set_title term_set_title
     Sets the plot window's title.
     
    procedure, public get_font_name term_get_font_name
     Gets the name of the font used for text displayed by the graph.
     
    procedure, public set_font_name term_set_font_name
     Sets the name of the font used for text displayed by the graph.
     
    procedure, public get_font_size term_get_font_size
     Gets the size of the font used by the graph.
     
    procedure, public set_font_size term_set_font_size
     Sets the size of the font used by the graph.
     
    - - - - -

    -Private Attributes

    character(len=3) m_id = "wxt"
     The terminal ID string.
     
    - - - - - - - - - - - - - - - - - - - - -

    -Additional Inherited Members

    - Public Attributes inherited from fplot_core::terminal
    integer(int32) m_windowwidth = GNUPLOT_DEFAULT_WINDOW_WIDTH
     The window width, in pixels.
     
    integer(int32) m_termid = 0
     The plot window number.
     
    character(len=gnuplot_max_label_lengthm_title = ""
     The plot window title.
     
    logical m_hastitle = .false.
     Determines if a plot title is defined.
     
    character(len=gnuplot_max_label_lengthm_fontname = GNUPLOT_DEFAULT_FONTNAME
     The font used by the graph.
     
    integer(int32) m_fontsize = GNUPLOT_DEFAULT_FONT_SIZE
     The size of the font used by the graph.
     
    -

    Detailed Description

    -

    Defines a GNUPLOT WXT terminal object.

    - -

    Definition at line 1493 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::wxt_terminal::get_id_string
    -
    -virtual
    -
    - -

    Retrieves a GNUPLOT terminal identifier string.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(wxt_terminal) this)
    -
    -
    Parameters
    - - -
    [in]thisThe wxt_terminal object.
    -
    -
    -
    Returns
    The string.
    - -

    Implements fplot_core::terminal.

    - -

    Definition at line 1507 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_id

    - -
    -
    - - - - - -
    - - - - -
    character(len = 3) fplot_core::wxt_terminal::m_id = "wxt"
    -
    -private
    -
    - -

    The terminal ID string.

    - -

    Definition at line 1496 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1wxt__terminal.js b/docs/html/structfplot__core_1_1wxt__terminal.js deleted file mode 100644 index 2cba937..0000000 --- a/docs/html/structfplot__core_1_1wxt__terminal.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1wxt__terminal = -[ - [ "get_id_string", "structfplot__core_1_1wxt__terminal.html#aeea16e93a4be79e2687a207c405db431", null ], - [ "m_id", "structfplot__core_1_1wxt__terminal.html#a1d5b03366bc38e5ae7dab696b40d5ccb", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1wxt__terminal.png b/docs/html/structfplot__core_1_1wxt__terminal.png deleted file mode 100644 index 48314916f73cc9f764c42efca0be0e4dc5854820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 908 zcmeAS@N?(olHy`uVBq!ia0vp^6M(pbgBeKL%TB5RQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCWJa_;UH$5A+1SrQ@666=m0OW&#In(Sb3=GWTo-U3d6^w7^zFzlOfrqV~ zf90p&_8-l{7bxc4I(suU-0qYH=M96>hR@UI6w7gLQt5T(@SNlh!rD_V{R_FJ@=|!t zm8}og{8b3q`hUd)71KE!OIJE%YF<9`CvMd?+x+dCD_+*k{v~yh(uz$1_jv1S(kQ#Is_XHJNkQ%656$;K6)0SM;mh}_7baEgzwr9fpCwLrbH7_>zxZ&n zE`xV(4omv<(B0`f?=7A8W|P&2f}r}EH#HMqvBn9`5>NQ5tg`a>(<}EyCoR#A@hyG) zX#ZZ7%9aT#l|33$iqA1K7I5=7OqB3_@loPThRMR^=Of$>a~{=W{=lio&@aIBfr9|` zKV0Ma9QP(2&&L8zlb#3y@kMd3%zCZdNhO_|PdHcWZ_o~5y{D<-$s68!DP+NxDVb?? z`k}YyZNDuNQhNPi@cm2sd$#uNDyt7!=(6a6y zU%j0cy>qF)=hvz6nA29SS+ZB{%NNPh85Rp~q%znkvOExUVvr+1ef-b0bjl@<31`k6Q*1eN z#>VNynKO$ymfl^XQK$R6uEY8Ftqt6vjP))j&a8Rp`l6D-C%1TJ+OzLLTi;gh_H_&` z_l$1#y6gR5$`%#9i?2(v%hx+~hfMxtlx$m=IV(L<^JjI^WRvJMj(c}TEzIibn=o@J z-_-6hY}~&*z)O?&i2j~8ll6|RR&)U78wO8TKbLh*2~7Zx5vn8r diff --git a/docs/html/structfplot__core_1_1x__axis-members.html b/docs/html/structfplot__core_1_1x__axis-members.html deleted file mode 100644 index c2dec4e..0000000 --- a/docs/html/structfplot__core_1_1x__axis-members.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::x_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::x_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_autoscalepa_get_autoscalefplot_core::plot_axis
    get_command_stringpa_get_cmd_stringfplot_core::plot_axisvirtual
    get_id_stringxa_get_idfplot_core::x_axisvirtual
    get_is_log_scaledpa_get_log_scalefplot_core::plot_axis
    get_limitspa_get_axis_limitsfplot_core::plot_axis
    get_tic_label_formatpa_get_tic_label_fmtfplot_core::plot_axis
    get_titlepa_get_titlefplot_core::plot_axis
    get_use_default_tic_label_formatpa_get_use_dft_tic_lbl_fmtfplot_core::plot_axis
    get_zero_axispa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_widthpa_get_zero_axis_widthfplot_core::plot_axis
    is_title_definedpa_has_titlefplot_core::plot_axis
    m_autoscalefplot_core::plot_axis
    m_axiswidthfplot_core::plot_axis
    m_defaultticlabelsfplot_core::plot_axis
    m_hastitlefplot_core::plot_axisprivate
    m_idfplot_core::x_axis
    m_limitsfplot_core::plot_axis
    m_logscalefplot_core::plot_axis
    m_ticlabelfmtfplot_core::plot_axis
    m_titlefplot_core::plot_axis
    m_zeroaxisfplot_core::plot_axis
    set_autoscalepa_set_autoscalefplot_core::plot_axis
    set_is_log_scaledpa_set_log_scalefplot_core::plot_axis
    set_limitspa_set_axis_limitsfplot_core::plot_axis
    set_tic_label_formatpa_set_tic_label_fmtfplot_core::plot_axis
    set_titlepa_set_titlefplot_core::plot_axis
    set_use_default_tic_label_formatpa_set_use_dft_tic_lbl_fmtfplot_core::plot_axis
    set_zero_axispa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_widthpa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1x__axis.html b/docs/html/structfplot__core_1_1x__axis.html deleted file mode 100644 index dd3fc04..0000000 --- a/docs/html/structfplot__core_1_1x__axis.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - -fplot: fplot_core::x_axis Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::x_axis Type Reference
    -
    -
    - -

    An x-axis object. - More...

    -
    -Inheritance diagram for fplot_core::x_axis:
    -
    -
    - - -fplot_core::plot_axis -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_id_string xa_get_id
     Gets the axis identification string.
     
    - Public Member Functions inherited from fplot_core::plot_axis
    procedure, public get_title pa_get_title
     Gets the axis' title.
     
    procedure, public set_title pa_set_title
     Sets the axis' title.
     
    procedure, public is_title_defined pa_has_title
     Gets a value determining if a title has been defined for the plot_axis object.
     
    procedure, public get_autoscale pa_get_autoscale
     Gets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public set_autoscale pa_set_autoscale
     Sets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public get_limits pa_get_axis_limits
     Gets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public set_limits pa_set_axis_limits
     Sets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public get_is_log_scaled pa_get_log_scale
     Gets a logical value defining if the axis should be log scaled.
     
    procedure, public set_is_log_scaled pa_set_log_scale
     Sets a logical value defining if the axis should be log scaled.
     
    procedure, public get_command_string pa_get_cmd_string
     Returns the appropriate GNUPLOT command string to define the plot_axis properties.
     
    procedure, public get_zero_axis pa_get_zero_axis
     Gets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public set_zero_axis pa_set_zero_axis
     Sets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public get_zero_axis_line_width pa_get_zero_axis_width
     Gets the width of the line used to represent the zero axis line, if active.
     
    procedure, public set_zero_axis_line_width pa_set_zero_axis_width
     Sets the width of the line used to represent the zero axis line, if active.
     
    procedure, public get_use_default_tic_label_format pa_get_use_dft_tic_lbl_fmt
     Gets a value determining if the default tic label format will be used.
     
    procedure, public set_use_default_tic_label_format pa_set_use_dft_tic_lbl_fmt
     Sets a value determining if the default tic label format will be used.
     
    procedure, public get_tic_label_format pa_get_tic_label_fmt
     Gets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    procedure, public set_tic_label_format pa_set_tic_label_fmt
     Sets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character m_id = "x"
     The ID character.
     
    - Public Attributes inherited from fplot_core::plot_axis
    character(len=plotdata_max_name_lengthm_title = ""
     The axis title.
     
    logical m_autoscale = .true.
     Autoscale?
     
    real(real64), dimension(2) m_limits = [0.0d0, 1.0d0]
     Display limits.
     
    logical m_logscale = .false.
     Log scaled?
     
    logical m_zeroaxis = .false.
     Zero axis?
     
    real(real32) m_axiswidth = 1.0
     The width, in pixels, of the zero axis line.
     
    logical m_defaultticlabels = .true.
     Use default tic label format?
     
    character(len=plotdata_max_name_lengthm_ticlabelfmt = "%g"
     The tic label format.
     
    -

    Detailed Description

    -

    An x-axis object.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(x_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe x_axis object.
    -
    -
    -
    Returns
    The string.
    - -

    Definition at line 5666 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::x_axis::get_id_string
    -
    -virtual
    -
    - -

    Gets the axis identification string.

    - -

    Implements fplot_core::plot_axis.

    - -

    Definition at line 5671 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_id

    - -
    -
    - - - - -
    character fplot_core::x_axis::m_id = "x"
    -
    - -

    The ID character.

    - -

    Definition at line 5668 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1x__axis.js b/docs/html/structfplot__core_1_1x__axis.js deleted file mode 100644 index 8cb6837..0000000 --- a/docs/html/structfplot__core_1_1x__axis.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1x__axis = -[ - [ "get_id_string", "structfplot__core_1_1x__axis.html#a7cb8753743161cd7e18a3df9721b5129", null ], - [ "m_id", "structfplot__core_1_1x__axis.html#a1ba3cb85ef3bbd932fa6ada1442aa73f", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1x__axis.png b/docs/html/structfplot__core_1_1x__axis.png deleted file mode 100644 index 2094eaca82e8fc720ff2a0713b0e9e949fc418c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 849 zcmeAS@N?(olHy`uVBq!ia0vp^9U#oX3?#Wzf)jw0bbwEY>;M1%fy@_gzLxeMT5e&W zSs*d}%!>yP9stEn&xS1l%5jzi`2{lo`CwqqH2Vqz1JfN(7srqa#p0&MX z@~u1gvESh(i?7TL4rY2f{p+Xm$D~(QH@Yh%C-2;@d{TG5U#)nH%K0BTukvF4{GKGj z%HbL4uVDH7P9x)kWP64M?BAI_Rg^eg;yy8XG5@4IheuZ!8mt@`I+$1*Gzd`t#5~Sf zeosi5^k*M)%MuL-kFKZ*Q>N{(GorWD9^H~&69^;zS*0f}$&f??mw|YI@ z7t^LN)6Q#c=DKgyqBDh`ZJ89ie7bk%nv2VWRG+DK_(!gHGs>;_yXETUEX6S6@&=yy z#tOxAZd*?Z-5!#%```NQ%Y6T?aSw|wp7N^dk57Nb>)%S-mM=SYrfTjhzS{?{?fJU7 z(EF9;gpJCx!xc_mlV9>JMsU)fT6UnX8zzX@Iu@PV$;^D^n2tE&IS z%8#nK{=U71{9g~gtBAcdYySV62FAkiOp?|`zgy3oxiY=!e|Oi6nSU2CA35W~n3T3i f-NQ?>^g;dmoL*Kb?+1H - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::y2_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::y2_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_autoscalepa_get_autoscalefplot_core::plot_axis
    get_command_stringpa_get_cmd_stringfplot_core::plot_axisvirtual
    get_id_stringy2a_get_idfplot_core::y2_axisvirtual
    get_is_log_scaledpa_get_log_scalefplot_core::plot_axis
    get_limitspa_get_axis_limitsfplot_core::plot_axis
    get_tic_label_formatpa_get_tic_label_fmtfplot_core::plot_axis
    get_titlepa_get_titlefplot_core::plot_axis
    get_use_default_tic_label_formatpa_get_use_dft_tic_lbl_fmtfplot_core::plot_axis
    get_zero_axispa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_widthpa_get_zero_axis_widthfplot_core::plot_axis
    is_title_definedpa_has_titlefplot_core::plot_axis
    m_autoscalefplot_core::plot_axis
    m_axiswidthfplot_core::plot_axis
    m_defaultticlabelsfplot_core::plot_axis
    m_hastitlefplot_core::plot_axisprivate
    m_idfplot_core::y2_axis
    m_limitsfplot_core::plot_axis
    m_logscalefplot_core::plot_axis
    m_ticlabelfmtfplot_core::plot_axis
    m_titlefplot_core::plot_axis
    m_zeroaxisfplot_core::plot_axis
    set_autoscalepa_set_autoscalefplot_core::plot_axis
    set_is_log_scaledpa_set_log_scalefplot_core::plot_axis
    set_limitspa_set_axis_limitsfplot_core::plot_axis
    set_tic_label_formatpa_set_tic_label_fmtfplot_core::plot_axis
    set_titlepa_set_titlefplot_core::plot_axis
    set_use_default_tic_label_formatpa_set_use_dft_tic_lbl_fmtfplot_core::plot_axis
    set_zero_axispa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_widthpa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1y2__axis.html b/docs/html/structfplot__core_1_1y2__axis.html deleted file mode 100644 index a77f83c..0000000 --- a/docs/html/structfplot__core_1_1y2__axis.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - -fplot: fplot_core::y2_axis Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::y2_axis Type Reference
    -
    -
    - -

    A secondary y-axis object. - More...

    -
    -Inheritance diagram for fplot_core::y2_axis:
    -
    -
    - - -fplot_core::plot_axis -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_id_string y2a_get_id
     Gets the axis identification string.
     
    - Public Member Functions inherited from fplot_core::plot_axis
    procedure, public get_title pa_get_title
     Gets the axis' title.
     
    procedure, public set_title pa_set_title
     Sets the axis' title.
     
    procedure, public is_title_defined pa_has_title
     Gets a value determining if a title has been defined for the plot_axis object.
     
    procedure, public get_autoscale pa_get_autoscale
     Gets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public set_autoscale pa_set_autoscale
     Sets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public get_limits pa_get_axis_limits
     Gets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public set_limits pa_set_axis_limits
     Sets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public get_is_log_scaled pa_get_log_scale
     Gets a logical value defining if the axis should be log scaled.
     
    procedure, public set_is_log_scaled pa_set_log_scale
     Sets a logical value defining if the axis should be log scaled.
     
    procedure, public get_command_string pa_get_cmd_string
     Returns the appropriate GNUPLOT command string to define the plot_axis properties.
     
    procedure, public get_zero_axis pa_get_zero_axis
     Gets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public set_zero_axis pa_set_zero_axis
     Sets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public get_zero_axis_line_width pa_get_zero_axis_width
     Gets the width of the line used to represent the zero axis line, if active.
     
    procedure, public set_zero_axis_line_width pa_set_zero_axis_width
     Sets the width of the line used to represent the zero axis line, if active.
     
    procedure, public get_use_default_tic_label_format pa_get_use_dft_tic_lbl_fmt
     Gets a value determining if the default tic label format will be used.
     
    procedure, public set_use_default_tic_label_format pa_set_use_dft_tic_lbl_fmt
     Sets a value determining if the default tic label format will be used.
     
    procedure, public get_tic_label_format pa_get_tic_label_fmt
     Gets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    procedure, public set_tic_label_format pa_set_tic_label_fmt
     Sets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character(len=2) m_id = "y2"
     The ID character.
     
    - Public Attributes inherited from fplot_core::plot_axis
    character(len=plotdata_max_name_lengthm_title = ""
     The axis title.
     
    logical m_autoscale = .true.
     Autoscale?
     
    real(real64), dimension(2) m_limits = [0.0d0, 1.0d0]
     Display limits.
     
    logical m_logscale = .false.
     Log scaled?
     
    logical m_zeroaxis = .false.
     Zero axis?
     
    real(real32) m_axiswidth = 1.0
     The width, in pixels, of the zero axis line.
     
    logical m_defaultticlabels = .true.
     Use default tic label format?
     
    character(len=plotdata_max_name_lengthm_ticlabelfmt = "%g"
     The tic label format.
     
    -

    Detailed Description

    -

    A secondary y-axis object.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(y2_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe y2_axis object.
    -
    -
    -
    Returns
    The string.
    - -

    Definition at line 5702 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::y2_axis::get_id_string
    -
    -virtual
    -
    - -

    Gets the axis identification string.

    - -

    Implements fplot_core::plot_axis.

    - -

    Definition at line 5707 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_id

    - -
    -
    - - - - -
    character(len = 2) fplot_core::y2_axis::m_id = "y2"
    -
    - -

    The ID character.

    - -

    Definition at line 5704 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1y2__axis.js b/docs/html/structfplot__core_1_1y2__axis.js deleted file mode 100644 index fccf0a8..0000000 --- a/docs/html/structfplot__core_1_1y2__axis.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1y2__axis = -[ - [ "get_id_string", "structfplot__core_1_1y2__axis.html#afa3ce73eceaade01e8b3488e5dac9eea", null ], - [ "m_id", "structfplot__core_1_1y2__axis.html#a3d7f8ca15f441f30f988496c798483cb", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1y2__axis.png b/docs/html/structfplot__core_1_1y2__axis.png deleted file mode 100644 index 1bc710ac451f9a59666f24f4713f5240e1e0bb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmeAS@N?(olHy`uVBq!ia0vp^9U#oX3?#Wzf)jw0bbwEY>;M1%fy@_gzLxeMT5e&W zSs*d}%!>yP9stEn&xS1l%5jzi`2{lo`CwqqH2Vqz1Je^v7srqa#5(aOuWxm$?&D z+W8mVK5*}cw2NqsXp2fO_XGoTl{LAMduqAU^Zu<&4Ncky(9f3}#<)^xejw|PPj)2Bxg%_$NB_e~iR-YPKk$gng_Y-TVh5@2xS zV>)ockwLjHi;W3LQLC;U$%YeoLeZPW*^I`3@;~t-c=etQCX6;z@ zLyf~zY@0%2o=3#(O%*@q?VfV(a-yEm<@Ad(!F%t&J|T7^NptS<`|Tk!SMOf5?3sXz z`>WLxd3dky5BnRI=VJPq<;0(tj5l9h*{nSCtB3oozxH(|sbB7a{2m#y_TxO$r0M(e zl6Gbnon7{L#jPCm{%4o6A5YAXKe0)vJ6hr7CG$nf6eTS8Oq8 z5_EB?%V!r9R0iV3Y#tT;Pgb7KjQ{Q6vgF~n3f@Kg?la6}mT%RX@YL_nt!YP3mzP%G zuCzMinr0>ZB06gQET&bjkIUXninfS#{vYt{igVVYtXu(26{SdP1*?eW4v&l*Whw93 zqDA~0&&ZqJe{e(V3bVN2;^kJ0KCd;LxZq0Gjk~5n2j4WWxO#WL+naS4*Xoq}uDi&8 z)MnjQr`*l!+>77-Ew#SGyXnrOcejhwZ_EC2a$o26_kOrbkBo~;j~f%GVhiIR{^h58 V+8a&xg#j}GgQu&X%Q~loCIEasg4+N9 diff --git a/docs/html/structfplot__core_1_1y__axis-members.html b/docs/html/structfplot__core_1_1y__axis-members.html deleted file mode 100644 index 855b3f4..0000000 --- a/docs/html/structfplot__core_1_1y__axis-members.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::y_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::y_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_autoscalepa_get_autoscalefplot_core::plot_axis
    get_command_stringpa_get_cmd_stringfplot_core::plot_axisvirtual
    get_id_stringya_get_idfplot_core::y_axisvirtual
    get_is_log_scaledpa_get_log_scalefplot_core::plot_axis
    get_limitspa_get_axis_limitsfplot_core::plot_axis
    get_tic_label_formatpa_get_tic_label_fmtfplot_core::plot_axis
    get_titlepa_get_titlefplot_core::plot_axis
    get_use_default_tic_label_formatpa_get_use_dft_tic_lbl_fmtfplot_core::plot_axis
    get_zero_axispa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_widthpa_get_zero_axis_widthfplot_core::plot_axis
    is_title_definedpa_has_titlefplot_core::plot_axis
    m_autoscalefplot_core::plot_axis
    m_axiswidthfplot_core::plot_axis
    m_defaultticlabelsfplot_core::plot_axis
    m_hastitlefplot_core::plot_axisprivate
    m_idfplot_core::y_axis
    m_limitsfplot_core::plot_axis
    m_logscalefplot_core::plot_axis
    m_ticlabelfmtfplot_core::plot_axis
    m_titlefplot_core::plot_axis
    m_zeroaxisfplot_core::plot_axis
    set_autoscalepa_set_autoscalefplot_core::plot_axis
    set_is_log_scaledpa_set_log_scalefplot_core::plot_axis
    set_limitspa_set_axis_limitsfplot_core::plot_axis
    set_tic_label_formatpa_set_tic_label_fmtfplot_core::plot_axis
    set_titlepa_set_titlefplot_core::plot_axis
    set_use_default_tic_label_formatpa_set_use_dft_tic_lbl_fmtfplot_core::plot_axis
    set_zero_axispa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_widthpa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1y__axis.html b/docs/html/structfplot__core_1_1y__axis.html deleted file mode 100644 index cd070e2..0000000 --- a/docs/html/structfplot__core_1_1y__axis.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - -fplot: fplot_core::y_axis Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::y_axis Type Reference
    -
    -
    - -

    A y-axis object. - More...

    -
    -Inheritance diagram for fplot_core::y_axis:
    -
    -
    - - -fplot_core::plot_axis -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_id_string ya_get_id
     Gets the axis identification string.
     
    - Public Member Functions inherited from fplot_core::plot_axis
    procedure, public get_title pa_get_title
     Gets the axis' title.
     
    procedure, public set_title pa_set_title
     Sets the axis' title.
     
    procedure, public is_title_defined pa_has_title
     Gets a value determining if a title has been defined for the plot_axis object.
     
    procedure, public get_autoscale pa_get_autoscale
     Gets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public set_autoscale pa_set_autoscale
     Sets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public get_limits pa_get_axis_limits
     Gets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public set_limits pa_set_axis_limits
     Sets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public get_is_log_scaled pa_get_log_scale
     Gets a logical value defining if the axis should be log scaled.
     
    procedure, public set_is_log_scaled pa_set_log_scale
     Sets a logical value defining if the axis should be log scaled.
     
    procedure, public get_command_string pa_get_cmd_string
     Returns the appropriate GNUPLOT command string to define the plot_axis properties.
     
    procedure, public get_zero_axis pa_get_zero_axis
     Gets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public set_zero_axis pa_set_zero_axis
     Sets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public get_zero_axis_line_width pa_get_zero_axis_width
     Gets the width of the line used to represent the zero axis line, if active.
     
    procedure, public set_zero_axis_line_width pa_set_zero_axis_width
     Sets the width of the line used to represent the zero axis line, if active.
     
    procedure, public get_use_default_tic_label_format pa_get_use_dft_tic_lbl_fmt
     Gets a value determining if the default tic label format will be used.
     
    procedure, public set_use_default_tic_label_format pa_set_use_dft_tic_lbl_fmt
     Sets a value determining if the default tic label format will be used.
     
    procedure, public get_tic_label_format pa_get_tic_label_fmt
     Gets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    procedure, public set_tic_label_format pa_set_tic_label_fmt
     Sets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character m_id = "y"
     The ID character.
     
    - Public Attributes inherited from fplot_core::plot_axis
    character(len=plotdata_max_name_lengthm_title = ""
     The axis title.
     
    logical m_autoscale = .true.
     Autoscale?
     
    real(real64), dimension(2) m_limits = [0.0d0, 1.0d0]
     Display limits.
     
    logical m_logscale = .false.
     Log scaled?
     
    logical m_zeroaxis = .false.
     Zero axis?
     
    real(real32) m_axiswidth = 1.0
     The width, in pixels, of the zero axis line.
     
    logical m_defaultticlabels = .true.
     Use default tic label format?
     
    character(len=plotdata_max_name_lengthm_ticlabelfmt = "%g"
     The tic label format.
     
    -

    Detailed Description

    -

    A y-axis object.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(y_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe y_axis object.
    -
    -
    -
    Returns
    The string.
    - -

    Definition at line 5684 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::y_axis::get_id_string
    -
    -virtual
    -
    - -

    Gets the axis identification string.

    - -

    Implements fplot_core::plot_axis.

    - -

    Definition at line 5689 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_id

    - -
    -
    - - - - -
    character fplot_core::y_axis::m_id = "y"
    -
    - -

    The ID character.

    - -

    Definition at line 5686 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1y__axis.js b/docs/html/structfplot__core_1_1y__axis.js deleted file mode 100644 index f105b79..0000000 --- a/docs/html/structfplot__core_1_1y__axis.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1y__axis = -[ - [ "get_id_string", "structfplot__core_1_1y__axis.html#a0e82d7adc90762d6885b22d2abb9651b", null ], - [ "m_id", "structfplot__core_1_1y__axis.html#a14850c501203a783fb7aa0e7ac44e140", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1y__axis.png b/docs/html/structfplot__core_1_1y__axis.png deleted file mode 100644 index 31dc7a4175c7178a3e7633a986ee5b112297b138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmeAS@N?(olHy`uVBq!ia0vp^9U#oX3?#Wzf)jw0bbwEY>;M1%fy@_gzLxeMT5e&W zSs*d}%!>yP9stEn&xS1l%5jzi`2{lo`CwqqH2Vqz1JeUf7srqa#CC+S*R`hpE}Get^2=arZwAv+CH)z$PaiG2 z?%lcOqIyuZplN{PpG&u|dMxXczR+BL!{rWxQLSF%9-;TlnbGeicjfe5yefAy=j>VA zOD5lD2S4^Z?CrkNdigSzQ~Ixu+e?cFeP`--cy_EP-+hwpe80UwtJ7=DO3n5D)p~X@ zwJga{nJ}kV?f}Dwt?~>8P40}9Hf)NLtWQoFvYj+gD9mDTkX2xCVPtX;Awbo0t303M zZeZm3Zy$5Z5)B8BuBZu9uI;vRn>7E2!B*ot4LdsKvnZZC#x-eK(~|JWwDb3~r=F_a z>EmcrJ0Eq8;AFAA{-y126SDRG=G>W7 z#h3E##4}NkO<%=VDu=hI{NE3C-#i7&=Qa(D53=nU5?K0~K2`8I8F8JMoXj&R(c#e* zh6XDKh7Kl{1`Pt#KQRw4&E5nRd(-RV@WNiUzp#+{z(5&kY%G;-5)(^EnJ9H(C9-`Qyv#dOAJ z3;(0f+ZEELS-lHA^6_2Z9S)<~JA2|wW)@lJrd|7Wtn0_0Wp`)${>;ff_x%LhGUi9O zem$1E82niK*1TC#o8|hS3GDj(_2jjhzncpce+p07sr>tWa+=>#x95xM*C|a8dVK%- n85hQ+v_%sgg1j;r{xk2M((^sy_u~Ly24L`X^>bP0l+XkKD-nAN diff --git a/docs/html/structfplot__core_1_1z__axis-members.html b/docs/html/structfplot__core_1_1z__axis-members.html deleted file mode 100644 index 4916d19..0000000 --- a/docs/html/structfplot__core_1_1z__axis-members.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_core::z_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::z_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_autoscalepa_get_autoscalefplot_core::plot_axis
    get_command_stringpa_get_cmd_stringfplot_core::plot_axisvirtual
    get_id_stringza_get_idfplot_core::z_axisvirtual
    get_is_log_scaledpa_get_log_scalefplot_core::plot_axis
    get_limitspa_get_axis_limitsfplot_core::plot_axis
    get_tic_label_formatpa_get_tic_label_fmtfplot_core::plot_axis
    get_titlepa_get_titlefplot_core::plot_axis
    get_use_default_tic_label_formatpa_get_use_dft_tic_lbl_fmtfplot_core::plot_axis
    get_zero_axispa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_widthpa_get_zero_axis_widthfplot_core::plot_axis
    is_title_definedpa_has_titlefplot_core::plot_axis
    m_autoscalefplot_core::plot_axis
    m_axiswidthfplot_core::plot_axis
    m_defaultticlabelsfplot_core::plot_axis
    m_hastitlefplot_core::plot_axisprivate
    m_idfplot_core::z_axis
    m_limitsfplot_core::plot_axis
    m_logscalefplot_core::plot_axis
    m_ticlabelfmtfplot_core::plot_axis
    m_titlefplot_core::plot_axis
    m_zeroaxisfplot_core::plot_axis
    set_autoscalepa_set_autoscalefplot_core::plot_axis
    set_is_log_scaledpa_set_log_scalefplot_core::plot_axis
    set_limitspa_set_axis_limitsfplot_core::plot_axis
    set_tic_label_formatpa_set_tic_label_fmtfplot_core::plot_axis
    set_titlepa_set_titlefplot_core::plot_axis
    set_use_default_tic_label_formatpa_set_use_dft_tic_lbl_fmtfplot_core::plot_axis
    set_zero_axispa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_widthpa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1z__axis.html b/docs/html/structfplot__core_1_1z__axis.html deleted file mode 100644 index f200404..0000000 --- a/docs/html/structfplot__core_1_1z__axis.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - - -fplot: fplot_core::z_axis Type Reference - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.7.1 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_core::z_axis Type Reference
    -
    -
    - -

    A z-axis object. - More...

    -
    -Inheritance diagram for fplot_core::z_axis:
    -
    -
    - - -fplot_core::plot_axis -fplot_core::plot_object - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public get_id_string za_get_id
     Gets the axis identification string.
     
    - Public Member Functions inherited from fplot_core::plot_axis
    procedure, public get_title pa_get_title
     Gets the axis' title.
     
    procedure, public set_title pa_set_title
     Sets the axis' title.
     
    procedure, public is_title_defined pa_has_title
     Gets a value determining if a title has been defined for the plot_axis object.
     
    procedure, public get_autoscale pa_get_autoscale
     Gets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public set_autoscale pa_set_autoscale
     Sets a logical value determining if the axis should be automatically scaled to fit the data.
     
    procedure, public get_limits pa_get_axis_limits
     Gets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public set_limits pa_set_axis_limits
     Sets the axis display limits, assuming autoscaling is not active for this axis.
     
    procedure, public get_is_log_scaled pa_get_log_scale
     Gets a logical value defining if the axis should be log scaled.
     
    procedure, public set_is_log_scaled pa_set_log_scale
     Sets a logical value defining if the axis should be log scaled.
     
    procedure, public get_command_string pa_get_cmd_string
     Returns the appropriate GNUPLOT command string to define the plot_axis properties.
     
    procedure, public get_zero_axis pa_get_zero_axis
     Gets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public set_zero_axis pa_set_zero_axis
     Sets a value determining if the axis should be drawn through zero of opposing axes.
     
    procedure, public get_zero_axis_line_width pa_get_zero_axis_width
     Gets the width of the line used to represent the zero axis line, if active.
     
    procedure, public set_zero_axis_line_width pa_set_zero_axis_width
     Sets the width of the line used to represent the zero axis line, if active.
     
    procedure, public get_use_default_tic_label_format pa_get_use_dft_tic_lbl_fmt
     Gets a value determining if the default tic label format will be used.
     
    procedure, public set_use_default_tic_label_format pa_set_use_dft_tic_lbl_fmt
     Sets a value determining if the default tic label format will be used.
     
    procedure, public get_tic_label_format pa_get_tic_label_fmt
     Gets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    procedure, public set_tic_label_format pa_set_tic_label_fmt
     Sets the tic label format. The format string can be any format string accepted by the C command 'printf.'.
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    character m_id = "z"
     The ID character.
     
    - Public Attributes inherited from fplot_core::plot_axis
    character(len=plotdata_max_name_lengthm_title = ""
     The axis title.
     
    logical m_autoscale = .true.
     Autoscale?
     
    real(real64), dimension(2) m_limits = [0.0d0, 1.0d0]
     Display limits.
     
    logical m_logscale = .false.
     Log scaled?
     
    logical m_zeroaxis = .false.
     Zero axis?
     
    real(real32) m_axiswidth = 1.0
     The width, in pixels, of the zero axis line.
     
    logical m_defaultticlabels = .true.
     Use default tic label format?
     
    character(len=plotdata_max_name_lengthm_ticlabelfmt = "%g"
     The tic label format.
     
    -

    Detailed Description

    -

    A z-axis object.

    -
    Syntax
    character(len = :) function, allocatable get_id_string(class(z_axis) this)
    -
    -
    Parameters
    - - -
    [in]thisThe z_axis object.
    -
    -
    -
    Returns
    The string.
    - -

    Definition at line 5720 of file fplot_core.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ get_id_string()

    - -
    -
    - - - - - -
    - - - - -
    procedure, public fplot_core::z_axis::get_id_string
    -
    -virtual
    -
    - -

    Gets the axis identification string.

    - -

    Implements fplot_core::plot_axis.

    - -

    Definition at line 5725 of file fplot_core.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_id

    - -
    -
    - - - - -
    character fplot_core::z_axis::m_id = "z"
    -
    - -

    The ID character.

    - -

    Definition at line 5722 of file fplot_core.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__core_1_1z__axis.js b/docs/html/structfplot__core_1_1z__axis.js deleted file mode 100644 index 6e8e181..0000000 --- a/docs/html/structfplot__core_1_1z__axis.js +++ /dev/null @@ -1,5 +0,0 @@ -var structfplot__core_1_1z__axis = -[ - [ "get_id_string", "structfplot__core_1_1z__axis.html#a9a72041ffd57f8e2cb109e4d49d0f922", null ], - [ "m_id", "structfplot__core_1_1z__axis.html#addc6091f267c1ac64cb7faaae05f2b63", null ] -]; \ No newline at end of file diff --git a/docs/html/structfplot__core_1_1z__axis.png b/docs/html/structfplot__core_1_1z__axis.png deleted file mode 100644 index e809d44956a43e507befe6ffaae0d27efe80b061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmeAS@N?(olHy`uVBq!ia0vp^9U#oX3?#Wzf)jw0bbwEY>;M1%fy@_gzLxeMT5e&W zSs*d}%!>yP9stEn&xS1l%5jzi`2{lo`CwqqH2Vqz1JgZE7srqa#+viLTH&$YuU1zxLx47Z48_j~ApMIAKOj2T3)I6o2xMb(og%wIC zx$Qh+)xJFopP=->-O(c`rmkjaetpl0 z%@ahvvIr&j$VxESePdv--61|9@kPrL@d@JY@+x;5eyn9=*xJk>V9CKSkpT5qcY;Ln zn}Z!HKWnWyzy@DcP+a3**{AaUhsjpM*hUdSdrqfGQ$)Y>In^bf%HLdm6J9nMAI6X-9nZOdCoA2C=O!oZUcDDSfQ%=}C2Fd^H8gvSe z-kf-*YKhX@U-I(4bALtl=kz_(+4|z6w(X*|@nReInOde@EX*pr>DTvc?fhQ%p!JPD zvXOh4Jg@yz*!sL{!jt#69X+~aT9&+ErIyD9oL(H{NK3oFy?MsW6OLzmwlE7_ySe8N z%g29mxf7D!MG6>i-ZoodeY9=e`;ciTFF%i2`eja=;fg4|_|$v4tYTO9g-ukgy{Ync z>h$Z1u3{J8CfvMm#)VyB(^s}5XPgedO^)H-==@QoL#F-B&NU+JxoKg)Pj+qL4w66X zciaAwvT2W4%G*mzSHJ(>ac|b9C12N`G~8^qec6t - - - - - - -fplot: Member List - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.6.2 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    fplot_string_builder::string_builder Member List
    -
    - -
    - - - - diff --git a/docs/html/structfplot__string__builder_1_1string__builder.html b/docs/html/structfplot__string__builder_1_1string__builder.html deleted file mode 100644 index 5bc9ec2..0000000 --- a/docs/html/structfplot__string__builder_1_1string__builder.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - -fplot: fplot_string_builder::string_builder Type Reference - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot 1.6.2 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    - -
    fplot_string_builder::string_builder Type Reference
    -
    -
    - -

    A mechanism for constructing strings in a piecewise fashion in an efficient manner. - More...

    - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    procedure, public initialize => sb_init
     Initializes the string_builder object. More...
     
    procedure, public append => sb_append
     Appends to the string. More...
     
    procedure, public to_string => sb_to_string
     Returns the contents as a single string. More...
     
    procedure, public get_length => sb_get_length
     Gets the current length of the string being built. More...
     
    procedure, public clear => sb_clear
     Clears the buffer. More...
     
    - - - -

    -Public Attributes

    character(len=:), allocatable m_buffer
     
    - - - -

    -Private Attributes

    integer(int32) m_length = 0
     
    -

    Detailed Description

    -

    A mechanism for constructing strings in a piecewise fashion in an efficient manner.

    - -

    Definition at line 12 of file fplot_string_builder.f90.

    -

    Member Function/Subroutine Documentation

    - -

    ◆ append()

    - -
    -
    - - - - -
    procedure, public fplot_string_builder::string_builder::append
    -
    - -

    Appends to the string.

    -
    Syntax
    subroutine append(class(string_builder) this, character(len = *) txt)
    -
    -
    Parameters
    - - - -
    [in,out]thisThe string_builder object.
    [in]txtThe string to append.
    -
    -
    - -

    Definition at line 35 of file fplot_string_builder.f90.

    - -
    -
    - -

    ◆ clear()

    - -
    -
    - - - - -
    procedure, public fplot_string_builder::string_builder::clear
    -
    - -

    Clears the buffer.

    -
    Syntax
    subroutine clear(class(string_builder) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe string_builder object.
    -
    -
    - -

    Definition at line 64 of file fplot_string_builder.f90.

    - -
    -
    - -

    ◆ get_length()

    - -
    -
    - - - - -
    procedure, public fplot_string_builder::string_builder::get_length
    -
    - -

    Gets the current length of the string being built.

    -
    Syntax
    integer(int32) pure function get_length(class(string_builder) this)
    -
    -
    Parameters
    - - -
    [in]thisThe string_builder object.
    -
    -
    -
    Returns
    Gets the length of the string.
    - -

    Definition at line 55 of file fplot_string_builder.f90.

    - -
    -
    - -

    ◆ initialize()

    - -
    -
    - - - - -
    procedure, public fplot_string_builder::string_builder::initialize
    -
    - -

    Initializes the string_builder object.

    -
    Syntax
    subroutine initialize(class(string_builder) this)
    -
    -
    Parameters
    - - -
    [in,out]thisThe string_builder object.
    -
    -
    - -

    Definition at line 25 of file fplot_string_builder.f90.

    - -
    -
    - -

    ◆ to_string()

    - -
    -
    - - - - -
    procedure, public fplot_string_builder::string_builder::to_string
    -
    - -

    Returns the contents as a single string.

    -
    Syntax
    character(len = :) pure function to_string(class(string_builder) this)
    -
    -
    Parameters
    - - -
    [in]thisThe string_builder object.
    -
    -
    -
    Returns
    Returns the contents as a string.
    - -

    Definition at line 45 of file fplot_string_builder.f90.

    - -
    -
    -

    Member Data Documentation

    - -

    ◆ m_buffer

    - -
    -
    - - - - -
    character(len = :), allocatable fplot_string_builder::string_builder::m_buffer
    -
    - -

    Definition at line 15 of file fplot_string_builder.f90.

    - -
    -
    - -

    ◆ m_length

    - -
    -
    - - - - - -
    - - - - -
    integer(int32) fplot_string_builder::string_builder::m_length = 0
    -
    -private
    -
    - -

    Definition at line 14 of file fplot_string_builder.f90.

    - -
    -
    -
    The documentation for this type was generated from the following file: -
    -
    - - - - diff --git a/docs/html/structfplot__string__builder_1_1string__builder.js b/docs/html/structfplot__string__builder_1_1string__builder.js deleted file mode 100644 index 8e33dac..0000000 --- a/docs/html/structfplot__string__builder_1_1string__builder.js +++ /dev/null @@ -1,8 +0,0 @@ -var structfplot__string__builder_1_1string__builder = -[ - [ "append", "structfplot__string__builder_1_1string__builder.html#ac2fe1b628a58d360a0cb8341b7ed6332", null ], - [ "clear", "structfplot__string__builder_1_1string__builder.html#a3cce60f869f466ca865e99f3d22275ce", null ], - [ "get_length", "structfplot__string__builder_1_1string__builder.html#a8a49743a99c5f0a3a961b84ea5ef4425", null ], - [ "initialize", "structfplot__string__builder_1_1string__builder.html#a9eac15798175a4d8f0a5c7db0de9ad99", null ], - [ "to_string", "structfplot__string__builder_1_1string__builder.html#ac2c78b1d71b5d922a3a02c910256a89a", null ] -]; \ No newline at end of file diff --git a/docs/html/structhalfedge__s-members.html b/docs/html/structhalfedge__s-members.html deleted file mode 100644 index 32a0218..0000000 --- a/docs/html/structhalfedge__s-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    halfedge_s Member List
    -
    -
    - -

    This is the complete list of members for halfedge_s, including all inherited members.

    - - - - - - -
    face (defined in halfedge_s)halfedge_s
    next (defined in halfedge_s)halfedge_s
    pair (defined in halfedge_s)halfedge_s
    prev (defined in halfedge_s)halfedge_s
    vertex (defined in halfedge_s)halfedge_s
    -
    - - - - diff --git a/docs/html/structhalfedge__s.html b/docs/html/structhalfedge__s.html deleted file mode 100644 index 8a0ecc4..0000000 --- a/docs/html/structhalfedge__s.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -fplot: halfedge_s Struct Reference - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    halfedge_s Struct Reference
    -
    -
    - - - - - - - - - - - - -

    -Public Attributes

    -point2d_tvertex
     
    -halfedge_tpair
     
    -halfedge_tnext
     
    -halfedge_tprev
     
    -face_tface
     
    -

    Detailed Description

    -
    -

    Definition at line 68 of file delaunay.c.

    -

    The documentation for this struct was generated from the following file:
      -
    • C:/Users/jchri/Documents/github/fplot/src/delaunay.c
    • -
    -
    -
    - - - - diff --git a/docs/html/structhalfedge__s.js b/docs/html/structhalfedge__s.js deleted file mode 100644 index d671314..0000000 --- a/docs/html/structhalfedge__s.js +++ /dev/null @@ -1,8 +0,0 @@ -var structhalfedge__s = -[ - [ "face", "structhalfedge__s.html#a05bb26108758aa57f8d97128b643f309", null ], - [ "next", "structhalfedge__s.html#a18ff1d6579105a3152729e1403b21ab9", null ], - [ "pair", "structhalfedge__s.html#ab808e86d43a30f6e8b08d82195160193", null ], - [ "prev", "structhalfedge__s.html#a0cdb20dd588cf4b02242dbdc3d309213", null ], - [ "vertex", "structhalfedge__s.html#a4623aa7ceaf05866029b1134d43a1390", null ] -]; \ No newline at end of file diff --git a/docs/html/structpoint2d__s-members.html b/docs/html/structpoint2d__s-members.html deleted file mode 100644 index 4598339..0000000 --- a/docs/html/structpoint2d__s-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    point2d_s Member List
    -
    -
    - -

    This is the complete list of members for point2d_s, including all inherited members.

    - - - - - -
    he (defined in point2d_s)point2d_s
    idx (defined in point2d_s)point2d_s
    x (defined in point2d_s)point2d_s
    y (defined in point2d_s)point2d_s
    -
    - - - - diff --git a/docs/html/structpoint2d__s.html b/docs/html/structpoint2d__s.html deleted file mode 100644 index dacd644..0000000 --- a/docs/html/structpoint2d__s.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -fplot: point2d_s Struct Reference - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    point2d_s Struct Reference
    -
    -
    - - - - - - - - - - -

    -Public Attributes

    -real x
     
    -real y
     
    -halfedge_the
     
    -unsigned int idx
     
    -

    Detailed Description

    -
    -

    Definition at line 57 of file delaunay.c.

    -

    The documentation for this struct was generated from the following file:
      -
    • C:/Users/jchri/Documents/github/fplot/src/delaunay.c
    • -
    -
    -
    - - - - diff --git a/docs/html/structpoint2d__s.js b/docs/html/structpoint2d__s.js deleted file mode 100644 index dbcb19d..0000000 --- a/docs/html/structpoint2d__s.js +++ /dev/null @@ -1,7 +0,0 @@ -var structpoint2d__s = -[ - [ "he", "structpoint2d__s.html#aa3ba48149e1b1bdde17159698cbdd5dd", null ], - [ "idx", "structpoint2d__s.html#a9b2791f7bc116f9d850cf12c01d83424", null ], - [ "x", "structpoint2d__s.html#aaed108d192519666cd776c9566fdba24", null ], - [ "y", "structpoint2d__s.html#a1b7dac869c74baf89d4c651a51e8df52", null ] -]; \ No newline at end of file diff --git a/docs/html/structworking__set__s-members.html b/docs/html/structworking__set__s-members.html deleted file mode 100644 index e48d946..0000000 --- a/docs/html/structworking__set__s-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -fplot: Member List - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    working_set_s Member List
    -
    -
    - -

    This is the complete list of members for working_set_s, including all inherited members.

    - - - - - - - - - -
    edges (defined in working_set_s)working_set_s
    faces (defined in working_set_s)working_set_s
    free_edge (defined in working_set_s)working_set_s
    free_face (defined in working_set_s)working_set_s
    max_edge (defined in working_set_s)working_set_s
    max_face (defined in working_set_s)working_set_s
    num_edges (defined in working_set_s)working_set_s
    num_faces (defined in working_set_s)working_set_s
    -
    - - - - diff --git a/docs/html/structworking__set__s.html b/docs/html/structworking__set__s.html deleted file mode 100644 index ee19a03..0000000 --- a/docs/html/structworking__set__s.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -fplot: working_set_s Struct Reference - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.5.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    working_set_s Struct Reference
    -
    -
    - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    -halfedge_tedges
     
    -face_tfaces
     
    -unsigned int max_edge
     
    -unsigned int max_face
     
    -unsigned int num_edges
     
    -unsigned int num_faces
     
    -halfedge_tfree_edge
     
    -face_tfree_face
     
    -

    Detailed Description

    -
    -

    Definition at line 86 of file delaunay.c.

    -

    The documentation for this struct was generated from the following file:
      -
    • C:/Users/jchri/Documents/github/fplot/src/delaunay.c
    • -
    -
    -
    - - - - diff --git a/docs/html/structworking__set__s.js b/docs/html/structworking__set__s.js deleted file mode 100644 index cea8629..0000000 --- a/docs/html/structworking__set__s.js +++ /dev/null @@ -1,11 +0,0 @@ -var structworking__set__s = -[ - [ "edges", "structworking__set__s.html#af2024c2c5477ba755b63bfa0c93ef7d4", null ], - [ "faces", "structworking__set__s.html#a6bb27b3eb949905c90e50cd3a2e8cd26", null ], - [ "free_edge", "structworking__set__s.html#a8a2e9519ac5cde2bb6bb32ee2212b678", null ], - [ "free_face", "structworking__set__s.html#a34191517f514ad0668320331dbe1f3e3", null ], - [ "max_edge", "structworking__set__s.html#a8844df463e14bf0f88d0c3671184f511", null ], - [ "max_face", "structworking__set__s.html#aeb85953daefa5efc41afdecd534d4863", null ], - [ "num_edges", "structworking__set__s.html#a9b1f8b487cc32cd4c3d0ccbaf9f42073", null ], - [ "num_faces", "structworking__set__s.html#a93cd93f41a6ce387a56e4c3dc0fe2703", null ] -]; \ No newline at end of file diff --git a/docs/html/surface_example_w_cb_label.png b/docs/html/surface_example_w_cb_label.png deleted file mode 100644 index 380ee26ff39dac53c6f230dc3036ea493f2bc1e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84411 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Ã*9m%kj9v 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%0A3tT{Avu8FynpuV;UcK&u301VbSx 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 diff --git a/docs/html/surface_plot_hidden_lines_1.png b/docs/html/surface_plot_hidden_lines_1.png deleted file mode 100644 index f1b33b2c185f1f49615ffe8dde2018a03ad9d25d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159875 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 diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png deleted file mode 100644 index e08320fb64e6fa33b573005ed6d8fe294e19db76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png deleted file mode 100644 index 3b725c41c5a527a3a3e40097077d0e206a681247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 diff --git a/docs/html/tab_ad.png b/docs/html/tab_ad.png deleted file mode 100644 index e34850acfc24be58da6d2fd1ccc6b29cc84fe34d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png deleted file mode 100644 index ab478c95b67371d700a20869f7de1ddd73522d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ diff --git a/docs/html/tab_sd.png b/docs/html/tab_sd.png deleted file mode 100644 index 757a565ced4730f85c833fb2547d8e199ae68f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% diff --git a/docs/html/tabs.css b/docs/html/tabs.css deleted file mode 100644 index fe4854a..0000000 --- a/docs/html/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/docs/html/tripack_8f_source.html b/docs/html/tripack_8f_source.html deleted file mode 100644 index 63d2ebb..0000000 --- a/docs/html/tripack_8f_source.html +++ /dev/null @@ -1,6112 +0,0 @@ - - - - - - - -fplot: D:/Code/fplot/src/tripack.f Source File - - - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    Loading...
    -
    Searching...
    -
    No Matches
    -
    -
    -
    -
    - -
    -
    tripack.f
    -
    -
    -
    1 SUBROUTINE addcst (NCC,LCC,N,X,Y, LWK,IWK,LIST,LPTR,
    -
    2 . LEND, IER)
    -
    3 INTEGER NCC, LCC(*), N, LWK, IWK(LWK), LIST(*),
    -
    4 . lptr(*), lend(n), ier
    -
    5 REAL X(N), Y(N)
    -
    6C
    -
    7C***********************************************************
    -
    8C
    -
    9C From TRIPACK
    -
    10C Robert J. Renka
    -
    11C Dept. of Computer Science
    -
    12C Univ. of North Texas
    -
    13C renka@cs.unt.edu
    -
    14C 11/12/94
    -
    15C
    -
    16C This subroutine provides for creation of a constrained
    -
    17C Delaunay triangulation which, in some sense, covers an
    -
    18C arbitrary connected region R rather than the convex hull
    -
    19C of the nodes. This is achieved simply by forcing the
    -
    20C presence of certain adjacencies (triangulation arcs) cor-
    -
    21C responding to constraint curves. The union of triangles
    -
    22C coincides with the convex hull of the nodes, but triangles
    -
    23C in R can be distinguished from those outside of R. The
    -
    24C only modification required to generalize the definition of
    -
    25C the Delaunay triangulation is replacement of property 5
    -
    26C (refer to TRMESH) by the following:
    -
    27C
    -
    28C 5') If a node is contained in the interior of the cir-
    -
    29C cumcircle of a triangle, then every interior point
    -
    30C of the triangle is separated from the node by a
    -
    31C constraint arc.
    -
    32C
    -
    33C In order to be explicit, we make the following defini-
    -
    34C tions. A constraint region is the open interior of a
    -
    35C simple closed positively oriented polygonal curve defined
    -
    36C by an ordered sequence of three or more distinct nodes
    -
    37C (constraint nodes) P(1),P(2),...,P(K), such that P(I) is
    -
    38C adjacent to P(I+1) for I = 1,...,K with P(K+1) = P(1).
    -
    39C Thus, the constraint region is on the left (and may have
    -
    40C nonfinite area) as the sequence of constraint nodes is
    -
    41C traversed in the specified order. The constraint regions
    -
    42C must not contain nodes and must not overlap. The region
    -
    43C R is the convex hull of the nodes with constraint regions
    -
    44C excluded.
    -
    45C
    -
    46C Note that the terms boundary node and boundary arc are
    -
    47C reserved for nodes and arcs on the boundary of the convex
    -
    48C hull of the nodes.
    -
    49C
    -
    50C The algorithm is as follows: given a triangulation
    -
    51C which includes one or more sets of constraint nodes, the
    -
    52C corresponding adjacencies (constraint arcs) are forced to
    -
    53C be present (Subroutine EDGE). Any additional new arcs
    -
    54C required are chosen to be locally optimal (satisfy the
    -
    55C modified circumcircle property).
    -
    56C
    -
    57C
    -
    58C On input:
    -
    59C
    -
    60C NCC = Number of constraint curves (constraint re-
    -
    61C gions). NCC .GE. 0.
    -
    62C
    -
    63C LCC = Array of length NCC (or dummy array of length
    -
    64C 1 if NCC = 0) containing the index (for X, Y,
    -
    65C and LEND) of the first node of constraint I in
    -
    66C LCC(I) for I = 1 to NCC. Thus, constraint I
    -
    67C contains K = LCC(I+1) - LCC(I) nodes, K .GE.
    -
    68C 3, stored in (X,Y) locations LCC(I), ...,
    -
    69C LCC(I+1)-1, where LCC(NCC+1) = N+1.
    -
    70C
    -
    71C N = Number of nodes in the triangulation, including
    -
    72C constraint nodes. N .GE. 3.
    -
    73C
    -
    74C X,Y = Arrays of length N containing the coordinates
    -
    75C of the nodes with non-constraint nodes in the
    -
    76C first LCC(1)-1 locations, followed by NCC se-
    -
    77C quences of constraint nodes. Only one of
    -
    78C these sequences may be specified in clockwise
    -
    79C order to represent an exterior constraint
    -
    80C curve (a constraint region with nonfinite
    -
    81C area).
    -
    82C
    -
    83C The above parameters are not altered by this routine.
    -
    84C
    -
    85C LWK = Length of IWK. This must be at least 2*NI
    -
    86C where NI is the maximum number of arcs which
    -
    87C intersect a constraint arc to be added. NI
    -
    88C is bounded by N-3.
    -
    89C
    -
    90C IWK = Integer work array of length LWK (used by
    -
    91C Subroutine EDGE to add constraint arcs).
    -
    92C
    -
    93C LIST,LPTR,LEND = Data structure defining the trian-
    -
    94C gulation. Refer to Subroutine
    -
    95C TRMESH.
    -
    96C
    -
    97C On output:
    -
    98C
    -
    99C LWK = Required length of IWK unless IER = 1 or IER =
    -
    100C 3. In the case of IER = 1, LWK is not altered
    -
    101C from its input value.
    -
    102C
    -
    103C IWK = Array containing the endpoint indexes of the
    -
    104C new arcs which were swapped in by the last
    -
    105C call to Subroutine EDGE.
    -
    106C
    -
    107C LIST,LPTR,LEND = Triangulation data structure with
    -
    108C all constraint arcs present unless
    -
    109C IER .NE. 0. These arrays are not
    -
    110C altered if IER = 1.
    -
    111C
    -
    112C IER = Error indicator:
    -
    113C IER = 0 if no errors were encountered.
    -
    114C IER = 1 if NCC, N, or an LCC entry is outside
    -
    115C its valid range, or LWK .LT. 0 on
    -
    116C input.
    -
    117C IER = 2 if more space is required in IWK.
    -
    118C IER = 3 if the triangulation data structure is
    -
    119C invalid, or failure (in EDGE or OPTIM)
    -
    120C was caused by collinear nodes on the
    -
    121C convex hull boundary. An error mes-
    -
    122C sage is written to logical unit 6 in
    -
    123C this case.
    -
    124C IER = 4 if intersecting constraint arcs were
    -
    125C encountered.
    -
    126C IER = 5 if a constraint region contains a
    -
    127C node.
    -
    128C
    -
    129C Modules required by ADDCST: EDGE, LEFT, LSTPTR, OPTIM,
    -
    130C SWAP, SWPTST
    -
    131C
    -
    132C Intrinsic functions called by ADDCST: ABS, MAX
    -
    133C
    -
    134C***********************************************************
    -
    135C
    -
    136 INTEGER I, IFRST, ILAST, K, KBAK, KFOR, KN, LCCIP1,
    -
    137 . lp, lpb, lpf, lpl, lw, lwd2, n1, n2
    -
    138 lwd2 = lwk/2
    -
    139C
    -
    140C Test for errors in input parameters.
    -
    141C
    -
    142 ier = 1
    -
    143 IF (ncc .LT. 0 .OR. lwk .LT. 0) RETURN
    -
    144 IF (ncc .EQ. 0) THEN
    -
    145 IF (n .LT. 3) RETURN
    -
    146 lwk = 0
    -
    147 GO TO 9
    -
    148 ELSE
    -
    149 lccip1 = n+1
    -
    150 DO 1 i = ncc,1,-1
    -
    151 IF (lccip1 - lcc(i) .LT. 3) RETURN
    -
    152 lccip1 = lcc(i)
    -
    153 1 CONTINUE
    -
    154 IF (lccip1 .LT. 1) RETURN
    -
    155 ENDIF
    -
    156C
    -
    157C Force the presence of constraint arcs. The outer loop is
    -
    158C on constraints in reverse order. IFRST and ILAST are
    -
    159C the first and last nodes of constraint I.
    -
    160C
    -
    161 lwk = 0
    -
    162 ifrst = n+1
    -
    163 DO 3 i = ncc,1,-1
    -
    164 ilast = ifrst - 1
    -
    165 ifrst = lcc(i)
    -
    166C
    -
    167C Inner loop on constraint arcs N1-N2 in constraint I.
    -
    168C
    -
    169 n1 = ilast
    -
    170 DO 2 n2 = ifrst,ilast
    -
    171 lw = lwd2
    -
    172 CALL edge (n1,n2,x,y, lw,iwk,list,lptr,lend, ier)
    -
    173 lwk = max(lwk,2*lw)
    -
    174 IF (ier .EQ. 4) ier = 3
    -
    175 IF (ier .NE. 0) RETURN
    -
    176 n1 = n2
    -
    177 2 CONTINUE
    -
    178 3 CONTINUE
    -
    179C
    -
    180C Test for errors. The outer loop is on constraint I with
    -
    181C first and last nodes IFRST and ILAST, and the inner loop
    -
    182C is on constraint nodes K with (KBAK,K,KFOR) a subse-
    -
    183C quence of constraint I.
    -
    184C
    -
    185 ier = 4
    -
    186 ifrst = n+1
    -
    187 DO 8 i = ncc,1,-1
    -
    188 ilast = ifrst - 1
    -
    189 ifrst = lcc(i)
    -
    190 kbak = ilast
    -
    191 DO 7 k = ifrst,ilast
    -
    192 kfor = k + 1
    -
    193 IF (k .EQ. ilast) kfor = ifrst
    -
    194C
    -
    195C Find the LIST pointers LPF and LPB of KFOR and KBAK as
    -
    196C neighbors of K.
    -
    197C
    -
    198 lpf = 0
    -
    199 lpb = 0
    -
    200 lpl = lend(k)
    -
    201 lp = lpl
    -
    202C
    -
    203 4 lp = lptr(lp)
    -
    204 kn = abs(list(lp))
    -
    205 IF (kn .EQ. kfor) lpf = lp
    -
    206 IF (kn .EQ. kbak) lpb = lp
    -
    207 IF (lp .NE. lpl) GO TO 4
    -
    208C
    -
    209C A pair of intersecting constraint arcs was encountered
    -
    210C if and only if a constraint arc is missing (introduc-
    -
    211C tion of the second caused the first to be swapped out).
    -
    212C
    -
    213 IF (lpf .EQ. 0 .OR. lpb .EQ. 0) RETURN
    -
    214C
    -
    215C Loop on neighbors KN of node K which follow KFOR and
    -
    216C precede KBAK. The constraint region contains no nodes
    -
    217C if and only if all such nodes KN are in constraint I.
    -
    218C
    -
    219 lp = lpf
    -
    220 5 lp = lptr(lp)
    -
    221 IF (lp .EQ. lpb) GO TO 6
    -
    222 kn = abs(list(lp))
    -
    223 IF (kn .LT. ifrst .OR. kn .GT. ilast) GO TO 10
    -
    224 GO TO 5
    -
    225C
    -
    226C Bottom of loop.
    -
    227C
    -
    228 6 kbak = k
    -
    229 7 CONTINUE
    -
    230 8 CONTINUE
    -
    231C
    -
    232C No errors encountered.
    -
    233C
    -
    234 9 ier = 0
    -
    235 RETURN
    -
    236C
    -
    237C A constraint region contains a node.
    -
    238C
    -
    239 10 ier = 5
    -
    240 RETURN
    -
    241 END
    -
    242 SUBROUTINE addnod (K,XK,YK,IST,NCC, LCC,N,X,Y,LIST,
    -
    243 . LPTR,LEND,LNEW, IER)
    -
    244 INTEGER K, IST, NCC, LCC(*), N, LIST(*), LPTR(*),
    -
    245 . LEND(*), LNEW, IER
    -
    246 REAL XK, YK, X(*), Y(*)
    -
    247C
    -
    248C***********************************************************
    -
    249C
    -
    250C From TRIPACK
    -
    251C Robert J. Renka
    -
    252C Dept. of Computer Science
    -
    253C Univ. of North Texas
    -
    254C renka@cs.unt.edu
    -
    255C 06/27/98
    -
    256C
    -
    257C Given a triangulation of N nodes in the plane created by
    -
    258C Subroutine TRMESH or TRMSHR, this subroutine updates the
    -
    259C data structure with the addition of a new node in position
    -
    260C K. If node K is inserted into X and Y (K .LE. N) rather
    -
    261C than appended (K = N+1), then a corresponding insertion
    -
    262C must be performed in any additional arrays associated
    -
    263C with the nodes. For example, an array of data values Z
    -
    264C must be shifted down to open up position K for the new
    -
    265C value: set Z(I+1) to Z(I) for I = N,N-1,...,K. For
    -
    266C optimal efficiency, new nodes should be appended whenever
    -
    267C possible. Insertion is necessary, however, to add a non-
    -
    268C constraint node when constraints are present (refer to
    -
    269C Subroutine ADDCST).
    -
    270C
    -
    271C Note that a constraint node cannot be added by this
    -
    272C routine. In order to insert a constraint node, it is
    -
    273C necessary to add the node with no constraints present
    -
    274C (call this routine with NCC = 0), update LCC by increment-
    -
    275C ing the appropriate entries, and then create (or restore)
    -
    276C the constraints by a call to ADDCST.
    -
    277C
    -
    278C The algorithm consists of the following steps: node K
    -
    279C is located relative to the triangulation (TRFIND), its
    -
    280C index is added to the data structure (INTADD or BDYADD),
    -
    281C and a sequence of swaps (SWPTST and SWAP) are applied to
    -
    282C the arcs opposite K so that all arcs incident on node K
    -
    283C and opposite node K (excluding constraint arcs) are local-
    -
    284C ly optimal (satisfy the circumcircle test). Thus, if a
    -
    285C (constrained) Delaunay triangulation is input, a (con-
    -
    286C strained) Delaunay triangulation will result. All indexes
    -
    287C are incremented as necessary for an insertion.
    -
    288C
    -
    289C
    -
    290C On input:
    -
    291C
    -
    292C K = Nodal index (index for X, Y, and LEND) of the
    -
    293C new node to be added. 1 .LE. K .LE. LCC(1).
    -
    294C (K .LE. N+1 if NCC=0).
    -
    295C
    -
    296C XK,YK = Cartesian coordinates of the new node (to be
    -
    297C stored in X(K) and Y(K)). The node must not
    -
    298C lie in a constraint region.
    -
    299C
    -
    300C IST = Index of a node at which TRFIND begins the
    -
    301C search. Search time depends on the proximity
    -
    302C of this node to node K. 1 .LE. IST .LE. N.
    -
    303C
    -
    304C NCC = Number of constraint curves. NCC .GE. 0.
    -
    305C
    -
    306C The above parameters are not altered by this routine.
    -
    307C
    -
    308C LCC = List of constraint curve starting indexes (or
    -
    309C dummy array of length 1 if NCC = 0). Refer to
    -
    310C Subroutine ADDCST.
    -
    311C
    -
    312C N = Number of nodes in the triangulation before K is
    -
    313C added. N .GE. 3. Note that N will be incre-
    -
    314C mented following the addition of node K.
    -
    315C
    -
    316C X,Y = Arrays of length at least N+1 containing the
    -
    317C Cartesian coordinates of the nodes in the
    -
    318C first N positions with non-constraint nodes
    -
    319C in the first LCC(1)-1 locations if NCC > 0.
    -
    320C
    -
    321C LIST,LPTR,LEND,LNEW = Data structure associated with
    -
    322C the triangulation of nodes 1
    -
    323C to N. The arrays must have
    -
    324C sufficient length for N+1
    -
    325C nodes. Refer to TRMESH.
    -
    326C
    -
    327C On output:
    -
    328C
    -
    329C LCC = List of constraint curve starting indexes in-
    -
    330C cremented by 1 to reflect the insertion of K
    -
    331C unless NCC = 0 or (IER .NE. 0 and IER .NE.
    -
    332C -4).
    -
    333C
    -
    334C N = Number of nodes in the triangulation including K
    -
    335C unless IER .NE. 0 and IER .NE. -4. Note that
    -
    336C all comments refer to the input value of N.
    -
    337C
    -
    338C X,Y = Arrays updated with the insertion of XK and YK
    -
    339C in the K-th positions (node I+1 was node I be-
    -
    340C fore the insertion for I = K to N if K .LE. N)
    -
    341C unless IER .NE. 0 and IER .NE. -4.
    -
    342C
    -
    343C LIST,LPTR,LEND,LNEW = Data structure updated with
    -
    344C the addition of node K unless
    -
    345C IER .NE. 0 and IER .NE. -4.
    -
    346C
    -
    347C IER = Error indicator:
    -
    348C IER = 0 if no errors were encountered.
    -
    349C IER = -1 if K, IST, NCC, N, or an LCC entry is
    -
    350C outside its valid range on input.
    -
    351C IER = -2 if all nodes (including K) are col-
    -
    352C linear.
    -
    353C IER = L if nodes L and K coincide for some L.
    -
    354C IER = -3 if K lies in a constraint region.
    -
    355C IER = -4 if an error flag is returned by SWAP
    -
    356C implying that the triangulation
    -
    357C (geometry) was bad on input.
    -
    358C
    -
    359C The errors conditions are tested in the order
    -
    360C specified.
    -
    361C
    -
    362C Modules required by ADDNOD: BDYADD, CRTRI, INDXCC,
    -
    363C INSERT, INTADD, JRAND,
    -
    364C LEFT, LSTPTR, SWAP,
    -
    365C SWPTST, TRFIND
    -
    366C
    -
    367C Intrinsic function called by ADDNOD: ABS
    -
    368C
    -
    369C***********************************************************
    -
    370C
    -
    371 INTEGER INDXCC, LSTPTR
    -
    372 INTEGER I, I1, I2, I3, IBK, IO1, IO2, IN1, KK, L,
    -
    373 . lccip1, lp, lpf, lpo1, nm1
    -
    374 LOGICAL CRTRI, SWPTST
    -
    375 KK = k
    -
    376C
    -
    377C Test for an invalid input parameter.
    -
    378C
    -
    379 IF (kk .LT. 1 .OR. ist .LT. 1 .OR. ist .GT. n
    -
    380 . .OR. ncc .LT. 0 .OR. n .LT. 3) GO TO 7
    -
    381 lccip1 = n+1
    -
    382 DO 1 i = ncc,1,-1
    -
    383 IF (lccip1-lcc(i) .LT. 3) GO TO 7
    -
    384 lccip1 = lcc(i)
    -
    385 1 CONTINUE
    -
    386 IF (kk .GT. lccip1) GO TO 7
    -
    387C
    -
    388C Find a triangle (I1,I2,I3) containing K or the rightmost
    -
    389C (I1) and leftmost (I2) visible boundary nodes as viewed
    -
    390C from node K.
    -
    391C
    -
    392 CALL trfind (ist,xk,yk,n,x,y,list,lptr,lend, i1,i2,i3)
    -
    393C
    -
    394C Test for collinear nodes, duplicate nodes, and K lying in
    -
    395C a constraint region.
    -
    396C
    -
    397 IF (i1 .EQ. 0) GO TO 8
    -
    398 IF (i3 .NE. 0) THEN
    -
    399 l = i1
    -
    400 IF (xk .EQ. x(l) .AND. yk .EQ. y(l)) GO TO 9
    -
    401 l = i2
    -
    402 IF (xk .EQ. x(l) .AND. yk .EQ. y(l)) GO TO 9
    -
    403 l = i3
    -
    404 IF (xk .EQ. x(l) .AND. yk .EQ. y(l)) GO TO 9
    -
    405 IF (ncc .GT. 0 .AND. crtri(ncc,lcc,i1,i2,i3) )
    -
    406 . GO TO 10
    -
    407 ELSE
    -
    408C
    -
    409C K is outside the convex hull of the nodes and lies in a
    -
    410C constraint region iff an exterior constraint curve is
    -
    411C present.
    -
    412C
    -
    413 IF (ncc .GT. 0 .AND. indxcc(ncc,lcc,n,list,lend)
    -
    414 . .NE. 0) GO TO 10
    -
    415 ENDIF
    -
    416C
    -
    417C No errors encountered.
    -
    418C
    -
    419 ier = 0
    -
    420 nm1 = n
    -
    421 n = n + 1
    -
    422 IF (kk .LT. n) THEN
    -
    423C
    -
    424C Open a slot for K in X, Y, and LEND, and increment all
    -
    425C nodal indexes which are greater than or equal to K.
    -
    426C Note that LIST, LPTR, and LNEW are not yet updated with
    -
    427C either the neighbors of K or the edges terminating on K.
    -
    428C
    -
    429 DO 2 ibk = nm1,kk,-1
    -
    430 x(ibk+1) = x(ibk)
    -
    431 y(ibk+1) = y(ibk)
    -
    432 lend(ibk+1) = lend(ibk)
    -
    433 2 CONTINUE
    -
    434 DO 3 i = 1,ncc
    -
    435 lcc(i) = lcc(i) + 1
    -
    436 3 CONTINUE
    -
    437 l = lnew - 1
    -
    438 DO 4 i = 1,l
    -
    439 IF (list(i) .GE. kk) list(i) = list(i) + 1
    -
    440 IF (list(i) .LE. -kk) list(i) = list(i) - 1
    -
    441 4 CONTINUE
    -
    442 IF (i1 .GE. kk) i1 = i1 + 1
    -
    443 IF (i2 .GE. kk) i2 = i2 + 1
    -
    444 IF (i3 .GE. kk) i3 = i3 + 1
    -
    445 ENDIF
    -
    446C
    -
    447C Insert K into X and Y, and update LIST, LPTR, LEND, and
    -
    448C LNEW with the arcs containing node K.
    -
    449C
    -
    450 x(kk) = xk
    -
    451 y(kk) = yk
    -
    452 IF (i3 .EQ. 0) THEN
    -
    453 CALL bdyadd (kk,i1,i2, list,lptr,lend,lnew )
    -
    454 ELSE
    -
    455 CALL intadd (kk,i1,i2,i3, list,lptr,lend,lnew )
    -
    456 ENDIF
    -
    457C
    -
    458C Initialize variables for optimization of the triangula-
    -
    459C tion.
    -
    460C
    -
    461 lp = lend(kk)
    -
    462 lpf = lptr(lp)
    -
    463 io2 = list(lpf)
    -
    464 lpo1 = lptr(lpf)
    -
    465 io1 = abs(list(lpo1))
    -
    466C
    -
    467C Begin loop: find the node opposite K.
    -
    468C
    -
    469 5 lp = lstptr(lend(io1),io2,list,lptr)
    -
    470 IF (list(lp) .LT. 0) GO TO 6
    -
    471 lp = lptr(lp)
    -
    472 in1 = abs(list(lp))
    -
    473 IF ( crtri(ncc,lcc,io1,io2,in1) ) GO TO 6
    -
    474C
    -
    475C Swap test: if a swap occurs, two new arcs are
    -
    476C opposite K and must be tested.
    -
    477C
    -
    478 IF ( .NOT. swptst(in1,kk,io1,io2,x,y) ) GO TO 6
    -
    479 CALL swap (in1,kk,io1,io2, list,lptr,lend, lpo1)
    -
    480 IF (lpo1 .EQ. 0) GO TO 11
    -
    481 io1 = in1
    -
    482 GO TO 5
    -
    483C
    -
    484C No swap occurred. Test for termination and reset
    -
    485C IO2 and IO1.
    -
    486C
    -
    487 6 IF (lpo1 .EQ. lpf .OR. list(lpo1) .LT. 0) RETURN
    -
    488 io2 = io1
    -
    489 lpo1 = lptr(lpo1)
    -
    490 io1 = abs(list(lpo1))
    -
    491 GO TO 5
    -
    492C
    -
    493C A parameter is outside its valid range on input.
    -
    494C
    -
    495 7 ier = -1
    -
    496 RETURN
    -
    497C
    -
    498C All nodes are collinear.
    -
    499C
    -
    500 8 ier = -2
    -
    501 RETURN
    -
    502C
    -
    503C Nodes L and K coincide.
    -
    504C
    -
    505 9 ier = l
    -
    506 RETURN
    -
    507C
    -
    508C Node K lies in a constraint region.
    -
    509C
    -
    510 10 ier = -3
    -
    511 RETURN
    -
    512C
    -
    513C Zero pointer returned by SWAP.
    -
    514C
    -
    515 11 ier = -4
    -
    516 RETURN
    -
    517 END
    -
    518 REAL FUNCTION AREAP (X,Y,NB,NODES)
    -
    519 INTEGER NB, NODES(NB)
    -
    520 REAL X(*), Y(*)
    -
    521C
    -
    522C***********************************************************
    -
    523C
    -
    524C From TRIPACK
    -
    525C Robert J. Renka
    -
    526C Dept. of Computer Science
    -
    527C Univ. of North Texas
    -
    528C renka@cs.unt.edu
    -
    529C 09/21/90
    -
    530C
    -
    531C Given a sequence of NB points in the plane, this func-
    -
    532C tion computes the signed area bounded by the closed poly-
    -
    533C gonal curve which passes through the points in the
    -
    534C specified order. Each simple closed curve is positively
    -
    535C oriented (bounds positive area) if and only if the points
    -
    536C are specified in counterclockwise order. The last point
    -
    537C of the curve is taken to be the first point specified, and
    -
    538C this point should therefore not be specified twice.
    -
    539C
    -
    540C The area of a triangulation may be computed by calling
    -
    541C AREAP with values of NB and NODES determined by Subroutine
    -
    542C BNODES.
    -
    543C
    -
    544C
    -
    545C On input:
    -
    546C
    -
    547C X,Y = Arrays of length N containing the Cartesian
    -
    548C coordinates of a set of points in the plane
    -
    549C for some N .GE. NB.
    -
    550C
    -
    551C NB = Length of NODES.
    -
    552C
    -
    553C NODES = Array of length NB containing the ordered
    -
    554C sequence of nodal indexes (in the range
    -
    555C 1 to N) which define the polygonal curve.
    -
    556C
    -
    557C Input parameters are not altered by this function.
    -
    558C
    -
    559C On output:
    -
    560C
    -
    561C AREAP = Signed area bounded by the polygonal curve,
    -
    562C or zero if NB < 3.
    -
    563C
    -
    564C Modules required by AREAP: None
    -
    565C
    -
    566C***********************************************************
    -
    567C
    -
    568 INTEGER I, ND1, ND2, NNB
    -
    569 REAL A
    -
    570C
    -
    571C Local parameters:
    -
    572C
    -
    573C A = Partial sum of signed (and doubled) trapezoid
    -
    574C areas
    -
    575C I = DO-loop and NODES index
    -
    576C ND1,ND2 = Elements of NODES
    -
    577C NNB = Local copy of NB
    -
    578C
    -
    579 nnb = nb
    -
    580 a = 0.
    -
    581 IF (nnb .LT. 3) GO TO 2
    -
    582 nd2 = nodes(nnb)
    -
    583C
    -
    584C Loop on line segments NODES(I-1) -> NODES(I), where
    -
    585C NODES(0) = NODES(NB), adding twice the signed trapezoid
    -
    586C areas (integrals of the linear interpolants) to A.
    -
    587C
    -
    588 DO 1 i = 1,nnb
    -
    589 nd1 = nd2
    -
    590 nd2 = nodes(i)
    -
    591 a = a + (x(nd2)-x(nd1))*(y(nd1)+y(nd2))
    -
    592 1 CONTINUE
    -
    593C
    -
    594C A contains twice the negative signed area of the region.
    -
    595C
    -
    596 2 areap = -a/2.
    -
    597 RETURN
    -
    598 END
    -
    599 SUBROUTINE bdyadd (KK,I1,I2, LIST,LPTR,LEND,LNEW )
    -
    600 INTEGER KK, I1, I2, LIST(*), LPTR(*), LEND(*), LNEW
    -
    601C
    -
    602C***********************************************************
    -
    603C
    -
    604C From TRIPACK
    -
    605C Robert J. Renka
    -
    606C Dept. of Computer Science
    -
    607C Univ. of North Texas
    -
    608C renka@cs.unt.edu
    -
    609C 02/22/91
    -
    610C
    -
    611C This subroutine adds a boundary node to a triangulation
    -
    612C of a set of points in the plane. The data structure is
    -
    613C updated with the insertion of node KK, but no optimization
    -
    614C is performed.
    -
    615C
    -
    616C
    -
    617C On input:
    -
    618C
    -
    619C KK = Index of a node to be connected to the sequence
    -
    620C of all visible boundary nodes. KK .GE. 1 and
    -
    621C KK must not be equal to I1 or I2.
    -
    622C
    -
    623C I1 = First (rightmost as viewed from KK) boundary
    -
    624C node in the triangulation which is visible from
    -
    625C node KK (the line segment KK-I1 intersects no
    -
    626C arcs.
    -
    627C
    -
    628C I2 = Last (leftmost) boundary node which is visible
    -
    629C from node KK. I1 and I2 may be determined by
    -
    630C Subroutine TRFIND.
    -
    631C
    -
    632C The above parameters are not altered by this routine.
    -
    633C
    -
    634C LIST,LPTR,LEND,LNEW = Triangulation data structure
    -
    635C created by TRMESH or TRMSHR.
    -
    636C Nodes I1 and I2 must be in-
    -
    637C cluded in the triangulation.
    -
    638C
    -
    639C On output:
    -
    640C
    -
    641C LIST,LPTR,LEND,LNEW = Data structure updated with
    -
    642C the addition of node KK. Node
    -
    643C KK is connected to I1, I2, and
    -
    644C all boundary nodes in between.
    -
    645C
    -
    646C Module required by BDYADD: INSERT
    -
    647C
    -
    648C***********************************************************
    -
    649C
    -
    650 INTEGER K, LP, LSAV, N1, N2, NEXT, NSAV
    -
    651 K = kk
    -
    652 n1 = i1
    -
    653 n2 = i2
    -
    654C
    -
    655C Add K as the last neighbor of N1.
    -
    656C
    -
    657 lp = lend(n1)
    -
    658 lsav = lptr(lp)
    -
    659 lptr(lp) = lnew
    -
    660 list(lnew) = -k
    -
    661 lptr(lnew) = lsav
    -
    662 lend(n1) = lnew
    -
    663 lnew = lnew + 1
    -
    664 next = -list(lp)
    -
    665 list(lp) = next
    -
    666 nsav = next
    -
    667C
    -
    668C Loop on the remaining boundary nodes between N1 and N2,
    -
    669C adding K as the first neighbor.
    -
    670C
    -
    671 1 lp = lend(next)
    -
    672 CALL insert (k,lp,list,lptr,lnew)
    -
    673 IF (next .EQ. n2) GO TO 2
    -
    674 next = -list(lp)
    -
    675 list(lp) = next
    -
    676 GO TO 1
    -
    677C
    -
    678C Add the boundary nodes between N1 and N2 as neighbors
    -
    679C of node K.
    -
    680C
    -
    681 2 lsav = lnew
    -
    682 list(lnew) = n1
    -
    683 lptr(lnew) = lnew + 1
    -
    684 lnew = lnew + 1
    -
    685 next = nsav
    -
    686C
    -
    687 3 IF (next .EQ. n2) GO TO 4
    -
    688 list(lnew) = next
    -
    689 lptr(lnew) = lnew + 1
    -
    690 lnew = lnew + 1
    -
    691 lp = lend(next)
    -
    692 next = list(lp)
    -
    693 GO TO 3
    -
    694C
    -
    695 4 list(lnew) = -n2
    -
    696 lptr(lnew) = lsav
    -
    697 lend(k) = lnew
    -
    698 lnew = lnew + 1
    -
    699 RETURN
    -
    700 END
    -
    701 SUBROUTINE bnodes (N,LIST,LPTR,LEND, NODES,NB,NA,NT)
    -
    702 INTEGER N, LIST(*), LPTR(*), LEND(N), NODES(*), NB,
    -
    703 . na, nt
    -
    704C
    -
    705C***********************************************************
    -
    706C
    -
    707C From TRIPACK
    -
    708C Robert J. Renka
    -
    709C Dept. of Computer Science
    -
    710C Univ. of North Texas
    -
    711C renka@cs.unt.edu
    -
    712C 09/01/88
    -
    713C
    -
    714C Given a triangulation of N points in the plane, this
    -
    715C subroutine returns an array containing the indexes, in
    -
    716C counterclockwise order, of the nodes on the boundary of
    -
    717C the convex hull of the set of points.
    -
    718C
    -
    719C
    -
    720C On input:
    -
    721C
    -
    722C N = Number of nodes in the triangulation. N .GE. 3.
    -
    723C
    -
    724C LIST,LPTR,LEND = Data structure defining the trian-
    -
    725C gulation. Refer to Subroutine
    -
    726C TRMESH.
    -
    727C
    -
    728C The above parameters are not altered by this routine.
    -
    729C
    -
    730C NODES = Integer array of length at least NB
    -
    731C (NB .LE. N).
    -
    732C
    -
    733C On output:
    -
    734C
    -
    735C NODES = Ordered sequence of boundary node indexes
    -
    736C in the range 1 to N.
    -
    737C
    -
    738C NB = Number of boundary nodes.
    -
    739C
    -
    740C NA,NT = Number of arcs and triangles, respectively,
    -
    741C in the triangulation.
    -
    742C
    -
    743C Modules required by BNODES: None
    -
    744C
    -
    745C***********************************************************
    -
    746C
    -
    747 INTEGER K, LP, N0, NST
    -
    748C
    -
    749C Set NST to the first boundary node encountered.
    -
    750C
    -
    751 nst = 1
    -
    752 1 lp = lend(nst)
    -
    753 IF (list(lp) .LT. 0) GO TO 2
    -
    754 nst = nst + 1
    -
    755 GO TO 1
    -
    756C
    -
    757C Initialization.
    -
    758C
    -
    759 2 nodes(1) = nst
    -
    760 k = 1
    -
    761 n0 = nst
    -
    762C
    -
    763C Traverse the boundary in counterclockwise order.
    -
    764C
    -
    765 3 lp = lend(n0)
    -
    766 lp = lptr(lp)
    -
    767 n0 = list(lp)
    -
    768 IF (n0 .EQ. nst) GO TO 4
    -
    769 k = k + 1
    -
    770 nodes(k) = n0
    -
    771 GO TO 3
    -
    772C
    -
    773C Termination.
    -
    774C
    -
    775 4 nb = k
    -
    776 nt = 2*n - nb - 2
    -
    777 na = nt + n - 1
    -
    778 RETURN
    -
    779 END
    -
    780 SUBROUTINE circum (X1,Y1,X2,Y2,X3,Y3,RATIO, XC,YC,CR,
    -
    781 . SA,AR)
    -
    782 LOGICAL RATIO
    -
    783 REAL X1, Y1, X2, Y2, X3, Y3, XC, YC, CR, SA, AR
    -
    784C
    -
    785C***********************************************************
    -
    786C
    -
    787C From TRIPACK
    -
    788C Robert J. Renka
    -
    789C Dept. of Computer Science
    -
    790C Univ. of North Texas
    -
    791C renka@cs.unt.edu
    -
    792C 12/10/96
    -
    793C
    -
    794C Given three vertices defining a triangle, this subrou-
    -
    795C tine returns the circumcenter, circumradius, signed
    -
    796C triangle area, and, optionally, the aspect ratio of the
    -
    797C triangle.
    -
    798C
    -
    799C
    -
    800C On input:
    -
    801C
    -
    802C X1,...,Y3 = Cartesian coordinates of the vertices.
    -
    803C
    -
    804C RATIO = Logical variable with value TRUE if and only
    -
    805C if the aspect ratio is to be computed.
    -
    806C
    -
    807C Input parameters are not altered by this routine.
    -
    808C
    -
    809C On output:
    -
    810C
    -
    811C XC,YC = Cartesian coordinates of the circumcenter
    -
    812C (center of the circle defined by the three
    -
    813C points) unless SA = 0, in which XC and YC
    -
    814C are not altered.
    -
    815C
    -
    816C CR = Circumradius (radius of the circle defined by
    -
    817C the three points) unless SA = 0 (infinite
    -
    818C radius), in which case CR is not altered.
    -
    819C
    -
    820C SA = Signed triangle area with positive value if
    -
    821C and only if the vertices are specified in
    -
    822C counterclockwise order: (X3,Y3) is strictly
    -
    823C to the left of the directed line from (X1,Y1)
    -
    824C toward (X2,Y2).
    -
    825C
    -
    826C AR = Aspect ratio r/CR, where r is the radius of the
    -
    827C inscribed circle, unless RATIO = FALSE, in
    -
    828C which case AR is not altered. AR is in the
    -
    829C range 0 to .5, with value 0 iff SA = 0 and
    -
    830C value .5 iff the vertices define an equilateral
    -
    831C triangle.
    -
    832C
    -
    833C Modules required by CIRCUM: None
    -
    834C
    -
    835C Intrinsic functions called by CIRCUM: ABS, SQRT
    -
    836C
    -
    837C***********************************************************
    -
    838C
    -
    839 INTEGER I
    -
    840 REAL DS(3), FX, FY, U(3), V(3)
    -
    841C
    -
    842C Set U(K) and V(K) to the x and y components, respectively,
    -
    843C of the directed edge opposite vertex K.
    -
    844C
    -
    845 u(1) = x3 - x2
    -
    846 u(2) = x1 - x3
    -
    847 u(3) = x2 - x1
    -
    848 v(1) = y3 - y2
    -
    849 v(2) = y1 - y3
    -
    850 v(3) = y2 - y1
    -
    851C
    -
    852C Set SA to the signed triangle area.
    -
    853C
    -
    854 sa = (u(1)*v(2) - u(2)*v(1))/2.
    -
    855 IF (sa .EQ. 0.) THEN
    -
    856 IF (ratio) ar = 0.
    -
    857 RETURN
    -
    858 ENDIF
    -
    859C
    -
    860C Set DS(K) to the squared distance from the origin to
    -
    861C vertex K.
    -
    862C
    -
    863 ds(1) = x1*x1 + y1*y1
    -
    864 ds(2) = x2*x2 + y2*y2
    -
    865 ds(3) = x3*x3 + y3*y3
    -
    866C
    -
    867C Compute factors of XC and YC.
    -
    868C
    -
    869 fx = 0.
    -
    870 fy = 0.
    -
    871 DO 1 i = 1,3
    -
    872 fx = fx - ds(i)*v(i)
    -
    873 fy = fy + ds(i)*u(i)
    -
    874 1 CONTINUE
    -
    875 xc = fx/(4.*sa)
    -
    876 yc = fy/(4.*sa)
    -
    877 cr = sqrt( (xc-x1)**2 + (yc-y1)**2 )
    -
    878 IF (.NOT. ratio) RETURN
    -
    879C
    -
    880C Compute the squared edge lengths and aspect ratio.
    -
    881C
    -
    882 DO 2 i = 1,3
    -
    883 ds(i) = u(i)*u(i) + v(i)*v(i)
    -
    884 2 CONTINUE
    -
    885 ar = 2.*abs(sa)/
    -
    886 . ( (sqrt(ds(1)) + sqrt(ds(2)) + sqrt(ds(3)))*cr )
    -
    887 RETURN
    -
    888 END
    -
    889 LOGICAL FUNCTION crtri (NCC,LCC,I1,I2,I3)
    -
    890 INTEGER NCC, LCC(*), I1, I2, I3
    -
    891C
    -
    892C***********************************************************
    -
    893C
    -
    894C From TRIPACK
    -
    895C Robert J. Renka
    -
    896C Dept. of Computer Science
    -
    897C Univ. of North Texas
    -
    898C renka@cs.unt.edu
    -
    899C 08/14/91
    -
    900C
    -
    901C This function returns TRUE if and only if triangle (I1,
    -
    902C I2,I3) lies in a constraint region.
    -
    903C
    -
    904C
    -
    905C On input:
    -
    906C
    -
    907C NCC,LCC = Constraint data structure. Refer to Sub-
    -
    908C routine ADDCST.
    -
    909C
    -
    910C I1,I2,I3 = Nodal indexes of the counterclockwise-
    -
    911C ordered vertices of a triangle.
    -
    912C
    -
    913C Input parameters are altered by this function.
    -
    914C
    -
    915C CRTRI = TRUE iff (I1,I2,I3) is a constraint region
    -
    916C triangle.
    -
    917C
    -
    918C Note that input parameters are not tested for validity.
    -
    919C
    -
    920C Modules required by CRTRI: None
    -
    921C
    -
    922C Intrinsic functions called by CRTRI: MAX, MIN
    -
    923C
    -
    924C***********************************************************
    -
    925C
    -
    926 INTEGER I, IMAX, IMIN
    -
    927 IMAX = max(i1,i2,i3)
    -
    928C
    -
    929C Find the index I of the constraint containing IMAX.
    -
    930C
    -
    931 i = ncc + 1
    -
    932 1 i = i - 1
    -
    933 IF (i .LE. 0) GO TO 2
    -
    934 IF (imax .LT. lcc(i)) GO TO 1
    -
    935 imin = min(i1,i2,i3)
    -
    936C
    -
    937C P lies in a constraint region iff I1, I2, and I3 are nodes
    -
    938C of the same constraint (IMIN >= LCC(I)), and (IMIN,IMAX)
    -
    939C is (I1,I3), (I2,I1), or (I3,I2).
    -
    940C
    -
    941 crtri = imin .GE. lcc(i) .AND. ((imin .EQ. i1 .AND.
    -
    942 . imax .EQ. i3) .OR. (imin .EQ. i2 .AND.
    -
    943 . imax .EQ. i1) .OR. (imin .EQ. i3 .AND.
    -
    944 . imax .EQ. i2))
    -
    945 RETURN
    -
    946C
    -
    947C NCC .LE. 0 or all vertices are non-constraint nodes.
    -
    948C
    -
    949 2 crtri = .false.
    -
    950 RETURN
    -
    951 END
    -
    952 SUBROUTINE delarc (N,IO1,IO2, LIST,LPTR,LEND,
    -
    953 . LNEW, IER)
    -
    954 INTEGER N, IO1, IO2, LIST(*), LPTR(*), LEND(N), LNEW,
    -
    955 . ier
    -
    956C
    -
    957C***********************************************************
    -
    958C
    -
    959C From TRIPACK
    -
    960C Robert J. Renka
    -
    961C Dept. of Computer Science
    -
    962C Univ. of North Texas
    -
    963C renka@cs.unt.edu
    -
    964C 11/12/94
    -
    965C
    -
    966C This subroutine deletes a boundary arc from a triangula-
    -
    967C tion. It may be used to remove a null triangle from the
    -
    968C convex hull boundary. Note, however, that if the union of
    -
    969C triangles is rendered nonconvex, Subroutines DELNOD, EDGE,
    -
    970C and TRFIND may fail. Thus, Subroutines ADDCST, ADDNOD,
    -
    971C DELNOD, EDGE, and NEARND should not be called following
    -
    972C an arc deletion.
    -
    973C
    -
    974C
    -
    975C On input:
    -
    976C
    -
    977C N = Number of nodes in the triangulation. N .GE. 4.
    -
    978C
    -
    979C IO1,IO2 = Indexes (in the range 1 to N) of a pair of
    -
    980C adjacent boundary nodes defining the arc
    -
    981C to be removed.
    -
    982C
    -
    983C The above parameters are not altered by this routine.
    -
    984C
    -
    985C LIST,LPTR,LEND,LNEW = Triangulation data structure
    -
    986C created by TRMESH or TRMSHR.
    -
    987C
    -
    988C On output:
    -
    989C
    -
    990C LIST,LPTR,LEND,LNEW = Data structure updated with
    -
    991C the removal of arc IO1-IO2
    -
    992C unless IER > 0.
    -
    993C
    -
    994C IER = Error indicator:
    -
    995C IER = 0 if no errors were encountered.
    -
    996C IER = 1 if N, IO1, or IO2 is outside its valid
    -
    997C range, or IO1 = IO2.
    -
    998C IER = 2 if IO1-IO2 is not a boundary arc.
    -
    999C IER = 3 if the node opposite IO1-IO2 is al-
    -
    1000C ready a boundary node, and thus IO1
    -
    1001C or IO2 has only two neighbors or a
    -
    1002C deletion would result in two triangu-
    -
    1003C lations sharing a single node.
    -
    1004C IER = 4 if one of the nodes is a neighbor of
    -
    1005C the other, but not vice versa, imply-
    -
    1006C ing an invalid triangulation data
    -
    1007C structure.
    -
    1008C
    -
    1009C Modules required by DELARC: DELNB, LSTPTR
    -
    1010C
    -
    1011C Intrinsic function called by DELARC: ABS
    -
    1012C
    -
    1013C***********************************************************
    -
    1014C
    -
    1015 INTEGER LSTPTR
    -
    1016 INTEGER LP, LPH, LPL, N1, N2, N3
    -
    1017 N1 = io1
    -
    1018 n2 = io2
    -
    1019C
    -
    1020C Test for errors, and set N1->N2 to the directed boundary
    -
    1021C edge associated with IO1-IO2: (N1,N2,N3) is a triangle
    -
    1022C for some N3.
    -
    1023C
    -
    1024 IF (n .LT. 4 .OR. n1 .LT. 1 .OR. n1 .GT. n .OR.
    -
    1025 . n2 .LT. 1 .OR. n2 .GT. n .OR. n1 .EQ. n2) THEN
    -
    1026 ier = 1
    -
    1027 RETURN
    -
    1028 ENDIF
    -
    1029C
    -
    1030 lpl = lend(n2)
    -
    1031 IF (-list(lpl) .NE. n1) THEN
    -
    1032 n1 = n2
    -
    1033 n2 = io1
    -
    1034 lpl = lend(n2)
    -
    1035 IF (-list(lpl) .NE. n1) THEN
    -
    1036 ier = 2
    -
    1037 RETURN
    -
    1038 ENDIF
    -
    1039 ENDIF
    -
    1040C
    -
    1041C Set N3 to the node opposite N1->N2 (the second neighbor
    -
    1042C of N1), and test for error 3 (N3 already a boundary
    -
    1043C node).
    -
    1044C
    -
    1045 lpl = lend(n1)
    -
    1046 lp = lptr(lpl)
    -
    1047 lp = lptr(lp)
    -
    1048 n3 = abs(list(lp))
    -
    1049 lpl = lend(n3)
    -
    1050 IF (list(lpl) .LE. 0) THEN
    -
    1051 ier = 3
    -
    1052 RETURN
    -
    1053 ENDIF
    -
    1054C
    -
    1055C Delete N2 as a neighbor of N1, making N3 the first
    -
    1056C neighbor, and test for error 4 (N2 not a neighbor
    -
    1057C of N1). Note that previously computed pointers may
    -
    1058C no longer be valid following the call to DELNB.
    -
    1059C
    -
    1060 CALL delnb (n1,n2,n, list,lptr,lend,lnew, lph)
    -
    1061 IF (lph .LT. 0) THEN
    -
    1062 ier = 4
    -
    1063 RETURN
    -
    1064 ENDIF
    -
    1065C
    -
    1066C Delete N1 as a neighbor of N2, making N3 the new last
    -
    1067C neighbor.
    -
    1068C
    -
    1069 CALL delnb (n2,n1,n, list,lptr,lend,lnew, lph)
    -
    1070C
    -
    1071C Make N3 a boundary node with first neighbor N2 and last
    -
    1072C neighbor N1.
    -
    1073C
    -
    1074 lp = lstptr(lend(n3),n1,list,lptr)
    -
    1075 lend(n3) = lp
    -
    1076 list(lp) = -n1
    -
    1077C
    -
    1078C No errors encountered.
    -
    1079C
    -
    1080 ier = 0
    -
    1081 RETURN
    -
    1082 END
    -
    1083 SUBROUTINE delnb (N0,NB,N, LIST,LPTR,LEND,LNEW, LPH)
    -
    1084 INTEGER N0, NB, N, LIST(*), LPTR(*), LEND(N), LNEW,
    -
    1085 . lph
    -
    1086C
    -
    1087C***********************************************************
    -
    1088C
    -
    1089C From TRIPACK
    -
    1090C Robert J. Renka
    -
    1091C Dept. of Computer Science
    -
    1092C Univ. of North Texas
    -
    1093C renka@cs.unt.edu
    -
    1094C 07/30/98
    -
    1095C
    -
    1096C This subroutine deletes a neighbor NB from the adjacency
    -
    1097C list of node N0 (but N0 is not deleted from the adjacency
    -
    1098C list of NB) and, if NB is a boundary node, makes N0 a
    -
    1099C boundary node. For pointer (LIST index) LPH to NB as a
    -
    1100C neighbor of N0, the empty LIST,LPTR location LPH is filled
    -
    1101C in with the values at LNEW-1, pointer LNEW-1 (in LPTR and
    -
    1102C possibly in LEND) is changed to LPH, and LNEW is decremen-
    -
    1103C ted. This requires a search of LEND and LPTR entailing an
    -
    1104C expected operation count of O(N).
    -
    1105C
    -
    1106C
    -
    1107C On input:
    -
    1108C
    -
    1109C N0,NB = Indexes, in the range 1 to N, of a pair of
    -
    1110C nodes such that NB is a neighbor of N0.
    -
    1111C (N0 need not be a neighbor of NB.)
    -
    1112C
    -
    1113C N = Number of nodes in the triangulation. N .GE. 3.
    -
    1114C
    -
    1115C The above parameters are not altered by this routine.
    -
    1116C
    -
    1117C LIST,LPTR,LEND,LNEW = Data structure defining the
    -
    1118C triangulation.
    -
    1119C
    -
    1120C On output:
    -
    1121C
    -
    1122C LIST,LPTR,LEND,LNEW = Data structure updated with
    -
    1123C the removal of NB from the ad-
    -
    1124C jacency list of N0 unless
    -
    1125C LPH < 0.
    -
    1126C
    -
    1127C LPH = List pointer to the hole (NB as a neighbor of
    -
    1128C N0) filled in by the values at LNEW-1 or error
    -
    1129C indicator:
    -
    1130C LPH > 0 if no errors were encountered.
    -
    1131C LPH = -1 if N0, NB, or N is outside its valid
    -
    1132C range.
    -
    1133C LPH = -2 if NB is not a neighbor of N0.
    -
    1134C
    -
    1135C Modules required by DELNB: None
    -
    1136C
    -
    1137C Intrinsic function called by DELNB: ABS
    -
    1138C
    -
    1139C***********************************************************
    -
    1140C
    -
    1141 INTEGER I, LNW, LP, LPB, LPL, LPP, NN
    -
    1142C
    -
    1143C Local parameters:
    -
    1144C
    -
    1145C I = DO-loop index
    -
    1146C LNW = LNEW-1 (output value of LNEW)
    -
    1147C LP = LIST pointer of the last neighbor of NB
    -
    1148C LPB = Pointer to NB as a neighbor of N0
    -
    1149C LPL = Pointer to the last neighbor of N0
    -
    1150C LPP = Pointer to the neighbor of N0 that precedes NB
    -
    1151C NN = Local copy of N
    -
    1152C
    -
    1153 nn = n
    -
    1154C
    -
    1155C Test for error 1.
    -
    1156C
    -
    1157 IF (n0 .LT. 1 .OR. n0 .GT. nn .OR. nb .LT. 1 .OR.
    -
    1158 . nb .GT. nn .OR. nn .LT. 3) THEN
    -
    1159 lph = -1
    -
    1160 RETURN
    -
    1161 ENDIF
    -
    1162C
    -
    1163C Find pointers to neighbors of N0:
    -
    1164C
    -
    1165C LPL points to the last neighbor,
    -
    1166C LPP points to the neighbor NP preceding NB, and
    -
    1167C LPB points to NB.
    -
    1168C
    -
    1169 lpl = lend(n0)
    -
    1170 lpp = lpl
    -
    1171 lpb = lptr(lpp)
    -
    1172 1 IF (list(lpb) .EQ. nb) GO TO 2
    -
    1173 lpp = lpb
    -
    1174 lpb = lptr(lpp)
    -
    1175 IF (lpb .NE. lpl) GO TO 1
    -
    1176C
    -
    1177C Test for error 2 (NB not found).
    -
    1178C
    -
    1179 IF (abs(list(lpb)) .NE. nb) THEN
    -
    1180 lph = -2
    -
    1181 RETURN
    -
    1182 ENDIF
    -
    1183C
    -
    1184C NB is the last neighbor of N0. Make NP the new last
    -
    1185C neighbor and, if NB is a boundary node, then make N0
    -
    1186C a boundary node.
    -
    1187C
    -
    1188 lend(n0) = lpp
    -
    1189 lp = lend(nb)
    -
    1190 IF (list(lp) .LT. 0) list(lpp) = -list(lpp)
    -
    1191 GO TO 3
    -
    1192C
    -
    1193C NB is not the last neighbor of N0. If NB is a boundary
    -
    1194C node and N0 is not, then make N0 a boundary node with
    -
    1195C last neighbor NP.
    -
    1196C
    -
    1197 2 lp = lend(nb)
    -
    1198 IF (list(lp) .LT. 0 .AND. list(lpl) .GT. 0) THEN
    -
    1199 lend(n0) = lpp
    -
    1200 list(lpp) = -list(lpp)
    -
    1201 ENDIF
    -
    1202C
    -
    1203C Update LPTR so that the neighbor following NB now fol-
    -
    1204C lows NP, and fill in the hole at location LPB.
    -
    1205C
    -
    1206 3 lptr(lpp) = lptr(lpb)
    -
    1207 lnw = lnew-1
    -
    1208 list(lpb) = list(lnw)
    -
    1209 lptr(lpb) = lptr(lnw)
    -
    1210 DO 4 i = nn,1,-1
    -
    1211 IF (lend(i) .EQ. lnw) THEN
    -
    1212 lend(i) = lpb
    -
    1213 GO TO 5
    -
    1214 ENDIF
    -
    1215 4 CONTINUE
    -
    1216C
    -
    1217 5 DO 6 i = 1,lnw-1
    -
    1218 IF (lptr(i) .EQ. lnw) THEN
    -
    1219 lptr(i) = lpb
    -
    1220 ENDIF
    -
    1221 6 CONTINUE
    -
    1222C
    -
    1223C No errors encountered.
    -
    1224C
    -
    1225 lnew = lnw
    -
    1226 lph = lpb
    -
    1227 RETURN
    -
    1228 END
    -
    1229 SUBROUTINE delnod (K,NCC, LCC,N,X,Y,LIST,LPTR,LEND,
    -
    1230 . LNEW,LWK,IWK, IER)
    -
    1231 INTEGER K, NCC, LCC(*), N, LIST(*), LPTR(*),
    -
    1232 . lend(*), lnew, lwk, iwk(2,*), ier
    -
    1233 REAL X(*), Y(*)
    -
    1234C
    -
    1235C***********************************************************
    -
    1236C
    -
    1237C From TRIPACK
    -
    1238C Robert J. Renka
    -
    1239C Dept. of Computer Science
    -
    1240C Univ. of North Texas
    -
    1241C renka@cs.unt.edu
    -
    1242C 06/28/98
    -
    1243C
    -
    1244C This subroutine deletes node K (along with all arcs
    -
    1245C incident on node K) from a triangulation of N nodes in the
    -
    1246C plane, and inserts arcs as necessary to produce a triangu-
    -
    1247C lation of the remaining N-1 nodes. If a Delaunay triangu-
    -
    1248C lation is input, a Delaunay triangulation will result, and
    -
    1249C thus, DELNOD reverses the effect of a call to Subroutine
    -
    1250C ADDNOD.
    -
    1251C
    -
    1252C Note that a constraint node cannot be deleted by this
    -
    1253C routine. In order to delete a constraint node, it is
    -
    1254C necessary to call this routine with NCC = 0, decrement the
    -
    1255C appropriate LCC entries (LCC(I) such that LCC(I) > K), and
    -
    1256C then create (or restore) the constraints by a call to Sub-
    -
    1257C routine ADDCST.
    -
    1258C
    -
    1259C
    -
    1260C On input:
    -
    1261C
    -
    1262C K = Index (for X and Y) of the node to be deleted.
    -
    1263C 1 .LE. K .LT. LCC(1). (K .LE. N if NCC=0).
    -
    1264C
    -
    1265C NCC = Number of constraint curves. NCC .GE. 0.
    -
    1266C
    -
    1267C The above parameters are not altered by this routine.
    -
    1268C
    -
    1269C LCC = List of constraint curve starting indexes (or
    -
    1270C dummy array of length 1 if NCC = 0). Refer to
    -
    1271C Subroutine ADDCST.
    -
    1272C
    -
    1273C N = Number of nodes in the triangulation on input.
    -
    1274C N .GE. 4. Note that N will be decremented
    -
    1275C following the deletion.
    -
    1276C
    -
    1277C X,Y = Arrays of length N containing the coordinates
    -
    1278C of the nodes with non-constraint nodes in the
    -
    1279C first LCC(1)-1 locations if NCC > 0.
    -
    1280C
    -
    1281C LIST,LPTR,LEND,LNEW = Data structure defining the
    -
    1282C triangulation. Refer to Sub-
    -
    1283C routine TRMESH.
    -
    1284C
    -
    1285C LWK = Number of columns reserved for IWK. LWK must
    -
    1286C be at least NNB-3, where NNB is the number of
    -
    1287C neighbors of node K, including an extra
    -
    1288C pseudo-node if K is a boundary node.
    -
    1289C
    -
    1290C IWK = Integer work array dimensioned 2 by LWK (or
    -
    1291C array of length .GE. 2*LWK).
    -
    1292C
    -
    1293C On output:
    -
    1294C
    -
    1295C LCC = List of constraint curve starting indexes de-
    -
    1296C cremented by 1 to reflect the deletion of K
    -
    1297C unless NCC = 0 or 1 .LE. IER .LE. 4.
    -
    1298C
    -
    1299C N = New number of nodes (input value minus one) un-
    -
    1300C less 1 .LE. IER .LE. 4.
    -
    1301C
    -
    1302C X,Y = Updated arrays of length N-1 containing nodal
    -
    1303C coordinates (with elements K+1,...,N shifted
    -
    1304C up a position and thus overwriting element K)
    -
    1305C unless 1 .LE. IER .LE. 4. (N here denotes the
    -
    1306C input value.)
    -
    1307C
    -
    1308C LIST,LPTR,LEND,LNEW = Updated triangulation data
    -
    1309C structure reflecting the dele-
    -
    1310C tion unless IER .NE. 0. Note
    -
    1311C that the data structure may
    -
    1312C have been altered if IER .GE.
    -
    1313C 3.
    -
    1314C
    -
    1315C LWK = Number of IWK columns required unless IER = 1
    -
    1316C or IER = 3.
    -
    1317C
    -
    1318C IWK = Indexes of the endpoints of the new arcs added
    -
    1319C unless LWK = 0 or 1 .LE. IER .LE. 4. (Arcs
    -
    1320C are associated with columns, or pairs of
    -
    1321C adjacent elements if IWK is declared as a
    -
    1322C singly-subscripted array.)
    -
    1323C
    -
    1324C IER = Error indicator:
    -
    1325C IER = 0 if no errors were encountered.
    -
    1326C IER = 1 if K, NCC, N, or an LCC entry is out-
    -
    1327C side its valid range or LWK < 0 on
    -
    1328C input.
    -
    1329C IER = 2 if more space is required in IWK.
    -
    1330C Refer to LWK.
    -
    1331C IER = 3 if the triangulation data structure is
    -
    1332C invalid on input.
    -
    1333C IER = 4 if K is an interior node with 4 or
    -
    1334C more neighbors, and the number of
    -
    1335C neighbors could not be reduced to 3
    -
    1336C by swaps. This could be caused by
    -
    1337C floating point errors with collinear
    -
    1338C nodes or by an invalid data structure.
    -
    1339C IER = 5 if an error flag was returned by
    -
    1340C OPTIM. An error message is written
    -
    1341C to the standard output unit in this
    -
    1342C event.
    -
    1343C
    -
    1344C Note that the deletion may result in all remaining nodes
    -
    1345C being collinear. This situation is not flagged.
    -
    1346C
    -
    1347C Modules required by DELNOD: DELNB, LEFT, LSTPTR, NBCNT,
    -
    1348C OPTIM, SWAP, SWPTST
    -
    1349C
    -
    1350C Intrinsic function called by DELNOD: ABS
    -
    1351C
    -
    1352C***********************************************************
    -
    1353C
    -
    1354 INTEGER LSTPTR, NBCNT
    -
    1355 LOGICAL LEFT
    -
    1356 INTEGER I, IERR, IWL, J, LCCIP1, LNW, LP, LP21, LPF,
    -
    1357 . LPH, LPL, LPL2, LPN, LWKL, N1, N2, NFRST, NIT,
    -
    1358 . NL, NN, NNB, NR
    -
    1359 LOGICAL BDRY
    -
    1360 REAL X1, X2, XL, XR, Y1, Y2, YL, YR
    -
    1361C
    -
    1362C Set N1 to K and NNB to the number of neighbors of N1 (plus
    -
    1363C one if N1 is a boundary node), and test for errors. LPF
    -
    1364C and LPL are LIST indexes of the first and last neighbors
    -
    1365C of N1, IWL is the number of IWK columns containing arcs,
    -
    1366C and BDRY is TRUE iff N1 is a boundary node.
    -
    1367C
    -
    1368 n1 = k
    -
    1369 nn = n
    -
    1370 IF (ncc .LT. 0 .OR. n1 .LT. 1 .OR. nn .LT. 4 .OR.
    -
    1371 . lwk .LT. 0) GO TO 21
    -
    1372 lccip1 = nn+1
    -
    1373 DO 1 i = ncc,1,-1
    -
    1374 IF (lccip1-lcc(i) .LT. 3) GO TO 21
    -
    1375 lccip1 = lcc(i)
    -
    1376 1 CONTINUE
    -
    1377 IF (n1 .GE. lccip1) GO TO 21
    -
    1378 lpl = lend(n1)
    -
    1379 lpf = lptr(lpl)
    -
    1380 nnb = nbcnt(lpl,lptr)
    -
    1381 bdry = list(lpl) .LT. 0
    -
    1382 IF (bdry) nnb = nnb + 1
    -
    1383 IF (nnb .LT. 3) GO TO 23
    -
    1384 lwkl = lwk
    -
    1385 lwk = nnb - 3
    -
    1386 IF (lwkl .LT. lwk) GO TO 22
    -
    1387 iwl = 0
    -
    1388 IF (nnb .EQ. 3) GO TO 5
    -
    1389C
    -
    1390C Initialize for loop on arcs N1-N2 for neighbors N2 of N1,
    -
    1391C beginning with the second neighbor. NR and NL are the
    -
    1392C neighbors preceding and following N2, respectively, and
    -
    1393C LP indexes NL. The loop is exited when all possible
    -
    1394C swaps have been applied to arcs incident on N1. If N1
    -
    1395C is interior, the number of neighbors will be reduced
    -
    1396C to 3.
    -
    1397C
    -
    1398 x1 = x(n1)
    -
    1399 y1 = y(n1)
    -
    1400 nfrst = list(lpf)
    -
    1401 nr = nfrst
    -
    1402 xr = x(nr)
    -
    1403 yr = y(nr)
    -
    1404 lp = lptr(lpf)
    -
    1405 n2 = list(lp)
    -
    1406 x2 = x(n2)
    -
    1407 y2 = y(n2)
    -
    1408 lp = lptr(lp)
    -
    1409C
    -
    1410C Top of loop: set NL to the neighbor following N2.
    -
    1411C
    -
    1412 2 nl = abs(list(lp))
    -
    1413 IF (nl .EQ. nfrst .AND. bdry) GO TO 5
    -
    1414 xl = x(nl)
    -
    1415 yl = y(nl)
    -
    1416C
    -
    1417C Test for a convex quadrilateral. To avoid an incorrect
    -
    1418C test caused by collinearity, use the fact that if N1
    -
    1419C is a boundary node, then N1 LEFT NR->NL and if N2 is
    -
    1420C a boundary node, then N2 LEFT NL->NR.
    -
    1421C
    -
    1422 lpl2 = lend(n2)
    -
    1423 IF ( (bdry .OR. left(xr,yr,xl,yl,x1,y1)) .AND.
    -
    1424 . (list(lpl2) .LT. 0 .OR.
    -
    1425 . left(xl,yl,xr,yr,x2,y2)) ) GO TO 3
    -
    1426C
    -
    1427C Nonconvex quadrilateral -- no swap is possible.
    -
    1428C
    -
    1429 nr = n2
    -
    1430 xr = x2
    -
    1431 yr = y2
    -
    1432 GO TO 4
    -
    1433C
    -
    1434C The quadrilateral defined by adjacent triangles
    -
    1435C (N1,N2,NL) and (N2,N1,NR) is convex. Swap in
    -
    1436C NL-NR and store it in IWK. Indexes larger than N1
    -
    1437C must be decremented since N1 will be deleted from
    -
    1438C X and Y.
    -
    1439C
    -
    1440 3 CALL swap (nl,nr,n1,n2, list,lptr,lend, lp21)
    -
    1441 iwl = iwl + 1
    -
    1442 IF (nl .LE. n1) THEN
    -
    1443 iwk(1,iwl) = nl
    -
    1444 ELSE
    -
    1445 iwk(1,iwl) = nl - 1
    -
    1446 ENDIF
    -
    1447 IF (nr .LE. n1) THEN
    -
    1448 iwk(2,iwl) = nr
    -
    1449 ELSE
    -
    1450 iwk(2,iwl) = nr - 1
    -
    1451 ENDIF
    -
    1452C
    -
    1453C Recompute the LIST indexes LPL,LP and decrement NNB.
    -
    1454C
    -
    1455 lpl = lend(n1)
    -
    1456 nnb = nnb - 1
    -
    1457 IF (nnb .EQ. 3) GO TO 5
    -
    1458 lp = lstptr(lpl,nl,list,lptr)
    -
    1459 IF (nr .EQ. nfrst) GO TO 4
    -
    1460C
    -
    1461C NR is not the first neighbor of N1.
    -
    1462C Back up and test N1-NR for a swap again: Set N2 to
    -
    1463C NR and NR to the previous neighbor of N1 -- the
    -
    1464C neighbor of NR which follows N1. LP21 points to NL
    -
    1465C as a neighbor of NR.
    -
    1466C
    -
    1467 n2 = nr
    -
    1468 x2 = xr
    -
    1469 y2 = yr
    -
    1470 lp21 = lptr(lp21)
    -
    1471 lp21 = lptr(lp21)
    -
    1472 nr = abs(list(lp21))
    -
    1473 xr = x(nr)
    -
    1474 yr = y(nr)
    -
    1475 GO TO 2
    -
    1476C
    -
    1477C Bottom of loop -- test for invalid termination.
    -
    1478C
    -
    1479 4 IF (n2 .EQ. nfrst) GO TO 24
    -
    1480 n2 = nl
    -
    1481 x2 = xl
    -
    1482 y2 = yl
    -
    1483 lp = lptr(lp)
    -
    1484 GO TO 2
    -
    1485C
    -
    1486C Delete N1 from the adjacency list of N2 for all neighbors
    -
    1487C N2 of N1. LPL points to the last neighbor of N1.
    -
    1488C LNEW is stored in local variable LNW.
    -
    1489C
    -
    1490 5 lp = lpl
    -
    1491 lnw = lnew
    -
    1492C
    -
    1493C Loop on neighbors N2 of N1, beginning with the first.
    -
    1494C
    -
    1495 6 lp = lptr(lp)
    -
    1496 n2 = abs(list(lp))
    -
    1497 CALL delnb (n2,n1,n, list,lptr,lend,lnw, lph)
    -
    1498 IF (lph .LT. 0) GO TO 23
    -
    1499C
    -
    1500C LP and LPL may require alteration.
    -
    1501C
    -
    1502 IF (lpl .EQ. lnw) lpl = lph
    -
    1503 IF (lp .EQ. lnw) lp = lph
    -
    1504 IF (lp .NE. lpl) GO TO 6
    -
    1505C
    -
    1506C Delete N1 from X, Y, and LEND, and remove its adjacency
    -
    1507C list from LIST and LPTR. LIST entries (nodal indexes)
    -
    1508C which are larger than N1 must be decremented.
    -
    1509C
    -
    1510 nn = nn - 1
    -
    1511 IF (n1 .GT. nn) GO TO 9
    -
    1512 DO 7 i = n1,nn
    -
    1513 x(i) = x(i+1)
    -
    1514 y(i) = y(i+1)
    -
    1515 lend(i) = lend(i+1)
    -
    1516 7 CONTINUE
    -
    1517C
    -
    1518 DO 8 i = 1,lnw-1
    -
    1519 IF (list(i) .GT. n1) list(i) = list(i) - 1
    -
    1520 IF (list(i) .LT. -n1) list(i) = list(i) + 1
    -
    1521 8 CONTINUE
    -
    1522C
    -
    1523C For LPN = first to last neighbors of N1, delete the
    -
    1524C preceding neighbor (indexed by LP).
    -
    1525C
    -
    1526C Each empty LIST,LPTR location LP is filled in with the
    -
    1527C values at LNW-1, and LNW is decremented. All pointers
    -
    1528C (including those in LPTR and LEND) with value LNW-1
    -
    1529C must be changed to LP.
    -
    1530C
    -
    1531C LPL points to the last neighbor of N1.
    -
    1532C
    -
    1533 9 IF (bdry) nnb = nnb - 1
    -
    1534 lpn = lpl
    -
    1535 DO 13 j = 1,nnb
    -
    1536 lnw = lnw - 1
    -
    1537 lp = lpn
    -
    1538 lpn = lptr(lp)
    -
    1539 list(lp) = list(lnw)
    -
    1540 lptr(lp) = lptr(lnw)
    -
    1541 IF (lptr(lpn) .EQ. lnw) lptr(lpn) = lp
    -
    1542 IF (lpn .EQ. lnw) lpn = lp
    -
    1543 DO 10 i = nn,1,-1
    -
    1544 IF (lend(i) .EQ. lnw) THEN
    -
    1545 lend(i) = lp
    -
    1546 GO TO 11
    -
    1547 ENDIF
    -
    1548 10 CONTINUE
    -
    1549C
    -
    1550 11 DO 12 i = lnw-1,1,-1
    -
    1551 IF (lptr(i) .EQ. lnw) lptr(i) = lp
    -
    1552 12 CONTINUE
    -
    1553 13 CONTINUE
    -
    1554C
    -
    1555C Decrement LCC entries.
    -
    1556C
    -
    1557 DO 14 i = 1,ncc
    -
    1558 lcc(i) = lcc(i) - 1
    -
    1559 14 CONTINUE
    -
    1560C
    -
    1561C Update N and LNEW, and optimize the patch of triangles
    -
    1562C containing K (on input) by applying swaps to the arcs
    -
    1563C in IWK.
    -
    1564C
    -
    1565 n = nn
    -
    1566 lnew = lnw
    -
    1567 IF (iwl .GT. 0) THEN
    -
    1568 nit = 4*iwl
    -
    1569 CALL optim (x,y,iwl, list,lptr,lend,nit,iwk, ierr)
    -
    1570 IF (ierr .NE. 0) GO TO 25
    -
    1571 ENDIF
    -
    1572C
    -
    1573C Successful termination.
    -
    1574C
    -
    1575 ier = 0
    -
    1576 RETURN
    -
    1577C
    -
    1578C Invalid input parameter.
    -
    1579C
    -
    1580 21 ier = 1
    -
    1581 RETURN
    -
    1582C
    -
    1583C Insufficient space reserved for IWK.
    -
    1584C
    -
    1585 22 ier = 2
    -
    1586 RETURN
    -
    1587C
    -
    1588C Invalid triangulation data structure. NNB < 3 on input or
    -
    1589C N2 is a neighbor of N1 but N1 is not a neighbor of N2.
    -
    1590C
    -
    1591 23 ier = 3
    -
    1592 RETURN
    -
    1593C
    -
    1594C K is an interior node with 4 or more neighbors, but the
    -
    1595C number of neighbors could not be reduced.
    -
    1596C
    -
    1597 24 ier = 4
    -
    1598 RETURN
    -
    1599C
    -
    1600C Error flag returned by OPTIM.
    -
    1601C
    -
    1602 25 ier = 5
    -
    1603 WRITE (*,100) nit, ierr
    -
    1604 RETURN
    -
    1605 100 FORMAT (//5x,'*** Error in OPTIM: NIT = ',i4,
    -
    1606 . ', IER = ',i1,' ***'/)
    -
    1607 END
    -
    1608 SUBROUTINE edge (IN1,IN2,X,Y, LWK,IWK,LIST,LPTR,
    -
    1609 . LEND, IER)
    -
    1610 INTEGER IN1, IN2, LWK, IWK(2,*), LIST(*), LPTR(*),
    -
    1611 . lend(*), ier
    -
    1612 REAL X(*), Y(*)
    -
    1613C
    -
    1614C***********************************************************
    -
    1615C
    -
    1616C From TRIPACK
    -
    1617C Robert J. Renka
    -
    1618C Dept. of Computer Science
    -
    1619C Univ. of North Texas
    -
    1620C renka@cs.unt.edu
    -
    1621C 06/23/98
    -
    1622C
    -
    1623C Given a triangulation of N nodes and a pair of nodal
    -
    1624C indexes IN1 and IN2, this routine swaps arcs as necessary
    -
    1625C to force IN1 and IN2 to be adjacent. Only arcs which
    -
    1626C intersect IN1-IN2 are swapped out. If a Delaunay triangu-
    -
    1627C lation is input, the resulting triangulation is as close
    -
    1628C as possible to a Delaunay triangulation in the sense that
    -
    1629C all arcs other than IN1-IN2 are locally optimal.
    -
    1630C
    -
    1631C A sequence of calls to EDGE may be used to force the
    -
    1632C presence of a set of edges defining the boundary of a non-
    -
    1633C convex and/or multiply connected region (refer to Subrou-
    -
    1634C tine ADDCST), or to introduce barriers into the triangula-
    -
    1635C tion. Note that Subroutine GETNP will not necessarily
    -
    1636C return closest nodes if the triangulation has been con-
    -
    1637C strained by a call to EDGE. However, this is appropriate
    -
    1638C in some applications, such as triangle-based interpolation
    -
    1639C on a nonconvex domain.
    -
    1640C
    -
    1641C
    -
    1642C On input:
    -
    1643C
    -
    1644C IN1,IN2 = Indexes (of X and Y) in the range 1 to N
    -
    1645C defining a pair of nodes to be connected
    -
    1646C by an arc.
    -
    1647C
    -
    1648C X,Y = Arrays of length N containing the Cartesian
    -
    1649C coordinates of the nodes.
    -
    1650C
    -
    1651C The above parameters are not altered by this routine.
    -
    1652C
    -
    1653C LWK = Number of columns reserved for IWK. This must
    -
    1654C be at least NI -- the number of arcs which
    -
    1655C intersect IN1-IN2. (NI is bounded by N-3.)
    -
    1656C
    -
    1657C IWK = Integer work array of length at least 2*LWK.
    -
    1658C
    -
    1659C LIST,LPTR,LEND = Data structure defining the trian-
    -
    1660C gulation. Refer to Subroutine
    -
    1661C TRMESH.
    -
    1662C
    -
    1663C On output:
    -
    1664C
    -
    1665C LWK = Number of arcs which intersect IN1-IN2 (but
    -
    1666C not more than the input value of LWK) unless
    -
    1667C IER = 1 or IER = 3. LWK = 0 if and only if
    -
    1668C IN1 and IN2 were adjacent (or LWK=0) on input.
    -
    1669C
    -
    1670C IWK = Array containing the indexes of the endpoints
    -
    1671C of the new arcs other than IN1-IN2 unless IER
    -
    1672C .GT. 0 or LWK = 0. New arcs to the left of
    -
    1673C IN2-IN1 are stored in the first K-1 columns
    -
    1674C (left portion of IWK), column K contains
    -
    1675C zeros, and new arcs to the right of IN2-IN1
    -
    1676C occupy columns K+1,...,LWK. (K can be deter-
    -
    1677C mined by searching IWK for the zeros.)
    -
    1678C
    -
    1679C LIST,LPTR,LEND = Data structure updated if necessary
    -
    1680C to reflect the presence of an arc
    -
    1681C connecting IN1 and IN2 unless IER
    -
    1682C .NE. 0. The data structure has
    -
    1683C been altered if IER = 4.
    -
    1684C
    -
    1685C IER = Error indicator:
    -
    1686C IER = 0 if no errors were encountered.
    -
    1687C IER = 1 if IN1 .LT. 1, IN2 .LT. 1, IN1 = IN2,
    -
    1688C or LWK .LT. 0 on input.
    -
    1689C IER = 2 if more space is required in IWK.
    -
    1690C IER = 3 if IN1 and IN2 could not be connected
    -
    1691C due to either an invalid data struc-
    -
    1692C ture or collinear nodes (and floating
    -
    1693C point error).
    -
    1694C IER = 4 if an error flag was returned by
    -
    1695C OPTIM.
    -
    1696C
    -
    1697C An error message is written to the standard output unit
    -
    1698C in the case of IER = 3 or IER = 4.
    -
    1699C
    -
    1700C Modules required by EDGE: LEFT, LSTPTR, OPTIM, SWAP,
    -
    1701C SWPTST
    -
    1702C
    -
    1703C Intrinsic function called by EDGE: ABS
    -
    1704C
    -
    1705C***********************************************************
    -
    1706C
    -
    1707 LOGICAL LEFT
    -
    1708 INTEGER I, IERR, IWC, IWCP1, IWEND, IWF, IWL, LFT, LP,
    -
    1709 . LPL, LP21, NEXT, NIT, NL, NR, N0, N1, N2,
    -
    1710 . N1FRST, N1LST
    -
    1711 REAL DX, DY, X0, Y0, X1, Y1, X2, Y2
    -
    1712C
    -
    1713C Local parameters:
    -
    1714C
    -
    1715C DX,DY = Components of arc N1-N2
    -
    1716C I = DO-loop index and column index for IWK
    -
    1717C IERR = Error flag returned by Subroutine OPTIM
    -
    1718C IWC = IWK index between IWF and IWL -- NL->NR is
    -
    1719C stored in IWK(1,IWC)->IWK(2,IWC)
    -
    1720C IWCP1 = IWC + 1
    -
    1721C IWEND = Input or output value of LWK
    -
    1722C IWF = IWK (column) index of the first (leftmost) arc
    -
    1723C which intersects IN1->IN2
    -
    1724C IWL = IWK (column) index of the last (rightmost) are
    -
    1725C which intersects IN1->IN2
    -
    1726C LFT = Flag used to determine if a swap results in the
    -
    1727C new arc intersecting IN1-IN2 -- LFT = 0 iff
    -
    1728C N0 = IN1, LFT = -1 implies N0 LEFT IN1->IN2,
    -
    1729C and LFT = 1 implies N0 LEFT IN2->IN1
    -
    1730C LP21 = Unused parameter returned by SWAP
    -
    1731C LP = List pointer (index) for LIST and LPTR
    -
    1732C LPL = Pointer to the last neighbor of IN1 or NL
    -
    1733C N0 = Neighbor of N1 or node opposite NR->NL
    -
    1734C N1,N2 = Local copies of IN1 and IN2
    -
    1735C N1FRST = First neighbor of IN1
    -
    1736C N1LST = (Signed) last neighbor of IN1
    -
    1737C NEXT = Node opposite NL->NR
    -
    1738C NIT = Flag or number of iterations employed by OPTIM
    -
    1739C NL,NR = Endpoints of an arc which intersects IN1-IN2
    -
    1740C with NL LEFT IN1->IN2
    -
    1741C X0,Y0 = Coordinates of N0
    -
    1742C X1,Y1 = Coordinates of IN1
    -
    1743C X2,Y2 = Coordinates of IN2
    -
    1744C
    -
    1745C
    -
    1746C Store IN1, IN2, and LWK in local variables and test for
    -
    1747C errors.
    -
    1748C
    -
    1749 n1 = in1
    -
    1750 n2 = in2
    -
    1751 iwend = lwk
    -
    1752 IF (n1 .LT. 1 .OR. n2 .LT. 1 .OR. n1 .EQ. n2 .OR.
    -
    1753 . iwend .LT. 0) GO TO 31
    -
    1754C
    -
    1755C Test for N2 as a neighbor of N1. LPL points to the last
    -
    1756C neighbor of N1.
    -
    1757C
    -
    1758 lpl = lend(n1)
    -
    1759 n0 = abs(list(lpl))
    -
    1760 lp = lpl
    -
    1761 1 IF (n0 .EQ. n2) GO TO 30
    -
    1762 lp = lptr(lp)
    -
    1763 n0 = list(lp)
    -
    1764 IF (lp .NE. lpl) GO TO 1
    -
    1765C
    -
    1766C Initialize parameters.
    -
    1767C
    -
    1768 iwl = 0
    -
    1769 nit = 0
    -
    1770C
    -
    1771C Store the coordinates of N1 and N2.
    -
    1772C
    -
    1773 2 x1 = x(n1)
    -
    1774 y1 = y(n1)
    -
    1775 x2 = x(n2)
    -
    1776 y2 = y(n2)
    -
    1777C
    -
    1778C Set NR and NL to adjacent neighbors of N1 such that
    -
    1779C NR LEFT N2->N1 and NL LEFT N1->N2,
    -
    1780C (NR Forward N1->N2 or NL Forward N1->N2), and
    -
    1781C (NR Forward N2->N1 or NL Forward N2->N1).
    -
    1782C
    -
    1783C Initialization: Set N1FRST and N1LST to the first and
    -
    1784C (signed) last neighbors of N1, respectively, and
    -
    1785C initialize NL to N1FRST.
    -
    1786C
    -
    1787 lpl = lend(n1)
    -
    1788 n1lst = list(lpl)
    -
    1789 lp = lptr(lpl)
    -
    1790 n1frst = list(lp)
    -
    1791 nl = n1frst
    -
    1792 IF (n1lst .LT. 0) GO TO 4
    -
    1793C
    -
    1794C N1 is an interior node. Set NL to the first candidate
    -
    1795C for NR (NL LEFT N2->N1).
    -
    1796C
    -
    1797 3 IF ( left(x2,y2,x1,y1,x(nl),y(nl)) ) GO TO 4
    -
    1798 lp = lptr(lp)
    -
    1799 nl = list(lp)
    -
    1800 IF (nl .NE. n1frst) GO TO 3
    -
    1801C
    -
    1802C All neighbors of N1 are strictly left of N1->N2.
    -
    1803C
    -
    1804 GO TO 5
    -
    1805C
    -
    1806C NL = LIST(LP) LEFT N2->N1. Set NR to NL and NL to the
    -
    1807C following neighbor of N1.
    -
    1808C
    -
    1809 4 nr = nl
    -
    1810 lp = lptr(lp)
    -
    1811 nl = abs(list(lp))
    -
    1812 IF ( left(x1,y1,x2,y2,x(nl),y(nl)) ) THEN
    -
    1813C
    -
    1814C NL LEFT N1->N2 and NR LEFT N2->N1. The Forward tests
    -
    1815C are employed to avoid an error associated with
    -
    1816C collinear nodes.
    -
    1817C
    -
    1818 dx = x2-x1
    -
    1819 dy = y2-y1
    -
    1820 IF ((dx*(x(nl)-x1)+dy*(y(nl)-y1) .GE. 0. .OR.
    -
    1821 . dx*(x(nr)-x1)+dy*(y(nr)-y1) .GE. 0.) .AND.
    -
    1822 . (dx*(x(nl)-x2)+dy*(y(nl)-y2) .LE. 0. .OR.
    -
    1823 . dx*(x(nr)-x2)+dy*(y(nr)-y2) .LE. 0.)) GO TO 6
    -
    1824C
    -
    1825C NL-NR does not intersect N1-N2. However, there is
    -
    1826C another candidate for the first arc if NL lies on
    -
    1827C the line N1-N2.
    -
    1828C
    -
    1829 IF ( .NOT. left(x2,y2,x1,y1,x(nl),y(nl)) ) GO TO 5
    -
    1830 ENDIF
    -
    1831C
    -
    1832C Bottom of loop.
    -
    1833C
    -
    1834 IF (nl .NE. n1frst) GO TO 4
    -
    1835C
    -
    1836C Either the triangulation is invalid or N1-N2 lies on the
    -
    1837C convex hull boundary and an edge NR->NL (opposite N1 and
    -
    1838C intersecting N1-N2) was not found due to floating point
    -
    1839C error. Try interchanging N1 and N2 -- NIT > 0 iff this
    -
    1840C has already been done.
    -
    1841C
    -
    1842 5 IF (nit .GT. 0) GO TO 33
    -
    1843 nit = 1
    -
    1844 n1 = n2
    -
    1845 n2 = in1
    -
    1846 GO TO 2
    -
    1847C
    -
    1848C Store the ordered sequence of intersecting edges NL->NR in
    -
    1849C IWK(1,IWL)->IWK(2,IWL).
    -
    1850C
    -
    1851 6 iwl = iwl + 1
    -
    1852 IF (iwl .GT. iwend) GO TO 32
    -
    1853 iwk(1,iwl) = nl
    -
    1854 iwk(2,iwl) = nr
    -
    1855C
    -
    1856C Set NEXT to the neighbor of NL which follows NR.
    -
    1857C
    -
    1858 lpl = lend(nl)
    -
    1859 lp = lptr(lpl)
    -
    1860C
    -
    1861C Find NR as a neighbor of NL. The search begins with
    -
    1862C the first neighbor.
    -
    1863C
    -
    1864 7 IF (list(lp) .EQ. nr) GO TO 8
    -
    1865 lp = lptr(lp)
    -
    1866 IF (lp .NE. lpl) GO TO 7
    -
    1867C
    -
    1868C NR must be the last neighbor, and NL->NR cannot be a
    -
    1869C boundary edge.
    -
    1870C
    -
    1871 IF (list(lp) .NE. nr) GO TO 33
    -
    1872C
    -
    1873C Set NEXT to the neighbor following NR, and test for
    -
    1874C termination of the store loop.
    -
    1875C
    -
    1876 8 lp = lptr(lp)
    -
    1877 next = abs(list(lp))
    -
    1878 IF (next .EQ. n2) GO TO 9
    -
    1879C
    -
    1880C Set NL or NR to NEXT.
    -
    1881C
    -
    1882 IF ( left(x1,y1,x2,y2,x(next),y(next)) ) THEN
    -
    1883 nl = next
    -
    1884 ELSE
    -
    1885 nr = next
    -
    1886 ENDIF
    -
    1887 GO TO 6
    -
    1888C
    -
    1889C IWL is the number of arcs which intersect N1-N2.
    -
    1890C Store LWK.
    -
    1891C
    -
    1892 9 lwk = iwl
    -
    1893 iwend = iwl
    -
    1894C
    -
    1895C Initialize for edge swapping loop -- all possible swaps
    -
    1896C are applied (even if the new arc again intersects
    -
    1897C N1-N2), arcs to the left of N1->N2 are stored in the
    -
    1898C left portion of IWK, and arcs to the right are stored in
    -
    1899C the right portion. IWF and IWL index the first and last
    -
    1900C intersecting arcs.
    -
    1901C
    -
    1902 iwf = 1
    -
    1903C
    -
    1904C Top of loop -- set N0 to N1 and NL->NR to the first edge.
    -
    1905C IWC points to the arc currently being processed. LFT
    -
    1906C .LE. 0 iff N0 LEFT N1->N2.
    -
    1907C
    -
    1908 10 lft = 0
    -
    1909 n0 = n1
    -
    1910 x0 = x1
    -
    1911 y0 = y1
    -
    1912 nl = iwk(1,iwf)
    -
    1913 nr = iwk(2,iwf)
    -
    1914 iwc = iwf
    -
    1915C
    -
    1916C Set NEXT to the node opposite NL->NR unless IWC is the
    -
    1917C last arc.
    -
    1918C
    -
    1919 11 IF (iwc .EQ. iwl) GO TO 21
    -
    1920 iwcp1 = iwc + 1
    -
    1921 next = iwk(1,iwcp1)
    -
    1922 IF (next .NE. nl) GO TO 16
    -
    1923 next = iwk(2,iwcp1)
    -
    1924C
    -
    1925C NEXT RIGHT N1->N2 and IWC .LT. IWL. Test for a possible
    -
    1926C swap.
    -
    1927C
    -
    1928 IF ( .NOT. left(x0,y0,x(nr),y(nr),x(next),y(next)) )
    -
    1929 . GO TO 14
    -
    1930 IF (lft .GE. 0) GO TO 12
    -
    1931 IF ( .NOT. left(x(nl),y(nl),x0,y0,x(next),y(next)) )
    -
    1932 . GO TO 14
    -
    1933C
    -
    1934C Replace NL->NR with N0->NEXT.
    -
    1935C
    -
    1936 CALL swap (next,n0,nl,nr, list,lptr,lend, lp21)
    -
    1937 iwk(1,iwc) = n0
    -
    1938 iwk(2,iwc) = next
    -
    1939 GO TO 15
    -
    1940C
    -
    1941C Swap NL-NR for N0-NEXT, shift columns IWC+1,...,IWL to
    -
    1942C the left, and store N0-NEXT in the right portion of
    -
    1943C IWK.
    -
    1944C
    -
    1945 12 CALL swap (next,n0,nl,nr, list,lptr,lend, lp21)
    -
    1946 DO 13 i = iwcp1,iwl
    -
    1947 iwk(1,i-1) = iwk(1,i)
    -
    1948 iwk(2,i-1) = iwk(2,i)
    -
    1949 13 CONTINUE
    -
    1950 iwk(1,iwl) = n0
    -
    1951 iwk(2,iwl) = next
    -
    1952 iwl = iwl - 1
    -
    1953 nr = next
    -
    1954 GO TO 11
    -
    1955C
    -
    1956C A swap is not possible. Set N0 to NR.
    -
    1957C
    -
    1958 14 n0 = nr
    -
    1959 x0 = x(n0)
    -
    1960 y0 = y(n0)
    -
    1961 lft = 1
    -
    1962C
    -
    1963C Advance to the next arc.
    -
    1964C
    -
    1965 15 nr = next
    -
    1966 iwc = iwc + 1
    -
    1967 GO TO 11
    -
    1968C
    -
    1969C NEXT LEFT N1->N2, NEXT .NE. N2, and IWC .LT. IWL.
    -
    1970C Test for a possible swap.
    -
    1971C
    -
    1972 16 IF ( .NOT. left(x(nl),y(nl),x0,y0,x(next),y(next)) )
    -
    1973 . GO TO 19
    -
    1974 IF (lft .LE. 0) GO TO 17
    -
    1975 IF ( .NOT. left(x0,y0,x(nr),y(nr),x(next),y(next)) )
    -
    1976 . GO TO 19
    -
    1977C
    -
    1978C Replace NL->NR with NEXT->N0.
    -
    1979C
    -
    1980 CALL swap (next,n0,nl,nr, list,lptr,lend, lp21)
    -
    1981 iwk(1,iwc) = next
    -
    1982 iwk(2,iwc) = n0
    -
    1983 GO TO 20
    -
    1984C
    -
    1985C Swap NL-NR for N0-NEXT, shift columns IWF,...,IWC-1 to
    -
    1986C the right, and store N0-NEXT in the left portion of
    -
    1987C IWK.
    -
    1988C
    -
    1989 17 CALL swap (next,n0,nl,nr, list,lptr,lend, lp21)
    -
    1990 DO 18 i = iwc-1,iwf,-1
    -
    1991 iwk(1,i+1) = iwk(1,i)
    -
    1992 iwk(2,i+1) = iwk(2,i)
    -
    1993 18 CONTINUE
    -
    1994 iwk(1,iwf) = n0
    -
    1995 iwk(2,iwf) = next
    -
    1996 iwf = iwf + 1
    -
    1997 GO TO 20
    -
    1998C
    -
    1999C A swap is not possible. Set N0 to NL.
    -
    2000C
    -
    2001 19 n0 = nl
    -
    2002 x0 = x(n0)
    -
    2003 y0 = y(n0)
    -
    2004 lft = -1
    -
    2005C
    -
    2006C Advance to the next arc.
    -
    2007C
    -
    2008 20 nl = next
    -
    2009 iwc = iwc + 1
    -
    2010 GO TO 11
    -
    2011C
    -
    2012C N2 is opposite NL->NR (IWC = IWL).
    -
    2013C
    -
    2014 21 IF (n0 .EQ. n1) GO TO 24
    -
    2015 IF (lft .LT. 0) GO TO 22
    -
    2016C
    -
    2017C N0 RIGHT N1->N2. Test for a possible swap.
    -
    2018C
    -
    2019 IF ( .NOT. left(x0,y0,x(nr),y(nr),x2,y2) ) GO TO 10
    -
    2020C
    -
    2021C Swap NL-NR for N0-N2 and store N0-N2 in the right
    -
    2022C portion of IWK.
    -
    2023C
    -
    2024 CALL swap (n2,n0,nl,nr, list,lptr,lend, lp21)
    -
    2025 iwk(1,iwl) = n0
    -
    2026 iwk(2,iwl) = n2
    -
    2027 iwl = iwl - 1
    -
    2028 GO TO 10
    -
    2029C
    -
    2030C N0 LEFT N1->N2. Test for a possible swap.
    -
    2031C
    -
    2032 22 IF ( .NOT. left(x(nl),y(nl),x0,y0,x2,y2) ) GO TO 10
    -
    2033C
    -
    2034C Swap NL-NR for N0-N2, shift columns IWF,...,IWL-1 to the
    -
    2035C right, and store N0-N2 in the left portion of IWK.
    -
    2036C
    -
    2037 CALL swap (n2,n0,nl,nr, list,lptr,lend, lp21)
    -
    2038 i = iwl
    -
    2039 23 iwk(1,i) = iwk(1,i-1)
    -
    2040 iwk(2,i) = iwk(2,i-1)
    -
    2041 i = i - 1
    -
    2042 IF (i .GT. iwf) GO TO 23
    -
    2043 iwk(1,iwf) = n0
    -
    2044 iwk(2,iwf) = n2
    -
    2045 iwf = iwf + 1
    -
    2046 GO TO 10
    -
    2047C
    -
    2048C IWF = IWC = IWL. Swap out the last arc for N1-N2 and
    -
    2049C store zeros in IWK.
    -
    2050C
    -
    2051 24 CALL swap (n2,n1,nl,nr, list,lptr,lend, lp21)
    -
    2052 iwk(1,iwc) = 0
    -
    2053 iwk(2,iwc) = 0
    -
    2054C
    -
    2055C Optimization procedure --
    -
    2056C
    -
    2057 IF (iwc .GT. 1) THEN
    -
    2058C
    -
    2059C Optimize the set of new arcs to the left of IN1->IN2.
    -
    2060C
    -
    2061 nit = 3*(iwc-1)
    -
    2062 CALL optim (x,y,iwc-1, list,lptr,lend,nit,iwk, ierr)
    -
    2063 IF (ierr .NE. 0) GO TO 34
    -
    2064 ENDIF
    -
    2065 IF (iwc .LT. iwend) THEN
    -
    2066C
    -
    2067C Optimize the set of new arcs to the right of IN1->IN2.
    -
    2068C
    -
    2069 nit = 3*(iwend-iwc)
    -
    2070 CALL optim (x,y,iwend-iwc, list,lptr,lend,nit,
    -
    2071 . iwk(1,iwc+1), ierr)
    -
    2072 IF (ierr .NE. 0) GO TO 34
    -
    2073 ENDIF
    -
    2074C
    -
    2075C Successful termination.
    -
    2076C
    -
    2077 ier = 0
    -
    2078 RETURN
    -
    2079C
    -
    2080C IN1 and IN2 were adjacent on input.
    -
    2081C
    -
    2082 30 ier = 0
    -
    2083 RETURN
    -
    2084C
    -
    2085C Invalid input parameter.
    -
    2086C
    -
    2087 31 ier = 1
    -
    2088 RETURN
    -
    2089C
    -
    2090C Insufficient space reserved for IWK.
    -
    2091C
    -
    2092 32 ier = 2
    -
    2093 RETURN
    -
    2094C
    -
    2095C Invalid triangulation data structure or collinear nodes
    -
    2096C on convex hull boundary.
    -
    2097C
    -
    2098 33 ier = 3
    -
    2099 WRITE (*,130) in1, in2
    -
    2100 130 FORMAT (//5x,'*** Error in EDGE: Invalid triangula',
    -
    2101 . 'tion or null triangles on boundary'/
    -
    2102 . 9x,'IN1 =',i4,', IN2=',i4/)
    -
    2103 RETURN
    -
    2104C
    -
    2105C Error flag returned by OPTIM.
    -
    2106C
    -
    2107 34 ier = 4
    -
    2108 WRITE (*,140) nit, ierr
    -
    2109 140 FORMAT (//5x,'*** Error in OPTIM: NIT = ',i4,
    -
    2110 . ', IER = ',i1,' ***'/)
    -
    2111 RETURN
    -
    2112 END
    -
    2113 SUBROUTINE getnp (NCC,LCC,N,X,Y,LIST,LPTR,LEND,
    -
    2114 . L, NPTS,DS, IER)
    -
    2115 INTEGER NCC, LCC(*), N, LIST(*), LPTR(*), LEND(N),
    -
    2116 . l, npts(l), ier
    -
    2117 REAL X(N), Y(N), DS(L)
    -
    2118C
    -
    2119C***********************************************************
    -
    2120C
    -
    2121C From TRIPACK
    -
    2122C Robert J. Renka
    -
    2123C Dept. of Computer Science
    -
    2124C Univ. of North Texas
    -
    2125C renka@cs.unt.edu
    -
    2126C 11/12/94
    -
    2127C
    -
    2128C Given a triangulation of N nodes and an array NPTS con-
    -
    2129C taining the indexes of L-1 nodes ordered by distance from
    -
    2130C NPTS(1), this subroutine sets NPTS(L) to the index of the
    -
    2131C next node in the sequence -- the node, other than NPTS(1),
    -
    2132C ...,NPTS(L-1), which is closest to NPTS(1). Thus, the
    -
    2133C ordered sequence of K closest nodes to N1 (including N1)
    -
    2134C may be determined by K-1 calls to GETNP with NPTS(1) = N1
    -
    2135C and L = 2,3,...,K for K .GE. 2. Note that NPTS must in-
    -
    2136C clude constraint nodes as well as non-constraint nodes.
    -
    2137C Thus, a sequence of K1 closest non-constraint nodes to N1
    -
    2138C must be obtained as a subset of the closest K2 nodes to N1
    -
    2139C for some K2 .GE. K1.
    -
    2140C
    -
    2141C The terms closest and distance have special definitions
    -
    2142C when constraint nodes are present in the triangulation.
    -
    2143C Nodes N1 and N2 are said to be visible from each other if
    -
    2144C and only if the line segment N1-N2 intersects no con-
    -
    2145C straint arc (except possibly itself) and is not an interi-
    -
    2146C or constraint arc (arc whose interior lies in a constraint
    -
    2147C region). A path from N1 to N2 is an ordered sequence of
    -
    2148C nodes, with N1 first and N2 last, such that adjacent path
    -
    2149C elements are visible from each other. The path length is
    -
    2150C the sum of the Euclidean distances between adjacent path
    -
    2151C nodes. Finally, the distance from N1 to N2 is defined to
    -
    2152C be the length of the shortest path from N1 to N2.
    -
    2153C
    -
    2154C The algorithm uses the property of a Delaunay triangula-
    -
    2155C tion that the K-th closest node to N1 is a neighbor of one
    -
    2156C of the K-1 closest nodes to N1. With the definition of
    -
    2157C distance used here, this property holds when constraints
    -
    2158C are present as long as non-constraint arcs are locally
    -
    2159C optimal.
    -
    2160C
    -
    2161C
    -
    2162C On input:
    -
    2163C
    -
    2164C NCC = Number of constraints. NCC .GE. 0.
    -
    2165C
    -
    2166C LCC = List of constraint curve starting indexes (or
    -
    2167C dummy array of length 1 if NCC = 0). Refer to
    -
    2168C Subroutine ADDCST.
    -
    2169C
    -
    2170C N = Number of nodes in the triangulation. N .GE. 3.
    -
    2171C
    -
    2172C X,Y = Arrays of length N containing the coordinates
    -
    2173C of the nodes with non-constraint nodes in the
    -
    2174C first LCC(1)-1 locations if NCC > 0.
    -
    2175C
    -
    2176C LIST,LPTR,LEND = Triangulation data structure. Re-
    -
    2177C fer to Subroutine TRMESH.
    -
    2178C
    -
    2179C L = Number of nodes in the sequence on output. 2
    -
    2180C .LE. L .LE. N.
    -
    2181C
    -
    2182C NPTS = Array of length .GE. L containing the indexes
    -
    2183C of the L-1 closest nodes to NPTS(1) in the
    -
    2184C first L-1 locations.
    -
    2185C
    -
    2186C DS = Array of length .GE. L containing the distance
    -
    2187C (defined above) between NPTS(1) and NPTS(I) in
    -
    2188C the I-th position for I = 1,...,L-1. Thus,
    -
    2189C DS(1) = 0.
    -
    2190C
    -
    2191C Input parameters other than NPTS(L) and DS(L) are not
    -
    2192C altered by this routine.
    -
    2193C
    -
    2194C On output:
    -
    2195C
    -
    2196C NPTS = Array updated with the index of the L-th
    -
    2197C closest node to NPTS(1) in position L unless
    -
    2198C IER .NE. 0.
    -
    2199C
    -
    2200C DS = Array updated with the distance between NPTS(1)
    -
    2201C and NPTS(L) in position L unless IER .NE. 0.
    -
    2202C
    -
    2203C IER = Error indicator:
    -
    2204C IER = 0 if no errors were encountered.
    -
    2205C IER = -1 if NCC, N, L, or an LCC entry is
    -
    2206C outside its valid range on input.
    -
    2207C IER = K if NPTS(K) is not a valid index in
    -
    2208C the range 1 to N.
    -
    2209C
    -
    2210C Module required by GETNP: INTSEC
    -
    2211C
    -
    2212C Intrinsic functions called by GETNP: ABS, MIN, SQRT
    -
    2213C
    -
    2214C***********************************************************
    -
    2215C
    -
    2216 LOGICAL INTSEC
    -
    2217 INTEGER I, IFRST, ILAST, J, K, KM1, LCC1, LM1, LP,
    -
    2218 . LPCL, LPK, LPKL, N1, NC, NF1, NF2, NJ, NK,
    -
    2219 . NKBAK, NKFOR, NL, NN
    -
    2220 LOGICAL ISW, VIS, NCF, NJF, SKIP, SKSAV, LFT1, LFT2,
    -
    2221 . LFT12
    -
    2222 REAL DC, DL, X1, XC, XJ, XK, Y1, YC, YJ, YK
    -
    2223C
    -
    2224C Store parameters in local variables and test for errors.
    -
    2225C LCC1 indexes the first constraint node.
    -
    2226C
    -
    2227 ier = -1
    -
    2228 nn = n
    -
    2229 lcc1 = nn+1
    -
    2230 lm1 = l-1
    -
    2231 IF (ncc .LT. 0 .OR. lm1 .LT. 1 .OR. lm1 .GE. nn)
    -
    2232 . RETURN
    -
    2233 IF (ncc .EQ. 0) THEN
    -
    2234 IF (nn .LT. 3) RETURN
    -
    2235 ELSE
    -
    2236 DO 1 i = ncc,1,-1
    -
    2237 IF (lcc1 - lcc(i) .LT. 3) RETURN
    -
    2238 lcc1 = lcc(i)
    -
    2239 1 CONTINUE
    -
    2240 IF (lcc1 .LT. 1) RETURN
    -
    2241 ENDIF
    -
    2242C
    -
    2243C Test for an invalid index in NPTS.
    -
    2244C
    -
    2245 DO 2 k = 1,lm1
    -
    2246 nk = npts(k)
    -
    2247 IF (nk .LT. 1 .OR. nk .GT. nn) THEN
    -
    2248 ier = k
    -
    2249 RETURN
    -
    2250 ENDIF
    -
    2251 2 CONTINUE
    -
    2252C
    -
    2253C Store N1 = NPTS(1) and mark the elements of NPTS.
    -
    2254C
    -
    2255 n1 = npts(1)
    -
    2256 x1 = x(n1)
    -
    2257 y1 = y(n1)
    -
    2258 DO 3 k = 1,lm1
    -
    2259 nk = npts(k)
    -
    2260 lend(nk) = -lend(nk)
    -
    2261 3 CONTINUE
    -
    2262C
    -
    2263C Candidates NC for NL = NPTS(L) are the unmarked visible
    -
    2264C neighbors of nodes NK in NPTS. ISW is an initialization
    -
    2265C switch set to .TRUE. when NL and its distance DL from N1
    -
    2266C have been initialized with the first candidate encount-
    -
    2267C ered.
    -
    2268C
    -
    2269 isw = .false.
    -
    2270 dl = 0.
    -
    2271C
    -
    2272C Loop on marked nodes NK = NPTS(K). LPKL indexes the last
    -
    2273C neighbor of NK in LIST.
    -
    2274C
    -
    2275 DO 16 k = 1,lm1
    -
    2276 km1 = k - 1
    -
    2277 nk = npts(k)
    -
    2278 xk = x(nk)
    -
    2279 yk = y(nk)
    -
    2280 lpkl = -lend(nk)
    -
    2281 nkfor = 0
    -
    2282 nkbak = 0
    -
    2283 vis = .true.
    -
    2284 IF (nk .GE. lcc1) THEN
    -
    2285C
    -
    2286C NK is a constraint node. Set NKFOR and NKBAK to the
    -
    2287C constraint nodes which follow and precede NK. IFRST
    -
    2288C and ILAST are set to the first and last nodes in the
    -
    2289C constraint containing NK.
    -
    2290C
    -
    2291 ifrst = nn + 1
    -
    2292 DO 4 i = ncc,1,-1
    -
    2293 ilast = ifrst - 1
    -
    2294 ifrst = lcc(i)
    -
    2295 IF (nk .GE. ifrst) GO TO 5
    -
    2296 4 CONTINUE
    -
    2297C
    -
    2298 5 IF (nk .LT. ilast) THEN
    -
    2299 nkfor = nk + 1
    -
    2300 ELSE
    -
    2301 nkfor = ifrst
    -
    2302 ENDIF
    -
    2303 IF (nk .GT. ifrst) THEN
    -
    2304 nkbak = nk - 1
    -
    2305 ELSE
    -
    2306 nkbak = ilast
    -
    2307 ENDIF
    -
    2308C
    -
    2309C Initialize VIS to TRUE iff NKFOR precedes NKBAK in the
    -
    2310C adjacency list for NK -- the first neighbor is visi-
    -
    2311C ble and is not NKBAK.
    -
    2312C
    -
    2313 lpk = lpkl
    -
    2314 6 lpk = lptr(lpk)
    -
    2315 nc = abs(list(lpk))
    -
    2316 IF (nc .NE. nkfor .AND. nc .NE. nkbak) GO TO 6
    -
    2317 vis = nc .EQ. nkfor
    -
    2318 ENDIF
    -
    2319C
    -
    2320C Loop on neighbors NC of NK, bypassing marked and nonvis-
    -
    2321C ible neighbors.
    -
    2322C
    -
    2323 lpk = lpkl
    -
    2324 7 lpk = lptr(lpk)
    -
    2325 nc = abs(list(lpk))
    -
    2326 IF (nc .EQ. nkbak) vis = .true.
    -
    2327C
    -
    2328C VIS = .FALSE. iff NK-NC is an interior constraint arc
    -
    2329C (NK is a constraint node and NC lies strictly between
    -
    2330C NKFOR and NKBAK).
    -
    2331C
    -
    2332 IF (.NOT. vis) GO TO 15
    -
    2333 IF (nc .EQ. nkfor) vis = .false.
    -
    2334 IF (lend(nc) .LT. 0) GO TO 15
    -
    2335C
    -
    2336C Initialize distance DC between N1 and NC to Euclidean
    -
    2337C distance.
    -
    2338C
    -
    2339 xc = x(nc)
    -
    2340 yc = y(nc)
    -
    2341 dc = sqrt((xc-x1)*(xc-x1) + (yc-y1)*(yc-y1))
    -
    2342 IF (isw .AND. dc .GE. dl) GO TO 15
    -
    2343 IF (k .EQ. 1) GO TO 14
    -
    2344C
    -
    2345C K .GE. 2. Store the pointer LPCL to the last neighbor
    -
    2346C of NC.
    -
    2347C
    -
    2348 lpcl = lend(nc)
    -
    2349C
    -
    2350C Set DC to the length of the shortest path from N1 to NC
    -
    2351C which has not previously been encountered and which is
    -
    2352C a viable candidate for the shortest path from N1 to NL.
    -
    2353C This is Euclidean distance iff NC is visible from N1.
    -
    2354C Since the shortest path from N1 to NL contains only ele-
    -
    2355C ments of NPTS which are constraint nodes (in addition to
    -
    2356C N1 and NL), only these need be considered for the path
    -
    2357C from N1 to NC. Thus, for distance function D(A,B) and
    -
    2358C J = 1,...,K, DC = min(D(N1,NJ) + D(NJ,NC)) over con-
    -
    2359C straint nodes NJ = NPTS(J) which are visible from NC.
    -
    2360C
    -
    2361 DO 13 j = 1,km1
    -
    2362 nj = npts(j)
    -
    2363 IF (j .GT. 1 .AND. nj .LT. lcc1) GO TO 13
    -
    2364C
    -
    2365C If NC is a visible neighbor of NJ, a path from N1 to NC
    -
    2366C containing NJ has already been considered. Thus, NJ may
    -
    2367C be bypassed if it is adjacent to NC.
    -
    2368C
    -
    2369 lp = lpcl
    -
    2370 8 lp = lptr(lp)
    -
    2371 IF ( nj .EQ. abs(list(lp)) ) GO TO 12
    -
    2372 IF (lp .NE. lpcl) GO TO 8
    -
    2373C
    -
    2374C NJ is a constraint node (unless J=1) not adjacent to NC,
    -
    2375C and is visible from NC iff NJ-NC is not intersected by
    -
    2376C a constraint arc. Loop on constraints I in reverse
    -
    2377C order --
    -
    2378C
    -
    2379 xj = x(nj)
    -
    2380 yj = y(nj)
    -
    2381 ifrst = nn+1
    -
    2382 DO 11 i = ncc,1,-1
    -
    2383 ilast = ifrst - 1
    -
    2384 ifrst = lcc(i)
    -
    2385 nf1 = ilast
    -
    2386 ncf = nf1 .EQ. nc
    -
    2387 njf = nf1 .EQ. nj
    -
    2388 skip = ncf .OR. njf
    -
    2389C
    -
    2390C Loop on boundary constraint arcs NF1-NF2 which contain
    -
    2391C neither NC nor NJ. NCF and NJF are TRUE iff NC (or NJ)
    -
    2392C has been encountered in the constraint, and SKIP =
    -
    2393C .TRUE. iff NF1 = NC or NF1 = NJ.
    -
    2394C
    -
    2395 DO 10 nf2 = ifrst,ilast
    -
    2396 IF (nf2 .EQ. nc) ncf = .true.
    -
    2397 IF (nf2 .EQ. nj) njf = .true.
    -
    2398 sksav = skip
    -
    2399 skip = nf2 .EQ. nc .OR. nf2 .EQ. nj
    -
    2400C
    -
    2401C The last constraint arc in the constraint need not be
    -
    2402C tested if none of the arcs have been skipped.
    -
    2403C
    -
    2404 IF ( sksav .OR. skip .OR.
    -
    2405 . (nf2 .EQ. ilast .AND.
    -
    2406 . .NOT. ncf .AND. .NOT. njf) ) GO TO 9
    -
    2407 IF ( intsec(x(nf1),y(nf1),x(nf2),y(nf2),
    -
    2408 . xc,yc,xj,yj) ) GO TO 12
    -
    2409 9 nf1 = nf2
    -
    2410 10 CONTINUE
    -
    2411 IF (.NOT. ncf .OR. .NOT. njf) GO TO 11
    -
    2412C
    -
    2413C NC and NJ are constraint nodes in the same constraint.
    -
    2414C NC-NJ is intersected by an interior constraint arc iff
    -
    2415C 1) NC LEFT NF2->NF1 and (NJ LEFT NF1->NC and NJ LEFT
    -
    2416C NC->NF2) or
    -
    2417C 2) NC .NOT. LEFT NF2->NF1 and (NJ LEFT NF1->NC or
    -
    2418C NJ LEFT NC->NF2),
    -
    2419C where NF1, NC, NF2 are consecutive constraint nodes.
    -
    2420C
    -
    2421 IF (nc .NE. ifrst) THEN
    -
    2422 nf1 = nc - 1
    -
    2423 ELSE
    -
    2424 nf1 = ilast
    -
    2425 ENDIF
    -
    2426 IF (nc .NE. ilast) THEN
    -
    2427 nf2 = nc + 1
    -
    2428 ELSE
    -
    2429 nf2 = ifrst
    -
    2430 ENDIF
    -
    2431 lft1 = (xc-x(nf1))*(yj-y(nf1)) .GE.
    -
    2432 . (xj-x(nf1))*(yc-y(nf1))
    -
    2433 lft2 = (x(nf2)-xc)*(yj-yc) .GE.
    -
    2434 . (xj-xc)*(y(nf2)-yc)
    -
    2435 lft12 = (x(nf1)-x(nf2))*(yc-y(nf2)) .GE.
    -
    2436 . (xc-x(nf2))*(y(nf1)-y(nf2))
    -
    2437 IF ( (lft1 .AND. lft2) .OR. (.NOT. lft12
    -
    2438 . .AND. (lft1 .OR. lft2)) ) GO TO 12
    -
    2439 11 CONTINUE
    -
    2440C
    -
    2441C NJ is visible from NC. Exit the loop with DC = Euclidean
    -
    2442C distance if J = 1.
    -
    2443C
    -
    2444 IF (j .EQ. 1) GO TO 14
    -
    2445 dc = min(dc,ds(j) + sqrt((xc-xj)*(xc-xj) +
    -
    2446 . (yc-yj)*(yc-yj)))
    -
    2447 GO TO 13
    -
    2448C
    -
    2449C NJ is not visible from NC or is adjacent to NC. Initial-
    -
    2450C ize DC with D(N1,NK) + D(NK,NC) if J = 1.
    -
    2451C
    -
    2452 12 IF (j .EQ. 1) dc = ds(k) + sqrt((xc-xk)*(xc-xk)
    -
    2453 . + (yc-yk)*(yc-yk))
    -
    2454 13 CONTINUE
    -
    2455C
    -
    2456C Compare DC with DL.
    -
    2457C
    -
    2458 IF (isw .AND. dc .GE. dl) GO TO 15
    -
    2459C
    -
    2460C The first (or a closer) candidate for NL has been
    -
    2461C encountered.
    -
    2462C
    -
    2463 14 nl = nc
    -
    2464 dl = dc
    -
    2465 isw = .true.
    -
    2466 15 IF (lpk .NE. lpkl) GO TO 7
    -
    2467 16 CONTINUE
    -
    2468C
    -
    2469C Unmark the elements of NPTS and store NL and DL.
    -
    2470C
    -
    2471 DO 17 k = 1,lm1
    -
    2472 nk = npts(k)
    -
    2473 lend(nk) = -lend(nk)
    -
    2474 17 CONTINUE
    -
    2475 npts(l) = nl
    -
    2476 ds(l) = dl
    -
    2477 ier = 0
    -
    2478 RETURN
    -
    2479 END
    -
    2480 INTEGER FUNCTION indxcc (NCC,LCC,N,LIST,LEND)
    -
    2481 INTEGER NCC, LCC(*), N, LIST(*), LEND(N)
    -
    2482C
    -
    2483C***********************************************************
    -
    2484C
    -
    2485C From TRIPACK
    -
    2486C Robert J. Renka
    -
    2487C Dept. of Computer Science
    -
    2488C Univ. of North Texas
    -
    2489C renka@cs.unt.edu
    -
    2490C 08/25/91
    -
    2491C
    -
    2492C Given a constrained Delaunay triangulation, this func-
    -
    2493C tion returns the index, if any, of an exterior constraint
    -
    2494C curve (an unbounded constraint region). An exterior con-
    -
    2495C straint curve is assumed to be present if and only if the
    -
    2496C clockwise-ordered sequence of boundary nodes is a subse-
    -
    2497C quence of a constraint node sequence. The triangulation
    -
    2498C adjacencies corresponding to constraint edges may or may
    -
    2499C not have been forced by a call to ADDCST, and the con-
    -
    2500C straint region may or may not be valid (contain no nodes).
    -
    2501C
    -
    2502C
    -
    2503C On input:
    -
    2504C
    -
    2505C NCC = Number of constraints. NCC .GE. 0.
    -
    2506C
    -
    2507C LCC = List of constraint curve starting indexes (or
    -
    2508C dummy array of length 1 if NCC = 0). Refer to
    -
    2509C Subroutine ADDCST.
    -
    2510C
    -
    2511C N = Number of nodes in the triangulation. N .GE. 3.
    -
    2512C
    -
    2513C LIST,LEND = Data structure defining the triangula-
    -
    2514C tion. Refer to Subroutine TRMESH.
    -
    2515C
    -
    2516C Input parameters are not altered by this function. Note
    -
    2517C that the parameters are not tested for validity.
    -
    2518C
    -
    2519C On output:
    -
    2520C
    -
    2521C INDXCC = Index of the exterior constraint curve, if
    -
    2522C present, or 0 otherwise.
    -
    2523C
    -
    2524C Modules required by INDXCC: None
    -
    2525C
    -
    2526C***********************************************************
    -
    2527C
    -
    2528 INTEGER I, IFRST, ILAST, LP, N0, NST, NXT
    -
    2529 INDXCC = 0
    -
    2530 if (ncc .LT. 1) RETURN
    -
    2531C
    -
    2532C Set N0 to the boundary node with smallest index.
    -
    2533C
    -
    2534 n0 = 0
    -
    2535 1 n0 = n0 + 1
    -
    2536 lp = lend(n0)
    -
    2537 IF (list(lp) .GT. 0) GO TO 1
    -
    2538C
    -
    2539C Search in reverse order for the constraint I, if any, that
    -
    2540C contains N0. IFRST and ILAST index the first and last
    -
    2541C nodes in constraint I.
    -
    2542C
    -
    2543 i = ncc
    -
    2544 ilast = n
    -
    2545 2 ifrst = lcc(i)
    -
    2546 IF (n0 .GE. ifrst) GO TO 3
    -
    2547 IF (i .EQ. 1) RETURN
    -
    2548 i = i - 1
    -
    2549 ilast = ifrst - 1
    -
    2550 GO TO 2
    -
    2551C
    -
    2552C N0 is in constraint I which indexes an exterior constraint
    -
    2553C curve iff the clockwise-ordered sequence of boundary
    -
    2554C node indexes beginning with N0 is increasing and bounded
    -
    2555C above by ILAST.
    -
    2556C
    -
    2557 3 nst = n0
    -
    2558C
    -
    2559 4 nxt = -list(lp)
    -
    2560 IF (nxt .EQ. nst) GO TO 5
    -
    2561 IF (nxt .LE. n0 .OR. nxt .GT. ilast) RETURN
    -
    2562 n0 = nxt
    -
    2563 lp = lend(n0)
    -
    2564 GO TO 4
    -
    2565C
    -
    2566C Constraint I contains the boundary node sequence as a
    -
    2567C subset.
    -
    2568C
    -
    2569 5 indxcc = i
    -
    2570 RETURN
    -
    2571 END
    -
    2572 SUBROUTINE insert (K,LP, LIST,LPTR,LNEW )
    -
    2573 INTEGER K, LP, LIST(*), LPTR(*), LNEW
    -
    2574C
    -
    2575C***********************************************************
    -
    2576C
    -
    2577C From TRIPACK
    -
    2578C Robert J. Renka
    -
    2579C Dept. of Computer Science
    -
    2580C Univ. of North Texas
    -
    2581C renka@cs.unt.edu
    -
    2582C 09/01/88
    -
    2583C
    -
    2584C This subroutine inserts K as a neighbor of N1 following
    -
    2585C N2, where LP is the LIST pointer of N2 as a neighbor of
    -
    2586C N1. Note that, if N2 is the last neighbor of N1, K will
    -
    2587C become the first neighbor (even if N1 is a boundary node).
    -
    2588C
    -
    2589C
    -
    2590C On input:
    -
    2591C
    -
    2592C K = Index of the node to be inserted.
    -
    2593C
    -
    2594C LP = LIST pointer of N2 as a neighbor of N1.
    -
    2595C
    -
    2596C The above parameters are not altered by this routine.
    -
    2597C
    -
    2598C LIST,LPTR,LNEW = Data structure defining the trian-
    -
    2599C gulation. Refer to Subroutine
    -
    2600C TRMESH.
    -
    2601C
    -
    2602C On output:
    -
    2603C
    -
    2604C LIST,LPTR,LNEW = Data structure updated with the
    -
    2605C addition of node K.
    -
    2606C
    -
    2607C Modules required by INSERT: None
    -
    2608C
    -
    2609C***********************************************************
    -
    2610C
    -
    2611 INTEGER LSAV
    -
    2612C
    -
    2613 LSAV = lptr(lp)
    -
    2614 lptr(lp) = lnew
    -
    2615 list(lnew) = k
    -
    2616 lptr(lnew) = lsav
    -
    2617 lnew = lnew + 1
    -
    2618 RETURN
    -
    2619 END
    -
    2620 SUBROUTINE intadd (KK,I1,I2,I3, LIST,LPTR,LEND,LNEW )
    -
    2621 INTEGER KK, I1, I2, I3, LIST(*), LPTR(*), LEND(*),
    -
    2622 . lnew
    -
    2623C
    -
    2624C***********************************************************
    -
    2625C
    -
    2626C From TRIPACK
    -
    2627C Robert J. Renka
    -
    2628C Dept. of Computer Science
    -
    2629C Univ. of North Texas
    -
    2630C renka@cs.unt.edu
    -
    2631C 02/22/91
    -
    2632C
    -
    2633C This subroutine adds an interior node to a triangulation
    -
    2634C of a set of points in the plane. The data structure is
    -
    2635C updated with the insertion of node KK into the triangle
    -
    2636C whose vertices are I1, I2, and I3. No optimization of the
    -
    2637C triangulation is performed.
    -
    2638C
    -
    2639C
    -
    2640C On input:
    -
    2641C
    -
    2642C KK = Index of the node to be inserted. KK .GE. 1
    -
    2643C and KK must not be equal to I1, I2, or I3.
    -
    2644C
    -
    2645C I1,I2,I3 = Indexes of the counterclockwise-ordered
    -
    2646C sequence of vertices of a triangle which
    -
    2647C contains node KK.
    -
    2648C
    -
    2649C The above parameters are not altered by this routine.
    -
    2650C
    -
    2651C LIST,LPTR,LEND,LNEW = Data structure defining the
    -
    2652C triangulation. Refer to Sub-
    -
    2653C routine TRMESH. Triangle
    -
    2654C (I1,I2,I3) must be included
    -
    2655C in the triangulation.
    -
    2656C
    -
    2657C On output:
    -
    2658C
    -
    2659C LIST,LPTR,LEND,LNEW = Data structure updated with
    -
    2660C the addition of node KK. KK
    -
    2661C will be connected to nodes I1,
    -
    2662C I2, and I3.
    -
    2663C
    -
    2664C Modules required by INTADD: INSERT, LSTPTR
    -
    2665C
    -
    2666C***********************************************************
    -
    2667C
    -
    2668 INTEGER LSTPTR
    -
    2669 INTEGER K, LP, N1, N2, N3
    -
    2670 K = kk
    -
    2671C
    -
    2672C Initialization.
    -
    2673C
    -
    2674 n1 = i1
    -
    2675 n2 = i2
    -
    2676 n3 = i3
    -
    2677C
    -
    2678C Add K as a neighbor of I1, I2, and I3.
    -
    2679C
    -
    2680 lp = lstptr(lend(n1),n2,list,lptr)
    -
    2681 CALL insert (k,lp,list,lptr,lnew)
    -
    2682 lp = lstptr(lend(n2),n3,list,lptr)
    -
    2683 CALL insert (k,lp,list,lptr,lnew)
    -
    2684 lp = lstptr(lend(n3),n1,list,lptr)
    -
    2685 CALL insert (k,lp,list,lptr,lnew)
    -
    2686C
    -
    2687C Add I1, I2, and I3 as neighbors of K.
    -
    2688C
    -
    2689 list(lnew) = n1
    -
    2690 list(lnew+1) = n2
    -
    2691 list(lnew+2) = n3
    -
    2692 lptr(lnew) = lnew + 1
    -
    2693 lptr(lnew+1) = lnew + 2
    -
    2694 lptr(lnew+2) = lnew
    -
    2695 lend(k) = lnew + 2
    -
    2696 lnew = lnew + 3
    -
    2697 RETURN
    -
    2698 END
    -
    2699 LOGICAL FUNCTION intsec (X1,Y1,X2,Y2,X3,Y3,X4,Y4)
    -
    2700 REAL X1, Y1, X2, Y2, X3, Y3, X4, Y4
    -
    2701C
    -
    2702C***********************************************************
    -
    2703C
    -
    2704C From TRIPACK
    -
    2705C Robert J. Renka
    -
    2706C Dept. of Computer Science
    -
    2707C Univ. of North Texas
    -
    2708C renka@cs.unt.edu
    -
    2709C 09/01/88
    -
    2710C
    -
    2711C Given a pair of line segments P1-P2 and P3-P4, this
    -
    2712C function returns the value .TRUE. if and only if P1-P2
    -
    2713C shares one or more points with P3-P4. The line segments
    -
    2714C include their endpoints, and the four points need not be
    -
    2715C distinct. Thus, either line segment may consist of a
    -
    2716C single point, and the segments may meet in a V (which is
    -
    2717C treated as an intersection). Note that an incorrect
    -
    2718C decision may result from floating point error if the four
    -
    2719C endpoints are nearly collinear.
    -
    2720C
    -
    2721C
    -
    2722C On input:
    -
    2723C
    -
    2724C X1,Y1 = Coordinates of P1.
    -
    2725C
    -
    2726C X2,Y2 = Coordinates of P2.
    -
    2727C
    -
    2728C X3,Y3 = Coordinates of P3.
    -
    2729C
    -
    2730C X4,Y4 = Coordinates of P4.
    -
    2731C
    -
    2732C Input parameters are not altered by this function.
    -
    2733C
    -
    2734C On output:
    -
    2735C
    -
    2736C INTSEC = Logical value defined above.
    -
    2737C
    -
    2738C Modules required by INTSEC: None
    -
    2739C
    -
    2740C***********************************************************
    -
    2741C
    -
    2742 REAL A, B, D, DX12, DX31, DX34, DY12, DY31, DY34
    -
    2743C
    -
    2744C Test for overlap between the smallest rectangles that
    -
    2745C contain the line segments and have sides parallel to
    -
    2746C the axes.
    -
    2747C
    -
    2748 IF ((X1 .LT. X3 .AND. X1 .LT. X4 .AND. X2 .LT. X3
    -
    2749 . .AND. x2 .LT. x4) .OR.
    -
    2750 . (x1 .GT. x3 .AND. x1 .GT. x4 .AND. x2 .GT. x3
    -
    2751 . .AND. x2 .GT. x4) .OR.
    -
    2752 . (y1 .LT. y3 .AND. y1 .LT. y4 .AND. y2 .LT. y3
    -
    2753 . .AND. y2 .LT. y4) .OR.
    -
    2754 . (y1 .GT. y3 .AND. y1 .GT. y4 .AND. y2 .GT. y3
    -
    2755 . .AND. y2 .GT. y4)) THEN
    -
    2756 intsec = .false.
    -
    2757 RETURN
    -
    2758 ENDIF
    -
    2759C
    -
    2760C Compute A = P4-P3 X P1-P3, B = P2-P1 X P1-P3, and
    -
    2761C D = P2-P1 X P4-P3 (Z components).
    -
    2762C
    -
    2763 dx12 = x2 - x1
    -
    2764 dy12 = y2 - y1
    -
    2765 dx34 = x4 - x3
    -
    2766 dy34 = y4 - y3
    -
    2767 dx31 = x1 - x3
    -
    2768 dy31 = y1 - y3
    -
    2769 a = dx34*dy31 - dx31*dy34
    -
    2770 b = dx12*dy31 - dx31*dy12
    -
    2771 d = dx12*dy34 - dx34*dy12
    -
    2772 IF (d .EQ. 0.) GO TO 1
    -
    2773C
    -
    2774C D .NE. 0 and the point of intersection of the lines de-
    -
    2775C fined by the line segments is P = P1 + (A/D)*(P2-P1) =
    -
    2776C P3 + (B/D)*(P4-P3).
    -
    2777C
    -
    2778 intsec = a/d .GE. 0. .AND. a/d .LE. 1. .AND.
    -
    2779 . b/d .GE. 0. .AND. b/d .LE. 1.
    -
    2780 RETURN
    -
    2781C
    -
    2782C D .EQ. 0 and thus either the line segments are parallel,
    -
    2783C or one (or both) of them is a single point.
    -
    2784C
    -
    2785 1 intsec = a .EQ. 0. .AND. b .EQ. 0.
    -
    2786 RETURN
    -
    2787 END
    -
    2788 INTEGER FUNCTION jrand (N, IX,IY,IZ )
    -
    2789 INTEGER N, IX, IY, IZ
    -
    2790C
    -
    2791C***********************************************************
    -
    2792C
    -
    2793C From STRIPACK
    -
    2794C Robert J. Renka
    -
    2795C Dept. of Computer Science
    -
    2796C Univ. of North Texas
    -
    2797C renka@cs.unt.edu
    -
    2798C 07/28/98
    -
    2799C
    -
    2800C This function returns a uniformly distributed pseudo-
    -
    2801C random integer in the range 1 to N.
    -
    2802C
    -
    2803C
    -
    2804C On input:
    -
    2805C
    -
    2806C N = Maximum value to be returned.
    -
    2807C
    -
    2808C N is not altered by this function.
    -
    2809C
    -
    2810C IX,IY,IZ = Integer seeds initialized to values in
    -
    2811C the range 1 to 30,000 before the first
    -
    2812C call to JRAND, and not altered between
    -
    2813C subsequent calls (unless a sequence of
    -
    2814C random numbers is to be repeated by
    -
    2815C reinitializing the seeds).
    -
    2816C
    -
    2817C On output:
    -
    2818C
    -
    2819C IX,IY,IZ = Updated integer seeds.
    -
    2820C
    -
    2821C JRAND = Random integer in the range 1 to N.
    -
    2822C
    -
    2823C Reference: B. A. Wichmann and I. D. Hill, "An Efficient
    -
    2824C and Portable Pseudo-random Number Generator",
    -
    2825C Applied Statistics, Vol. 31, No. 2, 1982,
    -
    2826C pp. 188-190.
    -
    2827C
    -
    2828C Modules required by JRAND: None
    -
    2829C
    -
    2830C Intrinsic functions called by JRAND: INT, MOD, REAL
    -
    2831C
    -
    2832C***********************************************************
    -
    2833C
    -
    2834 REAL U, X
    -
    2835C
    -
    2836C Local parameters:
    -
    2837C
    -
    2838C U = Pseudo-random number uniformly distributed in the
    -
    2839C interval (0,1).
    -
    2840C X = Pseudo-random number in the range 0 to 3 whose frac-
    -
    2841C tional part is U.
    -
    2842C
    -
    2843 ix = mod(171*ix,30269)
    -
    2844 iy = mod(172*iy,30307)
    -
    2845 iz = mod(170*iz,30323)
    -
    2846 x = (real(ix)/30269.) + (real(iy)/30307.) +
    -
    2847 . (real(iz)/30323.)
    -
    2848 u = x - int(x)
    -
    2849 jrand = real(n)*u + 1.
    -
    2850 RETURN
    -
    2851 END
    -
    2852 LOGICAL FUNCTION left (X1,Y1,X2,Y2,X0,Y0)
    -
    2853 REAL X1, Y1, X2, Y2, X0, Y0
    -
    2854C
    -
    2855C***********************************************************
    -
    2856C
    -
    2857C From TRIPACK
    -
    2858C Robert J. Renka
    -
    2859C Dept. of Computer Science
    -
    2860C Univ. of North Texas
    -
    2861C renka@cs.unt.edu
    -
    2862C 09/01/88
    -
    2863C
    -
    2864C This function determines whether node N0 is to the left
    -
    2865C or to the right of the line through N1-N2 as viewed by an
    -
    2866C observer at N1 facing N2.
    -
    2867C
    -
    2868C
    -
    2869C On input:
    -
    2870C
    -
    2871C X1,Y1 = Coordinates of N1.
    -
    2872C
    -
    2873C X2,Y2 = Coordinates of N2.
    -
    2874C
    -
    2875C X0,Y0 = Coordinates of N0.
    -
    2876C
    -
    2877C Input parameters are not altered by this function.
    -
    2878C
    -
    2879C On output:
    -
    2880C
    -
    2881C LEFT = .TRUE. if and only if (X0,Y0) is on or to the
    -
    2882C left of the directed line N1->N2.
    -
    2883C
    -
    2884C Modules required by LEFT: None
    -
    2885C
    -
    2886C***********************************************************
    -
    2887C
    -
    2888 REAL DX1, DY1, DX2, DY2
    -
    2889C
    -
    2890C Local parameters:
    -
    2891C
    -
    2892C DX1,DY1 = X,Y components of the vector N1->N2
    -
    2893C DX2,DY2 = X,Y components of the vector N1->N0
    -
    2894C
    -
    2895 dx1 = x2-x1
    -
    2896 dy1 = y2-y1
    -
    2897 dx2 = x0-x1
    -
    2898 dy2 = y0-y1
    -
    2899C
    -
    2900C If the sign of the vector cross product of N1->N2 and
    -
    2901C N1->N0 is positive, then sin(A) > 0, where A is the
    -
    2902C angle between the vectors, and thus A is in the range
    -
    2903C (0,180) degrees.
    -
    2904C
    -
    2905 left = dx1*dy2 .GE. dx2*dy1
    -
    2906 RETURN
    -
    2907 END
    -
    2908 INTEGER FUNCTION lstptr (LPL,NB,LIST,LPTR)
    -
    2909 INTEGER LPL, NB, LIST(*), LPTR(*)
    -
    2910C
    -
    2911C***********************************************************
    -
    2912C
    -
    2913C From TRIPACK
    -
    2914C Robert J. Renka
    -
    2915C Dept. of Computer Science
    -
    2916C Univ. of North Texas
    -
    2917C renka@cs.unt.edu
    -
    2918C 09/01/88
    -
    2919C
    -
    2920C This function returns the index (LIST pointer) of NB in
    -
    2921C the adjacency list for N0, where LPL = LEND(N0).
    -
    2922C
    -
    2923C
    -
    2924C On input:
    -
    2925C
    -
    2926C LPL = LEND(N0)
    -
    2927C
    -
    2928C NB = Index of the node whose pointer is to be re-
    -
    2929C turned. NB must be connected to N0.
    -
    2930C
    -
    2931C LIST,LPTR = Data structure defining the triangula-
    -
    2932C tion. Refer to Subroutine TRMESH.
    -
    2933C
    -
    2934C Input parameters are not altered by this function.
    -
    2935C
    -
    2936C On output:
    -
    2937C
    -
    2938C LSTPTR = Pointer such that LIST(LSTPTR) = NB or
    -
    2939C LIST(LSTPTR) = -NB, unless NB is not a
    -
    2940C neighbor of N0, in which case LSTPTR = LPL.
    -
    2941C
    -
    2942C Modules required by LSTPTR: None
    -
    2943C
    -
    2944C***********************************************************
    -
    2945C
    -
    2946 INTEGER LP, ND
    -
    2947C
    -
    2948 LP = lptr(lpl)
    -
    2949 1 nd = list(lp)
    -
    2950 IF (nd .EQ. nb) GO TO 2
    -
    2951 lp = lptr(lp)
    -
    2952 IF (lp .NE. lpl) GO TO 1
    -
    2953C
    -
    2954 2 lstptr = lp
    -
    2955 RETURN
    -
    2956 END
    -
    2957 INTEGER FUNCTION nbcnt (LPL,LPTR)
    -
    2958 INTEGER LPL, LPTR(*)
    -
    2959C
    -
    2960C***********************************************************
    -
    2961C
    -
    2962C From TRIPACK
    -
    2963C Robert J. Renka
    -
    2964C Dept. of Computer Science
    -
    2965C Univ. of North Texas
    -
    2966C renka@cs.unt.edu
    -
    2967C 09/01/88
    -
    2968C
    -
    2969C This function returns the number of neighbors of a node
    -
    2970C N0 in a triangulation created by Subroutine TRMESH (or
    -
    2971C TRMSHR).
    -
    2972C
    -
    2973C
    -
    2974C On input:
    -
    2975C
    -
    2976C LPL = LIST pointer to the last neighbor of N0 --
    -
    2977C LPL = LEND(N0).
    -
    2978C
    -
    2979C LPTR = Array of pointers associated with LIST.
    -
    2980C
    -
    2981C Input parameters are not altered by this function.
    -
    2982C
    -
    2983C On output:
    -
    2984C
    -
    2985C NBCNT = Number of neighbors of N0.
    -
    2986C
    -
    2987C Modules required by NBCNT: None
    -
    2988C
    -
    2989C***********************************************************
    -
    2990C
    -
    2991 INTEGER K, LP
    -
    2992C
    -
    2993 LP = lpl
    -
    2994 k = 1
    -
    2995C
    -
    2996 1 lp = lptr(lp)
    -
    2997 IF (lp .EQ. lpl) GO TO 2
    -
    2998 k = k + 1
    -
    2999 GO TO 1
    -
    3000C
    -
    3001 2 nbcnt = k
    -
    3002 RETURN
    -
    3003 END
    -
    3004 INTEGER FUNCTION nearnd (XP,YP,IST,N,X,Y,LIST,LPTR,
    -
    3005 . LEND, DSQ)
    -
    3006 INTEGER IST, N, LIST(*), LPTR(*), LEND(N)
    -
    3007 REAL XP, YP, X(N), Y(N), DSQ
    -
    3008C
    -
    3009C***********************************************************
    -
    3010C
    -
    3011C From TRIPACK
    -
    3012C Robert J. Renka
    -
    3013C Dept. of Computer Science
    -
    3014C Univ. of North Texas
    -
    3015C renka@cs.unt.edu
    -
    3016C 06/27/98
    -
    3017C
    -
    3018C Given a point P in the plane and a Delaunay triangula-
    -
    3019C tion created by Subroutine TRMESH or TRMSHR, this function
    -
    3020C returns the index of the nearest triangulation node to P.
    -
    3021C
    -
    3022C The algorithm consists of implicitly adding P to the
    -
    3023C triangulation, finding the nearest neighbor to P, and
    -
    3024C implicitly deleting P from the triangulation. Thus, it
    -
    3025C is based on the fact that, if P is a node in a Delaunay
    -
    3026C triangulation, the nearest node to P is a neighbor of P.
    -
    3027C
    -
    3028C
    -
    3029C On input:
    -
    3030C
    -
    3031C XP,YP = Cartesian coordinates of the point P to be
    -
    3032C located relative to the triangulation.
    -
    3033C
    -
    3034C IST = Index of a node at which TRFIND begins the
    -
    3035C search. Search time depends on the proximity
    -
    3036C of this node to P.
    -
    3037C
    -
    3038C N = Number of nodes in the triangulation. N .GE. 3.
    -
    3039C
    -
    3040C X,Y = Arrays of length N containing the Cartesian
    -
    3041C coordinates of the nodes.
    -
    3042C
    -
    3043C LIST,LPTR,LEND = Data structure defining the trian-
    -
    3044C gulation. Refer to TRMESH.
    -
    3045C
    -
    3046C Input parameters are not altered by this function.
    -
    3047C
    -
    3048C On output:
    -
    3049C
    -
    3050C NEARND = Nodal index of the nearest node to P, or 0
    -
    3051C if N < 3 or the triangulation data struc-
    -
    3052C ture is invalid.
    -
    3053C
    -
    3054C DSQ = Squared distance between P and NEARND unless
    -
    3055C NEARND = 0.
    -
    3056C
    -
    3057C Note that the number of candidates for NEARND
    -
    3058C (neighbors of P) is limited to LMAX defined in
    -
    3059C the PARAMETER statement below.
    -
    3060C
    -
    3061C Modules required by NEARND: JRAND, LEFT, LSTPTR, TRFIND
    -
    3062C
    -
    3063C Intrinsic function called by NEARND: ABS
    -
    3064C
    -
    3065C***********************************************************
    -
    3066C
    -
    3067 INTEGER LSTPTR
    -
    3068 INTEGER LMAX
    -
    3069 PARAMETER (LMAX=25)
    -
    3070 integer i1, i2, i3, l, listp(lmax), lp, lp1, lp2,
    -
    3071 . lpl, lptrp(lmax), n1, n2, n3, nr, nst
    -
    3072 REAL COS1, COS2, DS1, DSR, DX11, DX12, DX21,
    -
    3073 . DX22, DY11, DY12, DY21, DY22, SIN1, SIN2
    -
    3074C
    -
    3075C Store local parameters and test for N invalid.
    -
    3076C
    -
    3077 IF (n .LT. 3) GO TO 7
    -
    3078 nst = ist
    -
    3079 IF (nst .LT. 1 .OR. nst .GT. n) nst = 1
    -
    3080C
    -
    3081C Find a triangle (I1,I2,I3) containing P, or the rightmost
    -
    3082C (I1) and leftmost (I2) visible boundary nodes as viewed
    -
    3083C from P.
    -
    3084C
    -
    3085 CALL trfind (nst,xp,yp,n,x,y,list,lptr,lend, i1,i2,i3)
    -
    3086C
    -
    3087C Test for collinear nodes.
    -
    3088C
    -
    3089 IF (i1 .EQ. 0) GO TO 7
    -
    3090C
    -
    3091C Store the linked list of 'neighbors' of P in LISTP and
    -
    3092C LPTRP. I1 is the first neighbor, and 0 is stored as
    -
    3093C the last neighbor if P is not contained in a triangle.
    -
    3094C L is the length of LISTP and LPTRP, and is limited to
    -
    3095C LMAX.
    -
    3096C
    -
    3097 IF (i3 .NE. 0) THEN
    -
    3098 listp(1) = i1
    -
    3099 lptrp(1) = 2
    -
    3100 listp(2) = i2
    -
    3101 lptrp(2) = 3
    -
    3102 listp(3) = i3
    -
    3103 lptrp(3) = 1
    -
    3104 l = 3
    -
    3105 ELSE
    -
    3106 n1 = i1
    -
    3107 l = 1
    -
    3108 lp1 = 2
    -
    3109 listp(l) = n1
    -
    3110 lptrp(l) = lp1
    -
    3111C
    -
    3112C Loop on the ordered sequence of visible boundary nodes
    -
    3113C N1 from I1 to I2.
    -
    3114C
    -
    3115 1 lpl = lend(n1)
    -
    3116 n1 = -list(lpl)
    -
    3117 l = lp1
    -
    3118 lp1 = l+1
    -
    3119 listp(l) = n1
    -
    3120 lptrp(l) = lp1
    -
    3121 IF (n1 .NE. i2 .AND. lp1 .LT. lmax) GO TO 1
    -
    3122 l = lp1
    -
    3123 listp(l) = 0
    -
    3124 lptrp(l) = 1
    -
    3125 ENDIF
    -
    3126C
    -
    3127C Initialize variables for a loop on arcs N1-N2 opposite P
    -
    3128C in which new 'neighbors' are 'swapped' in. N1 follows
    -
    3129C N2 as a neighbor of P, and LP1 and LP2 are the LISTP
    -
    3130C indexes of N1 and N2.
    -
    3131C
    -
    3132 lp2 = 1
    -
    3133 n2 = i1
    -
    3134 lp1 = lptrp(1)
    -
    3135 n1 = listp(lp1)
    -
    3136C
    -
    3137C Begin loop: find the node N3 opposite N1->N2.
    -
    3138C
    -
    3139 2 lp = lstptr(lend(n1),n2,list,lptr)
    -
    3140 IF (list(lp) .LT. 0) GO TO 4
    -
    3141 lp = lptr(lp)
    -
    3142 n3 = abs(list(lp))
    -
    3143C
    -
    3144C Swap test: Exit the loop if L = LMAX.
    -
    3145C
    -
    3146 IF (l .EQ. lmax) GO TO 5
    -
    3147 dx11 = x(n1) - x(n3)
    -
    3148 dx12 = x(n2) - x(n3)
    -
    3149 dx22 = x(n2) - xp
    -
    3150 dx21 = x(n1) - xp
    -
    3151C
    -
    3152 dy11 = y(n1) - y(n3)
    -
    3153 dy12 = y(n2) - y(n3)
    -
    3154 dy22 = y(n2) - yp
    -
    3155 dy21 = y(n1) - yp
    -
    3156C
    -
    3157 cos1 = dx11*dx12 + dy11*dy12
    -
    3158 cos2 = dx22*dx21 + dy22*dy21
    -
    3159 IF (cos1 .GE. 0. .AND. cos2 .GE. 0.) GO TO 4
    -
    3160 IF (cos1 .LT. 0. .AND. cos2 .LT. 0.) GO TO 3
    -
    3161C
    -
    3162 sin1 = dx11*dy12 - dx12*dy11
    -
    3163 sin2 = dx22*dy21 - dx21*dy22
    -
    3164 IF (sin1*cos2 + cos1*sin2 .GE. 0.) GO TO 4
    -
    3165C
    -
    3166C Swap: Insert N3 following N2 in the adjacency list for P.
    -
    3167C The two new arcs opposite P must be tested.
    -
    3168C
    -
    3169 3 l = l+1
    -
    3170 lptrp(lp2) = l
    -
    3171 listp(l) = n3
    -
    3172 lptrp(l) = lp1
    -
    3173 lp1 = l
    -
    3174 n1 = n3
    -
    3175 GO TO 2
    -
    3176C
    -
    3177C No swap: Advance to the next arc and test for termination
    -
    3178C on N1 = I1 (LP1 = 1) or N1 followed by 0.
    -
    3179C
    -
    3180 4 IF (lp1 .EQ. 1) GO TO 5
    -
    3181 lp2 = lp1
    -
    3182 n2 = n1
    -
    3183 lp1 = lptrp(lp1)
    -
    3184 n1 = listp(lp1)
    -
    3185 IF (n1 .EQ. 0) GO TO 5
    -
    3186 GO TO 2
    -
    3187C
    -
    3188C Set NR and DSR to the index of the nearest node to P and
    -
    3189C its squared distance from P, respectively.
    -
    3190C
    -
    3191 5 nr = i1
    -
    3192 dsr = (x(nr)-xp)**2 + (y(nr)-yp)**2
    -
    3193 DO 6 lp = 2,l
    -
    3194 n1 = listp(lp)
    -
    3195 IF (n1 .EQ. 0) GO TO 6
    -
    3196 ds1 = (x(n1)-xp)**2 + (y(n1)-yp)**2
    -
    3197 IF (ds1 .LT. dsr) THEN
    -
    3198 nr = n1
    -
    3199 dsr = ds1
    -
    3200 ENDIF
    -
    3201 6 CONTINUE
    -
    3202 dsq = dsr
    -
    3203 nearnd = nr
    -
    3204 RETURN
    -
    3205C
    -
    3206C Invalid input.
    -
    3207C
    -
    3208 7 nearnd = 0
    -
    3209 RETURN
    -
    3210 END
    -
    3211 SUBROUTINE optim (X,Y,NA, LIST,LPTR,LEND,NIT,IWK, IER)
    -
    3212 INTEGER NA, LIST(*), LPTR(*), LEND(*), NIT, IWK(2,NA),
    -
    3213 . IER
    -
    3214 REAL X(*), Y(*)
    -
    3215C
    -
    3216C***********************************************************
    -
    3217C
    -
    3218C From TRIPACK
    -
    3219C Robert J. Renka
    -
    3220C Dept. of Computer Science
    -
    3221C Univ. of North Texas
    -
    3222C renka@cs.unt.edu
    -
    3223C 06/27/98
    -
    3224C
    -
    3225C Given a set of NA triangulation arcs, this subroutine
    -
    3226C optimizes the portion of the triangulation consisting of
    -
    3227C the quadrilaterals (pairs of adjacent triangles) which
    -
    3228C have the arcs as diagonals by applying the circumcircle
    -
    3229C test and appropriate swaps to the arcs.
    -
    3230C
    -
    3231C An iteration consists of applying the swap test and
    -
    3232C swaps to all NA arcs in the order in which they are
    -
    3233C stored. The iteration is repeated until no swap occurs
    -
    3234C or NIT iterations have been performed. The bound on the
    -
    3235C number of iterations may be necessary to prevent an
    -
    3236C infinite loop caused by cycling (reversing the effect of a
    -
    3237C previous swap) due to floating point inaccuracy when four
    -
    3238C or more nodes are nearly cocircular.
    -
    3239C
    -
    3240C
    -
    3241C On input:
    -
    3242C
    -
    3243C X,Y = Arrays containing the nodal coordinates.
    -
    3244C
    -
    3245C NA = Number of arcs in the set. NA .GE. 0.
    -
    3246C
    -
    3247C The above parameters are not altered by this routine.
    -
    3248C
    -
    3249C LIST,LPTR,LEND = Data structure defining the trian-
    -
    3250C gulation. Refer to Subroutine
    -
    3251C TRMESH.
    -
    3252C
    -
    3253C NIT = Maximum number of iterations to be performed.
    -
    3254C A reasonable value is 3*NA. NIT .GE. 1.
    -
    3255C
    -
    3256C IWK = Integer array dimensioned 2 by NA containing
    -
    3257C the nodal indexes of the arc endpoints (pairs
    -
    3258C of endpoints are stored in columns).
    -
    3259C
    -
    3260C On output:
    -
    3261C
    -
    3262C LIST,LPTR,LEND = Updated triangulation data struc-
    -
    3263C ture reflecting the swaps.
    -
    3264C
    -
    3265C NIT = Number of iterations performed.
    -
    3266C
    -
    3267C IWK = Endpoint indexes of the new set of arcs
    -
    3268C reflecting the swaps.
    -
    3269C
    -
    3270C IER = Error indicator:
    -
    3271C IER = 0 if no errors were encountered.
    -
    3272C IER = 1 if a swap occurred on the last of
    -
    3273C MAXIT iterations, where MAXIT is the
    -
    3274C value of NIT on input. The new set
    -
    3275C of arcs in not necessarily optimal
    -
    3276C in this case.
    -
    3277C IER = 2 if NA < 0 or NIT < 1 on input.
    -
    3278C IER = 3 if IWK(2,I) is not a neighbor of
    -
    3279C IWK(1,I) for some I in the range 1
    -
    3280C to NA. A swap may have occurred in
    -
    3281C this case.
    -
    3282C IER = 4 if a zero pointer was returned by
    -
    3283C Subroutine SWAP.
    -
    3284C
    -
    3285C Modules required by OPTIM: LSTPTR, SWAP, SWPTST
    -
    3286C
    -
    3287C Intrinsic function called by OPTIM: ABS
    -
    3288C
    -
    3289C***********************************************************
    -
    3290C
    -
    3291 LOGICAL SWPTST
    -
    3292 INTEGER I, IO1, IO2, ITER, LP, LP21, LPL, LPP, MAXIT,
    -
    3293 . N1, N2, NNA
    -
    3294 LOGICAL SWP
    -
    3295C
    -
    3296C Local parameters:
    -
    3297C
    -
    3298C I = Column index for IWK
    -
    3299C IO1,IO2 = Nodal indexes of the endpoints of an arc in IWK
    -
    3300C ITER = Iteration count
    -
    3301C LP = LIST pointer
    -
    3302C LP21 = Parameter returned by SWAP (not used)
    -
    3303C LPL = Pointer to the last neighbor of IO1
    -
    3304C LPP = Pointer to the node preceding IO2 as a neighbor
    -
    3305C of IO1
    -
    3306C MAXIT = Input value of NIT
    -
    3307C N1,N2 = Nodes opposite IO1->IO2 and IO2->IO1,
    -
    3308C respectively
    -
    3309C NNA = Local copy of NA
    -
    3310C SWP = Flag set to TRUE iff a swap occurs in the
    -
    3311C optimization loop
    -
    3312C
    -
    3313 nna = na
    -
    3314 maxit = nit
    -
    3315 IF (nna .LT. 0 .OR. maxit .LT. 1) GO TO 7
    -
    3316C
    -
    3317C Initialize iteration count ITER and test for NA = 0.
    -
    3318C
    -
    3319 iter = 0
    -
    3320 IF (nna .EQ. 0) GO TO 5
    -
    3321C
    -
    3322C Top of loop --
    -
    3323C SWP = TRUE iff a swap occurred in the current iteration.
    -
    3324C
    -
    3325 1 IF (iter .EQ. maxit) GO TO 6
    -
    3326 iter = iter + 1
    -
    3327 swp = .false.
    -
    3328C
    -
    3329C Inner loop on arcs IO1-IO2 --
    -
    3330C
    -
    3331 DO 4 i = 1,nna
    -
    3332 io1 = iwk(1,i)
    -
    3333 io2 = iwk(2,i)
    -
    3334C
    -
    3335C Set N1 and N2 to the nodes opposite IO1->IO2 and
    -
    3336C IO2->IO1, respectively. Determine the following:
    -
    3337C
    -
    3338C LPL = pointer to the last neighbor of IO1,
    -
    3339C LP = pointer to IO2 as a neighbor of IO1, and
    -
    3340C LPP = pointer to the node N2 preceding IO2.
    -
    3341C
    -
    3342 lpl = lend(io1)
    -
    3343 lpp = lpl
    -
    3344 lp = lptr(lpp)
    -
    3345 2 IF (list(lp) .EQ. io2) GO TO 3
    -
    3346 lpp = lp
    -
    3347 lp = lptr(lpp)
    -
    3348 IF (lp .NE. lpl) GO TO 2
    -
    3349C
    -
    3350C IO2 should be the last neighbor of IO1. Test for no
    -
    3351C arc and bypass the swap test if IO1 is a boundary
    -
    3352C node.
    -
    3353C
    -
    3354 IF (abs(list(lp)) .NE. io2) GO TO 8
    -
    3355 IF (list(lp) .LT. 0) GO TO 4
    -
    3356C
    -
    3357C Store N1 and N2, or bypass the swap test if IO1 is a
    -
    3358C boundary node and IO2 is its first neighbor.
    -
    3359C
    -
    3360 3 n2 = list(lpp)
    -
    3361 IF (n2 .LT. 0) GO TO 4
    -
    3362 lp = lptr(lp)
    -
    3363 n1 = abs(list(lp))
    -
    3364C
    -
    3365C Test IO1-IO2 for a swap, and update IWK if necessary.
    -
    3366C
    -
    3367 IF ( .NOT. swptst(n1,n2,io1,io2,x,y) ) GO TO 4
    -
    3368 CALL swap (n1,n2,io1,io2, list,lptr,lend, lp21)
    -
    3369 IF (lp21 .EQ. 0) GO TO 9
    -
    3370 swp = .true.
    -
    3371 iwk(1,i) = n1
    -
    3372 iwk(2,i) = n2
    -
    3373 4 CONTINUE
    -
    3374 IF (swp) GO TO 1
    -
    3375C
    -
    3376C Successful termination.
    -
    3377C
    -
    3378 5 nit = iter
    -
    3379 ier = 0
    -
    3380 RETURN
    -
    3381C
    -
    3382C MAXIT iterations performed without convergence.
    -
    3383C
    -
    3384 6 nit = maxit
    -
    3385 ier = 1
    -
    3386 RETURN
    -
    3387C
    -
    3388C Invalid input parameter.
    -
    3389C
    -
    3390 7 nit = 0
    -
    3391 ier = 2
    -
    3392 RETURN
    -
    3393C
    -
    3394C IO2 is not a neighbor of IO1.
    -
    3395C
    -
    3396 8 nit = iter
    -
    3397 ier = 3
    -
    3398 RETURN
    -
    3399C
    -
    3400C Zero pointer returned by SWAP.
    -
    3401C
    -
    3402 9 nit = iter
    -
    3403 ier = 4
    -
    3404 RETURN
    -
    3405 END
    -
    3406 REAL FUNCTION STORE (X)
    -
    3407 REAL X
    -
    3408C
    -
    3409C***********************************************************
    -
    3410C
    -
    3411C From TRIPACK
    -
    3412C Robert J. Renka
    -
    3413C Dept. of Computer Science
    -
    3414C Univ. of North Texas
    -
    3415C renka@cs.unt.edu
    -
    3416C 03/18/90
    -
    3417C
    -
    3418C This function forces its argument X to be stored in a
    -
    3419C memory location, thus providing a means of determining
    -
    3420C floating point number characteristics (such as the machine
    -
    3421C precision) when it is necessary to avoid computation in
    -
    3422C high precision registers.
    -
    3423C
    -
    3424C
    -
    3425C On input:
    -
    3426C
    -
    3427C X = Value to be stored.
    -
    3428C
    -
    3429C X is not altered by this function.
    -
    3430C
    -
    3431C On output:
    -
    3432C
    -
    3433C STORE = Value of X after it has been stored and
    -
    3434C possibly truncated or rounded to the single
    -
    3435C precision word length.
    -
    3436C
    -
    3437C Modules required by STORE: None
    -
    3438C
    -
    3439C***********************************************************
    -
    3440C
    -
    3441 REAL Y
    -
    3442 COMMON/STCOM/Y
    -
    3443C
    -
    3444 Y = x
    -
    3445 store = y
    -
    3446 RETURN
    -
    3447 END
    -
    3448 SUBROUTINE swap (IN1,IN2,IO1,IO2, LIST,LPTR,
    -
    3449 . LEND, LP21)
    -
    3450 INTEGER IN1, IN2, IO1, IO2, LIST(*), LPTR(*), LEND(*),
    -
    3451 . lp21
    -
    3452C
    -
    3453C***********************************************************
    -
    3454C
    -
    3455C From TRIPACK
    -
    3456C Robert J. Renka
    -
    3457C Dept. of Computer Science
    -
    3458C Univ. of North Texas
    -
    3459C renka@cs.unt.edu
    -
    3460C 06/22/98
    -
    3461C
    -
    3462C Given a triangulation of a set of points on the unit
    -
    3463C sphere, this subroutine replaces a diagonal arc in a
    -
    3464C strictly convex quadrilateral (defined by a pair of adja-
    -
    3465C cent triangles) with the other diagonal. Equivalently, a
    -
    3466C pair of adjacent triangles is replaced by another pair
    -
    3467C having the same union.
    -
    3468C
    -
    3469C
    -
    3470C On input:
    -
    3471C
    -
    3472C IN1,IN2,IO1,IO2 = Nodal indexes of the vertices of
    -
    3473C the quadrilateral. IO1-IO2 is re-
    -
    3474C placed by IN1-IN2. (IO1,IO2,IN1)
    -
    3475C and (IO2,IO1,IN2) must be trian-
    -
    3476C gles on input.
    -
    3477C
    -
    3478C The above parameters are not altered by this routine.
    -
    3479C
    -
    3480C LIST,LPTR,LEND = Data structure defining the trian-
    -
    3481C gulation. Refer to Subroutine
    -
    3482C TRMESH.
    -
    3483C
    -
    3484C On output:
    -
    3485C
    -
    3486C LIST,LPTR,LEND = Data structure updated with the
    -
    3487C swap -- triangles (IO1,IO2,IN1) and
    -
    3488C (IO2,IO1,IN2) are replaced by
    -
    3489C (IN1,IN2,IO2) and (IN2,IN1,IO1)
    -
    3490C unless LP21 = 0.
    -
    3491C
    -
    3492C LP21 = Index of IN1 as a neighbor of IN2 after the
    -
    3493C swap is performed unless IN1 and IN2 are
    -
    3494C adjacent on input, in which case LP21 = 0.
    -
    3495C
    -
    3496C Module required by SWAP: LSTPTR
    -
    3497C
    -
    3498C Intrinsic function called by SWAP: ABS
    -
    3499C
    -
    3500C***********************************************************
    -
    3501C
    -
    3502 INTEGER LSTPTR
    -
    3503 INTEGER LP, LPH, LPSAV
    -
    3504C
    -
    3505C Local parameters:
    -
    3506C
    -
    3507C LP,LPH,LPSAV = LIST pointers
    -
    3508C
    -
    3509C
    -
    3510C Test for IN1 and IN2 adjacent.
    -
    3511C
    -
    3512 lp = lstptr(lend(in1),in2,list,lptr)
    -
    3513 IF (abs(list(lp)) .EQ. in2) THEN
    -
    3514 lp21 = 0
    -
    3515 RETURN
    -
    3516 ENDIF
    -
    3517C
    -
    3518C Delete IO2 as a neighbor of IO1.
    -
    3519C
    -
    3520 lp = lstptr(lend(io1),in2,list,lptr)
    -
    3521 lph = lptr(lp)
    -
    3522 lptr(lp) = lptr(lph)
    -
    3523C
    -
    3524C If IO2 is the last neighbor of IO1, make IN2 the
    -
    3525C last neighbor.
    -
    3526C
    -
    3527 IF (lend(io1) .EQ. lph) lend(io1) = lp
    -
    3528C
    -
    3529C Insert IN2 as a neighbor of IN1 following IO1
    -
    3530C using the hole created above.
    -
    3531C
    -
    3532 lp = lstptr(lend(in1),io1,list,lptr)
    -
    3533 lpsav = lptr(lp)
    -
    3534 lptr(lp) = lph
    -
    3535 list(lph) = in2
    -
    3536 lptr(lph) = lpsav
    -
    3537C
    -
    3538C Delete IO1 as a neighbor of IO2.
    -
    3539C
    -
    3540 lp = lstptr(lend(io2),in1,list,lptr)
    -
    3541 lph = lptr(lp)
    -
    3542 lptr(lp) = lptr(lph)
    -
    3543C
    -
    3544C If IO1 is the last neighbor of IO2, make IN1 the
    -
    3545C last neighbor.
    -
    3546C
    -
    3547 IF (lend(io2) .EQ. lph) lend(io2) = lp
    -
    3548C
    -
    3549C Insert IN1 as a neighbor of IN2 following IO2.
    -
    3550C
    -
    3551 lp = lstptr(lend(in2),io2,list,lptr)
    -
    3552 lpsav = lptr(lp)
    -
    3553 lptr(lp) = lph
    -
    3554 list(lph) = in1
    -
    3555 lptr(lph) = lpsav
    -
    3556 lp21 = lph
    -
    3557 RETURN
    -
    3558 END
    -
    3559 LOGICAL FUNCTION swptst (IN1,IN2,IO1,IO2,X,Y)
    -
    3560 INTEGER IN1, IN2, IO1, IO2
    -
    3561 REAL X(*), Y(*)
    -
    3562C
    -
    3563C***********************************************************
    -
    3564C
    -
    3565C From TRIPACK
    -
    3566C Robert J. Renka
    -
    3567C Dept. of Computer Science
    -
    3568C Univ. of North Texas
    -
    3569C renka@cs.unt.edu
    -
    3570C 09/01/88
    -
    3571C
    -
    3572C This function applies the circumcircle test to a quadri-
    -
    3573C lateral defined by a pair of adjacent triangles. The
    -
    3574C diagonal arc (shared triangle side) should be swapped for
    -
    3575C the other diagonl if and only if the fourth vertex is
    -
    3576C strictly interior to the circumcircle of one of the
    -
    3577C triangles (the decision is independent of the choice of
    -
    3578C triangle). Equivalently, the diagonal is chosen to maxi-
    -
    3579C mize the smallest of the six interior angles over the two
    -
    3580C pairs of possible triangles (the decision is for no swap
    -
    3581C if the quadrilateral is not strictly convex).
    -
    3582C
    -
    3583C When the four vertices are nearly cocircular (the
    -
    3584C neutral case), the preferred decision is no swap -- in
    -
    3585C order to avoid unnecessary swaps and, more important, to
    -
    3586C avoid cycling in Subroutine OPTIM which is called by
    -
    3587C DELNOD and EDGE. Thus, a tolerance SWTOL (stored in
    -
    3588C SWPCOM by TRMESH or TRMSHR) is used to define 'nearness'
    -
    3589C to the neutral case.
    -
    3590C
    -
    3591C
    -
    3592C On input:
    -
    3593C
    -
    3594C IN1,IN2,IO1,IO2 = Nodal indexes of the vertices of
    -
    3595C the quadrilateral. IO1-IO2 is the
    -
    3596C triangulation arc (shared triangle
    -
    3597C side) to be replaced by IN1-IN2 if
    -
    3598C the decision is to swap. The
    -
    3599C triples (IO1,IO2,IN1) and (IO2,
    -
    3600C IO1,IN2) must define triangles (be
    -
    3601C in counterclockwise order) on in-
    -
    3602C put.
    -
    3603C
    -
    3604C X,Y = Arrays containing the nodal coordinates.
    -
    3605C
    -
    3606C Input parameters are not altered by this routine.
    -
    3607C
    -
    3608C On output:
    -
    3609C
    -
    3610C SWPTST = .TRUE. if and only if the arc connecting
    -
    3611C IO1 and IO2 is to be replaced.
    -
    3612C
    -
    3613C Modules required by SWPTST: None
    -
    3614C
    -
    3615C***********************************************************
    -
    3616C
    -
    3617 REAL DX11, DX12, DX22, DX21, DY11, DY12, DY22, DY21,
    -
    3618 . SIN1, SIN2, COS1, COS2, SIN12, SWTOL
    -
    3619C
    -
    3620C Tolerance stored by TRMESH or TRMSHR.
    -
    3621C
    -
    3622 COMMON/SWPCOM/SWTOL
    -
    3623C
    -
    3624C Local parameters:
    -
    3625C
    -
    3626C DX11,DY11 = X,Y components of the vector IN1->IO1
    -
    3627C DX12,DY12 = X,Y components of the vector IN1->IO2
    -
    3628C DX22,DY22 = X,Y components of the vector IN2->IO2
    -
    3629C DX21,DY21 = X,Y components of the vector IN2->IO1
    -
    3630C SIN1 = Cross product of the vectors IN1->IO1 and
    -
    3631C IN1->IO2 -- proportional to sin(T1), where
    -
    3632C T1 is the angle at IN1 formed by the vectors
    -
    3633C COS1 = Inner product of the vectors IN1->IO1 and
    -
    3634C IN1->IO2 -- proportional to cos(T1)
    -
    3635C SIN2 = Cross product of the vectors IN2->IO2 and
    -
    3636C IN2->IO1 -- proportional to sin(T2), where
    -
    3637C T2 is the angle at IN2 formed by the vectors
    -
    3638C COS2 = Inner product of the vectors IN2->IO2 and
    -
    3639C IN2->IO1 -- proportional to cos(T2)
    -
    3640C SIN12 = SIN1*COS2 + COS1*SIN2 -- proportional to
    -
    3641C sin(T1+T2)
    -
    3642C
    -
    3643C
    -
    3644C Compute the vectors containing the angles T1 and T2.
    -
    3645C
    -
    3646 dx11 = x(io1) - x(in1)
    -
    3647 dx12 = x(io2) - x(in1)
    -
    3648 dx22 = x(io2) - x(in2)
    -
    3649 dx21 = x(io1) - x(in2)
    -
    3650C
    -
    3651 dy11 = y(io1) - y(in1)
    -
    3652 dy12 = y(io2) - y(in1)
    -
    3653 dy22 = y(io2) - y(in2)
    -
    3654 dy21 = y(io1) - y(in2)
    -
    3655C
    -
    3656C Compute inner products.
    -
    3657C
    -
    3658 cos1 = dx11*dx12 + dy11*dy12
    -
    3659 cos2 = dx22*dx21 + dy22*dy21
    -
    3660C
    -
    3661C The diagonals should be swapped iff (T1+T2) > 180
    -
    3662C degrees. The following two tests ensure numerical
    -
    3663C stability: the decision must be FALSE when both
    -
    3664C angles are close to 0, and TRUE when both angles
    -
    3665C are close to 180 degrees.
    -
    3666C
    -
    3667 IF (cos1 .GE. 0. .AND. cos2 .GE. 0.) GO TO 2
    -
    3668 IF (cos1 .LT. 0. .AND. cos2 .LT. 0.) GO TO 1
    -
    3669C
    -
    3670C Compute vector cross products (Z-components).
    -
    3671C
    -
    3672 sin1 = dx11*dy12 - dx12*dy11
    -
    3673 sin2 = dx22*dy21 - dx21*dy22
    -
    3674 sin12 = sin1*cos2 + cos1*sin2
    -
    3675 IF (sin12 .GE. -swtol) GO TO 2
    -
    3676C
    -
    3677C Swap.
    -
    3678C
    -
    3679 1 swptst = .true.
    -
    3680 RETURN
    -
    3681C
    -
    3682C No swap.
    -
    3683C
    -
    3684 2 swptst = .false.
    -
    3685 RETURN
    -
    3686 END
    -
    3687 SUBROUTINE trfind (NST,PX,PY,N,X,Y,LIST,LPTR,LEND, I1,
    -
    3688 . I2,I3)
    -
    3689 INTEGER NST, N, LIST(*), LPTR(*), LEND(N), I1, I2, I3
    -
    3690 REAL PX, PY, X(N), Y(N)
    -
    3691C
    -
    3692C***********************************************************
    -
    3693C
    -
    3694C From TRIPACK
    -
    3695C Robert J. Renka
    -
    3696C Dept. of Computer Science
    -
    3697C Univ. of North Texas
    -
    3698C renka@cs.unt.edu
    -
    3699C 07/28/98
    -
    3700C
    -
    3701C This subroutine locates a point P relative to a triangu-
    -
    3702C lation created by Subroutine TRMESH or TRMSHR. If P is
    -
    3703C contained in a triangle, the three vertex indexes are
    -
    3704C returned. Otherwise, the indexes of the rightmost and
    -
    3705C leftmost visible boundary nodes are returned.
    -
    3706C
    -
    3707C
    -
    3708C On input:
    -
    3709C
    -
    3710C NST = Index of a node at which TRFIND begins the
    -
    3711C search. Search time depends on the proximity
    -
    3712C of this node to P.
    -
    3713C
    -
    3714C PX,PY = X and y coordinates of the point P to be
    -
    3715C located.
    -
    3716C
    -
    3717C N = Number of nodes in the triangulation. N .GE. 3.
    -
    3718C
    -
    3719C X,Y = Arrays of length N containing the coordinates
    -
    3720C of the nodes in the triangulation.
    -
    3721C
    -
    3722C LIST,LPTR,LEND = Data structure defining the trian-
    -
    3723C gulation. Refer to Subroutine
    -
    3724C TRMESH.
    -
    3725C
    -
    3726C Input parameters are not altered by this routine.
    -
    3727C
    -
    3728C On output:
    -
    3729C
    -
    3730C I1,I2,I3 = Nodal indexes, in counterclockwise order,
    -
    3731C of the vertices of a triangle containing
    -
    3732C P if P is contained in a triangle. If P
    -
    3733C is not in the convex hull of the nodes,
    -
    3734C I1 indexes the rightmost visible boundary
    -
    3735C node, I2 indexes the leftmost visible
    -
    3736C boundary node, and I3 = 0. Rightmost and
    -
    3737C leftmost are defined from the perspective
    -
    3738C of P, and a pair of points are visible
    -
    3739C from each other if and only if the line
    -
    3740C segment joining them intersects no trian-
    -
    3741C gulation arc. If P and all of the nodes
    -
    3742C lie on a common line, then I1 = I2 = I3 =
    -
    3743C 0 on output.
    -
    3744C
    -
    3745C Modules required by TRFIND: JRAND, LEFT, LSTPTR, STORE
    -
    3746C
    -
    3747C Intrinsic function called by TRFIND: ABS
    -
    3748C
    -
    3749C***********************************************************
    -
    3750C
    -
    3751 INTEGER JRAND, LSTPTR
    -
    3752 LOGICAL LEFT
    -
    3753 REAL STORE
    -
    3754 INTEGER IX, IY, IZ, LP, N0, N1, N1S, N2, N2S, N3, N4,
    -
    3755 . NB, NF, NL, NP, NPP
    -
    3756 LOGICAL FRWRD
    -
    3757 REAL B1, B2, XA, XB, XC, XP, YA, YB, YC, YP
    -
    3758C
    -
    3759 SAVE IX, IY, IZ
    -
    3760 DATA IX/1/, IY/2/, IZ/3/
    -
    3761C
    -
    3762C Local parameters:
    -
    3763C
    -
    3764C B1,B2 = Unnormalized barycentric coordinates of P with
    -
    3765C respect to (N1,N2,N3)
    -
    3766C IX,IY,IZ = Integer seeds for JRAND
    -
    3767C LP = LIST pointer
    -
    3768C N0,N1,N2 = Nodes in counterclockwise order defining a
    -
    3769C cone (with vertex N0) containing P
    -
    3770C N1S,N2S = Saved values of N1 and N2
    -
    3771C N3,N4 = Nodes opposite N1->N2 and N2->N1, respectively
    -
    3772C NB = Index of a boundary node -- first neighbor of
    -
    3773C NF or last neighbor of NL in the boundary
    -
    3774C traversal loops
    -
    3775C NF,NL = First and last neighbors of N0, or first
    -
    3776C (rightmost) and last (leftmost) nodes
    -
    3777C visible from P when P is exterior to the
    -
    3778C triangulation
    -
    3779C NP,NPP = Indexes of boundary nodes used in the boundary
    -
    3780C traversal loops
    -
    3781C XA,XB,XC = Dummy arguments for FRWRD
    -
    3782C YA,YB,YC = Dummy arguments for FRWRD
    -
    3783C XP,YP = Local variables containing the components of P
    -
    3784C
    -
    3785C Statement function:
    -
    3786C
    -
    3787C FRWRD = TRUE iff C is forward of A->B
    -
    3788C iff <A->B,A->C> .GE. 0.
    -
    3789C
    -
    3790 frwrd(xa,ya,xb,yb,xc,yc) = (xb-xa)*(xc-xa) +
    -
    3791 . (yb-ya)*(yc-ya) .GE. 0.
    -
    3792C
    -
    3793C Initialize variables.
    -
    3794C
    -
    3795 xp = px
    -
    3796 yp = py
    -
    3797 n0 = nst
    -
    3798 IF (n0 .LT. 1 .OR. n0 .GT. n)
    -
    3799 . n0 = jrand(n, ix,iy,iz )
    -
    3800C
    -
    3801C Set NF and NL to the first and last neighbors of N0, and
    -
    3802C initialize N1 = NF.
    -
    3803C
    -
    3804 1 lp = lend(n0)
    -
    3805 nl = list(lp)
    -
    3806 lp = lptr(lp)
    -
    3807 nf = list(lp)
    -
    3808 n1 = nf
    -
    3809C
    -
    3810C Find a pair of adjacent neighbors N1,N2 of N0 that define
    -
    3811C a wedge containing P: P LEFT N0->N1 and P RIGHT N0->N2.
    -
    3812C
    -
    3813 IF (nl .GT. 0) GO TO 2
    -
    3814C
    -
    3815C N0 is a boundary node. Test for P exterior.
    -
    3816C
    -
    3817 nl = -nl
    -
    3818 IF ( .NOT. left(x(n0),y(n0),x(nf),y(nf),xp,yp) ) THEN
    -
    3819 nl = n0
    -
    3820 GO TO 9
    -
    3821 ENDIF
    -
    3822 IF ( .NOT. left(x(nl),y(nl),x(n0),y(n0),xp,yp) ) THEN
    -
    3823 nb = nf
    -
    3824 nf = n0
    -
    3825 np = nl
    -
    3826 npp = n0
    -
    3827 GO TO 11
    -
    3828 ENDIF
    -
    3829 GO TO 3
    -
    3830C
    -
    3831C N0 is an interior node. Find N1.
    -
    3832C
    -
    3833 2 IF ( left(x(n0),y(n0),x(n1),y(n1),xp,yp) ) GO TO 3
    -
    3834 lp = lptr(lp)
    -
    3835 n1 = list(lp)
    -
    3836 IF (n1 .EQ. nl) GO TO 6
    -
    3837 GO TO 2
    -
    3838C
    -
    3839C P is to the left of edge N0->N1. Initialize N2 to the
    -
    3840C next neighbor of N0.
    -
    3841C
    -
    3842 3 lp = lptr(lp)
    -
    3843 n2 = abs(list(lp))
    -
    3844 IF ( .NOT. left(x(n0),y(n0),x(n2),y(n2),xp,yp) )
    -
    3845 . GO TO 7
    -
    3846 n1 = n2
    -
    3847 IF (n1 .NE. nl) GO TO 3
    -
    3848 IF ( .NOT. left(x(n0),y(n0),x(nf),y(nf),xp,yp) )
    -
    3849 . GO TO 6
    -
    3850 IF (xp .EQ. x(n0) .AND. yp .EQ. y(n0)) GO TO 5
    -
    3851C
    -
    3852C P is left of or on edges N0->NB for all neighbors NB
    -
    3853C of N0.
    -
    3854C All points are collinear iff P is left of NB->N0 for
    -
    3855C all neighbors NB of N0. Search the neighbors of N0.
    -
    3856C NOTE -- N1 = NL and LP points to NL.
    -
    3857C
    -
    3858 4 IF ( .NOT. left(x(n1),y(n1),x(n0),y(n0),xp,yp) )
    -
    3859 . GO TO 5
    -
    3860 lp = lptr(lp)
    -
    3861 n1 = abs(list(lp))
    -
    3862 IF (n1 .EQ. nl) GO TO 17
    -
    3863 GO TO 4
    -
    3864C
    -
    3865C P is to the right of N1->N0, or P=N0. Set N0 to N1 and
    -
    3866C start over.
    -
    3867C
    -
    3868 5 n0 = n1
    -
    3869 GO TO 1
    -
    3870C
    -
    3871C P is between edges N0->N1 and N0->NF.
    -
    3872C
    -
    3873 6 n2 = nf
    -
    3874C
    -
    3875C P is contained in the wedge defined by line segments
    -
    3876C N0->N1 and N0->N2, where N1 is adjacent to N2. Set
    -
    3877C N3 to the node opposite N1->N2, and save N1 and N2 to
    -
    3878C test for cycling.
    -
    3879C
    -
    3880 7 n3 = n0
    -
    3881 n1s = n1
    -
    3882 n2s = n2
    -
    3883C
    -
    3884C Top of edge hopping loop. Test for termination.
    -
    3885C
    -
    3886 8 IF ( left(x(n1),y(n1),x(n2),y(n2),xp,yp) ) THEN
    -
    3887C
    -
    3888C P LEFT N1->N2 and hence P is in (N1,N2,N3) unless an
    -
    3889C error resulted from floating point inaccuracy and
    -
    3890C collinearity. Compute the unnormalized barycentric
    -
    3891C coordinates of P with respect to (N1,N2,N3).
    -
    3892C
    -
    3893 b1 = (x(n3)-x(n2))*(yp-y(n2)) -
    -
    3894 . (xp-x(n2))*(y(n3)-y(n2))
    -
    3895 b2 = (x(n1)-x(n3))*(yp-y(n3)) -
    -
    3896 . (xp-x(n3))*(y(n1)-y(n3))
    -
    3897 IF (store(b1+1.) .GE. 1. .AND.
    -
    3898 . store(b2+1.) .GE. 1.) GO TO 16
    -
    3899C
    -
    3900C Restart with N0 randomly selected.
    -
    3901C
    -
    3902 n0 = jrand(n, ix,iy,iz )
    -
    3903 GO TO 1
    -
    3904 ENDIF
    -
    3905C
    -
    3906C Set N4 to the neighbor of N2 which follows N1 (node
    -
    3907C opposite N2->N1) unless N1->N2 is a boundary edge.
    -
    3908C
    -
    3909 lp = lstptr(lend(n2),n1,list,lptr)
    -
    3910 IF (list(lp) .LT. 0) THEN
    -
    3911 nf = n2
    -
    3912 nl = n1
    -
    3913 GO TO 9
    -
    3914 ENDIF
    -
    3915 lp = lptr(lp)
    -
    3916 n4 = abs(list(lp))
    -
    3917C
    -
    3918C Select the new edge N1->N2 which intersects the line
    -
    3919C segment N0-P, and set N3 to the node opposite N1->N2.
    -
    3920C
    -
    3921 IF ( left(x(n0),y(n0),x(n4),y(n4),xp,yp) ) THEN
    -
    3922 n3 = n1
    -
    3923 n1 = n4
    -
    3924 n2s = n2
    -
    3925 IF (n1 .NE. n1s .AND. n1 .NE. n0) GO TO 8
    -
    3926 ELSE
    -
    3927 n3 = n2
    -
    3928 n2 = n4
    -
    3929 n1s = n1
    -
    3930 IF (n2 .NE. n2s .AND. n2 .NE. n0) GO TO 8
    -
    3931 ENDIF
    -
    3932C
    -
    3933C The starting node N0 or edge N1-N2 was encountered
    -
    3934C again, implying a cycle (infinite loop). Restart
    -
    3935C with N0 randomly selected.
    -
    3936C
    -
    3937 n0 = jrand(n, ix,iy,iz )
    -
    3938 GO TO 1
    -
    3939C
    -
    3940C Boundary traversal loops. NL->NF is a boundary edge and
    -
    3941C P RIGHT NL->NF. Save NL and NF.
    -
    3942
    -
    3943 9 np = nl
    -
    3944 npp = nf
    -
    3945C
    -
    3946C Find the first (rightmost) visible boundary node NF. NB
    -
    3947C is set to the first neighbor of NF, and NP is the last
    -
    3948C neighbor.
    -
    3949C
    -
    3950 10 lp = lend(nf)
    -
    3951 lp = lptr(lp)
    -
    3952 nb = list(lp)
    -
    3953 IF ( .NOT. left(x(nf),y(nf),x(nb),y(nb),xp,yp) )
    -
    3954 . GO TO 12
    -
    3955C
    -
    3956C P LEFT NF->NB and thus NB is not visible unless an error
    -
    3957C resulted from floating point inaccuracy and collinear-
    -
    3958C ity of the 4 points NP, NF, NB, and P.
    -
    3959C
    -
    3960 11 IF ( frwrd(x(nf),y(nf),x(np),y(np),xp,yp) .OR.
    -
    3961 . frwrd(x(nf),y(nf),x(np),y(np),x(nb),y(nb)) ) THEN
    -
    3962 i1 = nf
    -
    3963 GO TO 13
    -
    3964 ENDIF
    -
    3965C
    -
    3966C Bottom of loop.
    -
    3967C
    -
    3968 12 np = nf
    -
    3969 nf = nb
    -
    3970 GO TO 10
    -
    3971C
    -
    3972C Find the last (leftmost) visible boundary node NL. NB
    -
    3973C is set to the last neighbor of NL, and NPP is the first
    -
    3974C neighbor.
    -
    3975C
    -
    3976 13 lp = lend(nl)
    -
    3977 nb = -list(lp)
    -
    3978 IF ( .NOT. left(x(nb),y(nb),x(nl),y(nl),xp,yp) )
    -
    3979 . GO TO 14
    -
    3980C
    -
    3981C P LEFT NB->NL and thus NB is not visible unless an error
    -
    3982C resulted from floating point inaccuracy and collinear-
    -
    3983C ity of the 4 points P, NB, NL, and NPP.
    -
    3984C
    -
    3985 IF ( frwrd(x(nl),y(nl),x(npp),y(npp),xp,yp) .OR.
    -
    3986 . frwrd(x(nl),y(nl),x(npp),y(npp),x(nb),y(nb)) )
    -
    3987 . GO TO 15
    -
    3988C
    -
    3989C Bottom of loop.
    -
    3990C
    -
    3991 14 npp = nl
    -
    3992 nl = nb
    -
    3993 GO TO 13
    -
    3994C
    -
    3995C NL is the leftmost visible boundary node.
    -
    3996C
    -
    3997 15 i2 = nl
    -
    3998 i3 = 0
    -
    3999 RETURN
    -
    4000C
    -
    4001C P is in the triangle (N1,N2,N3).
    -
    4002C
    -
    4003 16 i1 = n1
    -
    4004 i2 = n2
    -
    4005 i3 = n3
    -
    4006 RETURN
    -
    4007C
    -
    4008C All points are collinear.
    -
    4009C
    -
    4010 17 i1 = 0
    -
    4011 i2 = 0
    -
    4012 i3 = 0
    -
    4013 RETURN
    -
    4014 END
    -
    4015 SUBROUTINE trlist (NCC,LCC,N,LIST,LPTR,LEND,NROW, NT,
    -
    4016 . LTRI,LCT,IER)
    -
    4017 INTEGER NCC, LCC(*), N, LIST(*), LPTR(*), LEND(N),
    -
    4018 . NROW, NT, LTRI(NROW,*), LCT(*), IER
    -
    4019C
    -
    4020C***********************************************************
    -
    4021C
    -
    4022C From TRIPACK
    -
    4023C Robert J. Renka
    -
    4024C Dept. of Computer Science
    -
    4025C Univ. of North Texas
    -
    4026C renka@cs.unt.edu
    -
    4027C 03/22/97
    -
    4028C
    -
    4029C This subroutine converts a triangulation data structure
    -
    4030C from the linked list created by Subroutine TRMESH or
    -
    4031C TRMSHR to a triangle list.
    -
    4032C
    -
    4033C On input:
    -
    4034C
    -
    4035C NCC = Number of constraints. NCC .GE. 0.
    -
    4036C
    -
    4037C LCC = List of constraint curve starting indexes (or
    -
    4038C dummy array of length 1 if NCC = 0). Refer to
    -
    4039C Subroutine ADDCST.
    -
    4040C
    -
    4041C N = Number of nodes in the triangulation. N .GE. 3.
    -
    4042C
    -
    4043C LIST,LPTR,LEND = Linked list data structure defin-
    -
    4044C ing the triangulation. Refer to
    -
    4045C Subroutine TRMESH.
    -
    4046C
    -
    4047C NROW = Number of rows (entries per triangle) re-
    -
    4048C served for the triangle list LTRI. The value
    -
    4049C must be 6 if only the vertex indexes and
    -
    4050C neighboring triangle indexes are to be
    -
    4051C stored, or 9 if arc indexes are also to be
    -
    4052C assigned and stored. Refer to LTRI.
    -
    4053C
    -
    4054C The above parameters are not altered by this routine.
    -
    4055C
    -
    4056C LTRI = Integer array of length at least NROW*NT,
    -
    4057C where NT is at most 2N-5. (A sufficient
    -
    4058C length is 12N if NROW=6 or 18N if NROW=9.)
    -
    4059C
    -
    4060C LCT = Integer array of length NCC or dummy array of
    -
    4061C length 1 if NCC = 0.
    -
    4062C
    -
    4063C On output:
    -
    4064C
    -
    4065C NT = Number of triangles in the triangulation unless
    -
    4066C IER .NE. 0, in which case NT = 0. NT = 2N - NB
    -
    4067C - 2, where NB is the number of boundary nodes.
    -
    4068C
    -
    4069C LTRI = NROW by NT array whose J-th column contains
    -
    4070C the vertex nodal indexes (first three rows),
    -
    4071C neighboring triangle indexes (second three
    -
    4072C rows), and, if NROW = 9, arc indexes (last
    -
    4073C three rows) associated with triangle J for
    -
    4074C J = 1,...,NT. The vertices are ordered
    -
    4075C counterclockwise with the first vertex taken
    -
    4076C to be the one with smallest index. Thus,
    -
    4077C LTRI(2,J) and LTRI(3,J) are larger than
    -
    4078C LTRI(1,J) and index adjacent neighbors of
    -
    4079C node LTRI(1,J). For I = 1,2,3, LTRI(I+3,J)
    -
    4080C and LTRI(I+6,J) index the triangle and arc,
    -
    4081C respectively, which are opposite (not shared
    -
    4082C by) node LTRI(I,J), with LTRI(I+3,J) = 0 if
    -
    4083C LTRI(I+6,J) indexes a boundary arc. Vertex
    -
    4084C indexes range from 1 to N, triangle indexes
    -
    4085C from 0 to NT, and, if included, arc indexes
    -
    4086C from 1 to NA = NT+N-1. The triangles are or-
    -
    4087C dered on first (smallest) vertex indexes,
    -
    4088C except that the sets of constraint triangles
    -
    4089C (triangles contained in the closure of a con-
    -
    4090C straint region) follow the non-constraint
    -
    4091C triangles.
    -
    4092C
    -
    4093C LCT = Array of length NCC containing the triangle
    -
    4094C index of the first triangle of constraint J in
    -
    4095C LCT(J). Thus, the number of non-constraint
    -
    4096C triangles is LCT(1)-1, and constraint J con-
    -
    4097C tains LCT(J+1)-LCT(J) triangles, where
    -
    4098C LCT(NCC+1) = NT+1.
    -
    4099C
    -
    4100C IER = Error indicator.
    -
    4101C IER = 0 if no errors were encountered.
    -
    4102C IER = 1 if NCC, N, NROW, or an LCC entry is
    -
    4103C outside its valid range on input.
    -
    4104C IER = 2 if the triangulation data structure
    -
    4105C (LIST,LPTR,LEND) is invalid. Note,
    -
    4106C however, that these arrays are not
    -
    4107C completely tested for validity.
    -
    4108C
    -
    4109C Modules required by TRLIST: None
    -
    4110C
    -
    4111C Intrinsic function called by TRLIST: ABS
    -
    4112C
    -
    4113C***********************************************************
    -
    4114C
    -
    4115 INTEGER I, I1, I2, I3, ISV, J, JLAST, KA, KN, KT, L,
    -
    4116 . LCC1, LP, LP2, LPL, LPLN1, N1, N1ST, N2, N3,
    -
    4117 . NM2, NN
    -
    4118 LOGICAL ARCS, CSTRI, PASS2
    -
    4119C
    -
    4120C Test for invalid input parameters and store the index
    -
    4121C LCC1 of the first constraint node (if any).
    -
    4122C
    -
    4123 NN = n
    -
    4124 IF (ncc .LT. 0 .OR. (nrow .NE. 6 .AND.
    -
    4125 . nrow .NE. 9)) GO TO 12
    -
    4126 lcc1 = nn+1
    -
    4127 IF (ncc .EQ. 0) THEN
    -
    4128 IF (nn .LT. 3) GO TO 12
    -
    4129 ELSE
    -
    4130 DO 1 i = ncc,1,-1
    -
    4131 IF (lcc1-lcc(i) .LT. 3) GO TO 12
    -
    4132 lcc1 = lcc(i)
    -
    4133 1 CONTINUE
    -
    4134 IF (lcc1 .LT. 1) GO TO 12
    -
    4135 ENDIF
    -
    4136C
    -
    4137C Initialize parameters for loop on triangles KT = (N1,N2,
    -
    4138C N3), where N1 < N2 and N1 < N3. This requires two
    -
    4139C passes through the nodes with all non-constraint
    -
    4140C triangles stored on the first pass, and the constraint
    -
    4141C triangles stored on the second.
    -
    4142C
    -
    4143C ARCS = TRUE iff arc indexes are to be stored.
    -
    4144C KA,KT = Numbers of currently stored arcs and triangles.
    -
    4145C N1ST = Starting index for the loop on nodes (N1ST = 1 on
    -
    4146C pass 1, and N1ST = LCC1 on pass 2).
    -
    4147C NM2 = Upper bound on candidates for N1.
    -
    4148C PASS2 = TRUE iff constraint triangles are to be stored.
    -
    4149C
    -
    4150 arcs = nrow .EQ. 9
    -
    4151 ka = 0
    -
    4152 kt = 0
    -
    4153 n1st = 1
    -
    4154 nm2 = nn-2
    -
    4155 pass2 = .false.
    -
    4156C
    -
    4157C Loop on nodes N1: J = constraint containing N1,
    -
    4158C JLAST = last node in constraint J.
    -
    4159C
    -
    4160 2 j = 0
    -
    4161 jlast = lcc1 - 1
    -
    4162 DO 11 n1 = n1st,nm2
    -
    4163 IF (n1 .GT. jlast) THEN
    -
    4164C
    -
    4165C N1 is the first node in constraint J+1. Update J and
    -
    4166C JLAST, and store the first constraint triangle index
    -
    4167C if in pass 2.
    -
    4168C
    -
    4169 j = j + 1
    -
    4170 IF (j .LT. ncc) THEN
    -
    4171 jlast = lcc(j+1) - 1
    -
    4172 ELSE
    -
    4173 jlast = nn
    -
    4174 ENDIF
    -
    4175 IF (pass2) lct(j) = kt + 1
    -
    4176 ENDIF
    -
    4177C
    -
    4178C Loop on pairs of adjacent neighbors (N2,N3). LPLN1 points
    -
    4179C to the last neighbor of N1, and LP2 points to N2.
    -
    4180C
    -
    4181 lpln1 = lend(n1)
    -
    4182 lp2 = lpln1
    -
    4183 3 lp2 = lptr(lp2)
    -
    4184 n2 = list(lp2)
    -
    4185 lp = lptr(lp2)
    -
    4186 n3 = abs(list(lp))
    -
    4187 IF (n2 .LT. n1 .OR. n3 .LT. n1) GO TO 10
    -
    4188C
    -
    4189C (N1,N2,N3) is a constraint triangle iff the three nodes
    -
    4190C are in the same constraint and N2 < N3. Bypass con-
    -
    4191C straint triangles on pass 1 and non-constraint triangles
    -
    4192C on pass 2.
    -
    4193C
    -
    4194 cstri = n1 .GE. lcc1 .AND. n2 .LT. n3 .AND.
    -
    4195 . n3 .LE. jlast
    -
    4196 IF ((cstri .AND. .NOT. pass2) .OR.
    -
    4197 . (.NOT. cstri .AND. pass2)) GO TO 10
    -
    4198C
    -
    4199C Add a new triangle KT = (N1,N2,N3).
    -
    4200C
    -
    4201 kt = kt + 1
    -
    4202 ltri(1,kt) = n1
    -
    4203 ltri(2,kt) = n2
    -
    4204 ltri(3,kt) = n3
    -
    4205C
    -
    4206C Loop on triangle sides (I1,I2) with neighboring triangles
    -
    4207C KN = (I1,I2,I3).
    -
    4208C
    -
    4209 DO 9 i = 1,3
    -
    4210 IF (i .EQ. 1) THEN
    -
    4211 i1 = n3
    -
    4212 i2 = n2
    -
    4213 ELSEIF (i .EQ. 2) THEN
    -
    4214 i1 = n1
    -
    4215 i2 = n3
    -
    4216 ELSE
    -
    4217 i1 = n2
    -
    4218 i2 = n1
    -
    4219 ENDIF
    -
    4220C
    -
    4221C Set I3 to the neighbor of I1 which follows I2 unless
    -
    4222C I2->I1 is a boundary arc.
    -
    4223C
    -
    4224 lpl = lend(i1)
    -
    4225 lp = lptr(lpl)
    -
    4226 4 IF (list(lp) .EQ. i2) GO TO 5
    -
    4227 lp = lptr(lp)
    -
    4228 IF (lp .NE. lpl) GO TO 4
    -
    4229C
    -
    4230C I2 is the last neighbor of I1 unless the data structure
    -
    4231C is invalid. Bypass the search for a neighboring
    -
    4232C triangle if I2->I1 is a boundary arc.
    -
    4233C
    -
    4234 IF (abs(list(lp)) .NE. i2) GO TO 13
    -
    4235 kn = 0
    -
    4236 IF (list(lp) .LT. 0) GO TO 8
    -
    4237C
    -
    4238C I2->I1 is not a boundary arc, and LP points to I2 as
    -
    4239C a neighbor of I1.
    -
    4240C
    -
    4241 5 lp = lptr(lp)
    -
    4242 i3 = abs(list(lp))
    -
    4243C
    -
    4244C Find L such that LTRI(L,KN) = I3 (not used if KN > KT),
    -
    4245C and permute the vertex indexes of KN so that I1 is
    -
    4246C smallest.
    -
    4247C
    -
    4248 IF (i1 .LT. i2 .AND. i1 .LT. i3) THEN
    -
    4249 l = 3
    -
    4250 ELSEIF (i2 .LT. i3) THEN
    -
    4251 l = 2
    -
    4252 isv = i1
    -
    4253 i1 = i2
    -
    4254 i2 = i3
    -
    4255 i3 = isv
    -
    4256 ELSE
    -
    4257 l = 1
    -
    4258 isv = i1
    -
    4259 i1 = i3
    -
    4260 i3 = i2
    -
    4261 i2 = isv
    -
    4262 ENDIF
    -
    4263C
    -
    4264C Test for KN > KT (triangle index not yet assigned).
    -
    4265C
    -
    4266 IF (i1 .GT. n1 .AND. .NOT. pass2) GO TO 9
    -
    4267C
    -
    4268C Find KN, if it exists, by searching the triangle list in
    -
    4269C reverse order.
    -
    4270C
    -
    4271 DO 6 kn = kt-1,1,-1
    -
    4272 IF (ltri(1,kn) .EQ. i1 .AND. ltri(2,kn) .EQ.
    -
    4273 . i2 .AND. ltri(3,kn) .EQ. i3) GO TO 7
    -
    4274 6 CONTINUE
    -
    4275 GO TO 9
    -
    4276C
    -
    4277C Store KT as a neighbor of KN.
    -
    4278C
    -
    4279 7 ltri(l+3,kn) = kt
    -
    4280C
    -
    4281C Store KN as a neighbor of KT, and add a new arc KA.
    -
    4282C
    -
    4283 8 ltri(i+3,kt) = kn
    -
    4284 IF (arcs) THEN
    -
    4285 ka = ka + 1
    -
    4286 ltri(i+6,kt) = ka
    -
    4287 IF (kn .NE. 0) ltri(l+6,kn) = ka
    -
    4288 ENDIF
    -
    4289 9 CONTINUE
    -
    4290C
    -
    4291C Bottom of loop on triangles.
    -
    4292C
    -
    4293 10 IF (lp2 .NE. lpln1) GO TO 3
    -
    4294 11 CONTINUE
    -
    4295C
    -
    4296C Bottom of loop on nodes.
    -
    4297C
    -
    4298 IF (.NOT. pass2 .AND. ncc .GT. 0) THEN
    -
    4299 pass2 = .true.
    -
    4300 n1st = lcc1
    -
    4301 GO TO 2
    -
    4302 ENDIF
    -
    4303C
    -
    4304C No errors encountered.
    -
    4305C
    -
    4306 nt = kt
    -
    4307 ier = 0
    -
    4308 RETURN
    -
    4309C
    -
    4310C Invalid input parameter.
    -
    4311C
    -
    4312 12 nt = 0
    -
    4313 ier = 1
    -
    4314 RETURN
    -
    4315C
    -
    4316C Invalid triangulation data structure: I1 is a neighbor of
    -
    4317C I2, but I2 is not a neighbor of I1.
    -
    4318C
    -
    4319 13 nt = 0
    -
    4320 ier = 2
    -
    4321 RETURN
    -
    4322 END
    -
    4323 SUBROUTINE trlprt (NCC,LCT,N,X,Y,NROW,NT,LTRI,LOUT,
    -
    4324 . PRNTX)
    -
    4325 INTEGER NCC, LCT(*), N, NROW, NT, LTRI(NROW,NT),
    -
    4326 . lout
    -
    4327 LOGICAL PRNTX
    -
    4328 REAL X(N), Y(N)
    -
    4329C
    -
    4330C***********************************************************
    -
    4331C
    -
    4332C From TRLPACK
    -
    4333C Robert J. Renka
    -
    4334C Dept. of Computer Science
    -
    4335C Univ. of North Texas
    -
    4336C renka@cs.unt.edu
    -
    4337C 07/02/98
    -
    4338C
    -
    4339C Given a triangulation of a set of points in the plane,
    -
    4340C this subroutine prints the triangle list created by
    -
    4341C Subroutine TRLIST and, optionally, the nodal coordinates
    -
    4342C on logical unit LOUT. The numbers of boundary nodes,
    -
    4343C triangles, and arcs, and the constraint region triangle
    -
    4344C indexes, if any, are also printed.
    -
    4345C
    -
    4346C All parameters other than LOUT and PRNTX should be
    -
    4347C unaltered from their values on output from TRLIST.
    -
    4348C
    -
    4349C
    -
    4350C On input:
    -
    4351C
    -
    4352C NCC = Number of constraints.
    -
    4353C
    -
    4354C LCT = List of constraint triangle starting indexes
    -
    4355C (or dummy array of length 1 if NCC = 0).
    -
    4356C
    -
    4357C N = Number of nodes in the triangulation.
    -
    4358C 3 .LE. N .LE. 9999.
    -
    4359C
    -
    4360C X,Y = Arrays of length N containing the coordinates
    -
    4361C of the nodes in the triangulation -- not used
    -
    4362C unless PRNTX = TRUE.
    -
    4363C
    -
    4364C NROW = Number of rows (entries per triangle) re-
    -
    4365C served for the triangle list LTRI. The value
    -
    4366C must be 6 if only the vertex indexes and
    -
    4367C neighboring triangle indexes are stored, or 9
    -
    4368C if arc indexes are also stored.
    -
    4369C
    -
    4370C NT = Number of triangles in the triangulation.
    -
    4371C 1 .LE. NT .LE. 9999.
    -
    4372C
    -
    4373C LTRI = NROW by NT array whose J-th column contains
    -
    4374C the vertex nodal indexes (first three rows),
    -
    4375C neighboring triangle indexes (second three
    -
    4376C rows), and, if NROW = 9, arc indexes (last
    -
    4377C three rows) associated with triangle J for
    -
    4378C J = 1,...,NT.
    -
    4379C
    -
    4380C LOUT = Logical unit number for output. 0 .LE. LOUT
    -
    4381C .LE. 99. Output is printed on unit 6 if LOUT
    -
    4382C is outside its valid range on input.
    -
    4383C
    -
    4384C PRNTX = Logical variable with value TRUE if and only
    -
    4385C if X and Y are to be printed (to 6 decimal
    -
    4386C places).
    -
    4387C
    -
    4388C None of the parameters are altered by this routine.
    -
    4389C
    -
    4390C Modules required by TRLPRT: None
    -
    4391C
    -
    4392C***********************************************************
    -
    4393C
    -
    4394 INTEGER I, K, LUN, NA, NB, NL, NLMAX, NMAX
    -
    4395 DATA NMAX/9999/, NLMAX/60/
    -
    4396C
    -
    4397C Local parameters:
    -
    4398C
    -
    4399C I = DO-loop, nodal index, and row index for LTRI
    -
    4400C K = DO-loop and triangle index
    -
    4401C LUN = Logical unit number for output
    -
    4402C NA = Number of triangulation arcs
    -
    4403C NB = Number of boundary nodes
    -
    4404C NL = Number of lines printed on the current page
    -
    4405C NLMAX = Maximum number of print lines per page
    -
    4406C NMAX = Maximum value of N and NT (4-digit format)
    -
    4407C
    -
    4408 lun = lout
    -
    4409 IF (lun .LT. 0 .OR. lun .GT. 99) lun = 6
    -
    4410C
    -
    4411C Print a heading and test for invalid input.
    -
    4412C
    -
    4413 WRITE (lun,100)
    -
    4414 nl = 1
    -
    4415 IF (n .LT. 3 .OR. n .GT. nmax .OR.
    -
    4416 . (nrow .NE. 6 .AND. nrow .NE. 9) .OR.
    -
    4417 . nt .LT. 1 .OR. nt .GT. nmax) THEN
    -
    4418C
    -
    4419C Print an error message and bypass the loops.
    -
    4420C
    -
    4421 WRITE (lun,110) n, nrow, nt
    -
    4422 GO TO 3
    -
    4423 ENDIF
    -
    4424 IF (prntx) THEN
    -
    4425C
    -
    4426C Print X and Y.
    -
    4427C
    -
    4428 WRITE (lun,101)
    -
    4429 nl = 6
    -
    4430 DO 1 i = 1,n
    -
    4431 IF (nl .GE. nlmax) THEN
    -
    4432 WRITE (lun,106)
    -
    4433 nl = 0
    -
    4434 ENDIF
    -
    4435 WRITE (lun,102) i, x(i), y(i)
    -
    4436 nl = nl + 1
    -
    4437 1 CONTINUE
    -
    4438 ENDIF
    -
    4439C
    -
    4440C Print the triangulation LTRI.
    -
    4441C
    -
    4442 IF (nl .GT. nlmax/2) THEN
    -
    4443 WRITE (lun,106)
    -
    4444 nl = 0
    -
    4445 ENDIF
    -
    4446 IF (nrow .EQ. 6) THEN
    -
    4447 WRITE (lun,103)
    -
    4448 ELSE
    -
    4449 WRITE (lun,104)
    -
    4450 ENDIF
    -
    4451 nl = nl + 5
    -
    4452 DO 2 k = 1,nt
    -
    4453 IF (nl .GE. nlmax) THEN
    -
    4454 WRITE (lun,106)
    -
    4455 nl = 0
    -
    4456 ENDIF
    -
    4457 WRITE (lun,105) k, (ltri(i,k), i = 1,nrow)
    -
    4458 nl = nl + 1
    -
    4459 2 CONTINUE
    -
    4460C
    -
    4461C Print NB, NA, and NT (boundary nodes, arcs, and
    -
    4462C triangles).
    -
    4463C
    -
    4464 nb = 2*n - nt - 2
    -
    4465 na = nt + n - 1
    -
    4466 IF (nl .GT. nlmax-6) WRITE (lun,106)
    -
    4467 WRITE (lun,107) nb, na, nt
    -
    4468C
    -
    4469C Print NCC and LCT.
    -
    4470C
    -
    4471 3 WRITE (lun,108) ncc
    -
    4472 IF (ncc .GT. 0) WRITE (lun,109) (lct(i), i = 1,ncc)
    -
    4473 RETURN
    -
    4474C
    -
    4475C Print formats:
    -
    4476C
    -
    4477 100 FORMAT (///,24x,'TRIPACK (TRLIST) Output')
    -
    4478 101 FORMAT (//16x,'Node',7x,'X(Node)',10x,'Y(Node)'//)
    -
    4479 102 FORMAT (16x,i4,2e17.6)
    -
    4480 103 FORMAT (//1x,'Triangle',8x,'Vertices',12x,'Neighbors'/
    -
    4481 . 4x,'KT',7x,'N1',5x,'N2',5x,'N3',4x,'KT1',4x,
    -
    4482 . 'KT2',4x,'KT3'/)
    -
    4483 104 FORMAT (//1x,'Triangle',8x,'Vertices',12x,'Neighbors',
    -
    4484 . 14x,'Arcs'/
    -
    4485 . 4x,'KT',7x,'N1',5x,'N2',5x,'N3',4x,'KT1',4x,
    -
    4486 . 'KT2',4x,'KT3',4x,'KA1',4x,'KA2',4x,'KA3'/)
    -
    4487 105 FORMAT (2x,i4,2x,6(3x,i4),3(2x,i5))
    -
    4488 106 FORMAT (///)
    -
    4489 107 FORMAT (/1x,'NB = ',i4,' Boundary Nodes',5x,
    -
    4490 . 'NA = ',i5,' Arcs',5x,'NT = ',i5,
    -
    4491 . ' Triangles')
    -
    4492 108 FORMAT (/1x,'NCC =',i3,' Constraint Curves')
    -
    4493 109 FORMAT (1x,9x,14i5)
    -
    4494 110 FORMAT (//1x,10x,'*** Invalid Parameter: N =',i5,
    -
    4495 . ', NROW =',i5,', NT =',i5,' ***')
    -
    4496 END
    -
    4497 SUBROUTINE trmesh (N,X,Y, LIST,LPTR,LEND,LNEW,NEAR,
    -
    4498 . NEXT,DIST,IER)
    -
    4499 INTEGER N, LIST(*), LPTR(*), LEND(N), LNEW, NEAR(N),
    -
    4500 . next(n), ier
    -
    4501 REAL X(N), Y(N), DIST(N)
    -
    4502C
    -
    4503C***********************************************************
    -
    4504C
    -
    4505C From TRIPACK
    -
    4506C Robert J. Renka
    -
    4507C Dept. of Computer Science
    -
    4508C Univ. of North Texas
    -
    4509C renka@cs.unt.edu
    -
    4510C 06/28/98
    -
    4511C
    -
    4512C This subroutine creates a Delaunay triangulation of a
    -
    4513C set of N arbitrarily distributed points in the plane re-
    -
    4514C ferred to as nodes. The Delaunay triangulation is defined
    -
    4515C as a set of triangles with the following five properties:
    -
    4516C
    -
    4517C 1) The triangle vertices are nodes.
    -
    4518C 2) No triangle contains a node other than its vertices.
    -
    4519C 3) The interiors of the triangles are pairwise disjoint.
    -
    4520C 4) The union of triangles is the convex hull of the set
    -
    4521C of nodes (the smallest convex set which contains
    -
    4522C the nodes).
    -
    4523C 5) The interior of the circumcircle of each triangle
    -
    4524C contains no node.
    -
    4525C
    -
    4526C The first four properties define a triangulation, and the
    -
    4527C last property results in a triangulation which is as close
    -
    4528C as possible to equiangular in a certain sense and which is
    -
    4529C uniquely defined unless four or more nodes lie on a common
    -
    4530C circle. This property makes the triangulation well-suited
    -
    4531C for solving closest point problems and for triangle-based
    -
    4532C interpolation.
    -
    4533C
    -
    4534C The triangulation can be generalized to a constrained
    -
    4535C Delaunay triangulation by a call to Subroutine ADDCST.
    -
    4536C This allows for user-specified boundaries defining a non-
    -
    4537C convex and/or multiply connected region.
    -
    4538C
    -
    4539C The algorithm for constructing the triangulation has
    -
    4540C expected time complexity O(N*log(N)) for most nodal dis-
    -
    4541C tributions. Also, since the algorithm proceeds by adding
    -
    4542C nodes incrementally, the triangulation may be updated with
    -
    4543C the addition (or deletion) of a node very efficiently.
    -
    4544C The adjacency information representing the triangulation
    -
    4545C is stored as a linked list requiring approximately 13N
    -
    4546C storage locations.
    -
    4547C
    -
    4548C
    -
    4549C The following is a list of the software package modules
    -
    4550C which a user may wish to call directly:
    -
    4551C
    -
    4552C ADDCST - Generalizes the Delaunay triangulation to allow
    -
    4553C for user-specified constraints.
    -
    4554C
    -
    4555C ADDNOD - Updates the triangulation by appending or
    -
    4556C inserting a new node.
    -
    4557C
    -
    4558C AREAP - Computes the area bounded by a closed polygonal
    -
    4559C curve such as the boundary of the triangula-
    -
    4560C tion or of a constraint region.
    -
    4561C
    -
    4562C BNODES - Returns an array containing the indexes of the
    -
    4563C boundary nodes in counterclockwise order.
    -
    4564C Counts of boundary nodes, triangles, and arcs
    -
    4565C are also returned.
    -
    4566C
    -
    4567C CIRCUM - Computes the area, circumcenter, circumradius,
    -
    4568C and, optionally, the aspect ratio of a trian-
    -
    4569C gle defined by user-specified vertices.
    -
    4570C
    -
    4571C DELARC - Deletes a boundary arc from the triangulation.
    -
    4572C
    -
    4573C DELNOD - Updates the triangulation with the deletion of a
    -
    4574C node.
    -
    4575C
    -
    4576C EDGE - Forces a pair of nodes to be connected by an arc
    -
    4577C in the triangulation.
    -
    4578C
    -
    4579C GETNP - Determines the ordered sequence of L closest
    -
    4580C nodes to a given node, along with the associ-
    -
    4581C ated distances. The distance between nodes is
    -
    4582C taken to be the length of the shortest connec-
    -
    4583C ting path which intersects no constraint
    -
    4584C region.
    -
    4585C
    -
    4586C INTSEC - Determines whether or not an arbitrary pair of
    -
    4587C line segments share a common point.
    -
    4588C
    -
    4589C JRAND - Generates a uniformly distributed pseudo-random
    -
    4590C integer.
    -
    4591C
    -
    4592C LEFT - Locates a point relative to a line.
    -
    4593C
    -
    4594C NEARND - Returns the index of the nearest node to an
    -
    4595C arbitrary point, along with its squared
    -
    4596C distance.
    -
    4597C
    -
    4598C STORE - Forces a value to be stored in main memory so
    -
    4599C that the precision of floating point numbers
    -
    4600C in memory locations rather than registers is
    -
    4601C computed.
    -
    4602C
    -
    4603C TRLIST - Converts the triangulation data structure to a
    -
    4604C triangle list more suitable for use in a fin-
    -
    4605C ite element code.
    -
    4606C
    -
    4607C TRLPRT - Prints the triangle list created by Subroutine
    -
    4608C TRLIST.
    -
    4609C
    -
    4610C TRMESH - Creates a Delaunay triangulation of a set of
    -
    4611C nodes.
    -
    4612C
    -
    4613C TRMSHR - Creates a Delaunay triangulation (more effici-
    -
    4614C ently than TRMESH) of a set of nodes lying at
    -
    4615C the vertices of a (possibly skewed) rectangu-
    -
    4616C lar grid.
    -
    4617C
    -
    4618C TRPLOT - Creates a level-2 Encapsulated Postscript (EPS)
    -
    4619C file containing a triangulation plot.
    -
    4620C
    -
    4621C TRPRNT - Prints the triangulation data structure and,
    -
    4622C optionally, the nodal coordinates.
    -
    4623C
    -
    4624C
    -
    4625C On input:
    -
    4626C
    -
    4627C N = Number of nodes in the triangulation. N .GE. 3.
    -
    4628C
    -
    4629C X,Y = Arrays of length N containing the Cartesian
    -
    4630C coordinates of the nodes. (X(K),Y(K)) is re-
    -
    4631C ferred to as node K, and K is referred to as
    -
    4632C a nodal index. The first three nodes must not
    -
    4633C be collinear.
    -
    4634C
    -
    4635C The above parameters are not altered by this routine.
    -
    4636C
    -
    4637C LIST,LPTR = Arrays of length at least 6N-12.
    -
    4638C
    -
    4639C LEND = Array of length at least N.
    -
    4640C
    -
    4641C NEAR,NEXT,DIST = Work space arrays of length at
    -
    4642C least N. The space is used to
    -
    4643C efficiently determine the nearest
    -
    4644C triangulation node to each un-
    -
    4645C processed node for use by ADDNOD.
    -
    4646C
    -
    4647C On output:
    -
    4648C
    -
    4649C LIST = Set of nodal indexes which, along with LPTR,
    -
    4650C LEND, and LNEW, define the triangulation as a
    -
    4651C set of N adjacency lists -- counterclockwise-
    -
    4652C ordered sequences of neighboring nodes such
    -
    4653C that the first and last neighbors of a bound-
    -
    4654C ary node are boundary nodes (the first neigh-
    -
    4655C bor of an interior node is arbitrary). In
    -
    4656C order to distinguish between interior and
    -
    4657C boundary nodes, the last neighbor of each
    -
    4658C boundary node is represented by the negative
    -
    4659C of its index.
    -
    4660C
    -
    4661C LPTR = Set of pointers (LIST indexes) in one-to-one
    -
    4662C correspondence with the elements of LIST.
    -
    4663C LIST(LPTR(I)) indexes the node which follows
    -
    4664C LIST(I) in cyclical counterclockwise order
    -
    4665C (the first neighbor follows the last neigh-
    -
    4666C bor).
    -
    4667C
    -
    4668C LEND = Set of pointers to adjacency lists. LEND(K)
    -
    4669C points to the last neighbor of node K for
    -
    4670C K = 1,...,N. Thus, LIST(LEND(K)) < 0 if and
    -
    4671C only if K is a boundary node.
    -
    4672C
    -
    4673C LNEW = Pointer to the first empty location in LIST
    -
    4674C and LPTR (list length plus one). LIST, LPTR,
    -
    4675C LEND, and LNEW are not altered if IER < 0,
    -
    4676C and are incomplete if IER > 0.
    -
    4677C
    -
    4678C NEAR,NEXT,DIST = Garbage.
    -
    4679C
    -
    4680C IER = Error indicator:
    -
    4681C IER = 0 if no errors were encountered.
    -
    4682C IER = -1 if N < 3 on input.
    -
    4683C IER = -2 if the first three nodes are
    -
    4684C collinear.
    -
    4685C IER = -4 if an error flag was returned by a
    -
    4686C call to SWAP in ADDNOD. This is an
    -
    4687C internal error and should be reported
    -
    4688C to the programmer.
    -
    4689C IER = L if nodes L and M coincide for some
    -
    4690C M > L. The linked list represents
    -
    4691C a triangulation of nodes 1 to M-1
    -
    4692C in this case.
    -
    4693C
    -
    4694C Modules required by TRMESH: ADDNOD, BDYADD, INSERT,
    -
    4695C INTADD, JRAND, LEFT,
    -
    4696C LSTPTR, STORE, SWAP,
    -
    4697C SWPTST, TRFIND
    -
    4698C
    -
    4699C Intrinsic function called by TRMESH: ABS
    -
    4700C
    -
    4701C***********************************************************
    -
    4702C
    -
    4703 LOGICAL LEFT
    -
    4704 REAL STORE
    -
    4705 INTEGER I, I0, J, K, KM1, LCC(1), LP, LPL, NCC, NEXTI,
    -
    4706 . NN
    -
    4707 REAL D, D1, D2, D3, EPS, SWTOL
    -
    4708 COMMON/SWPCOM/SWTOL
    -
    4709C
    -
    4710C Local parameters:
    -
    4711C
    -
    4712C D = Squared distance from node K to node I
    -
    4713C D1,D2,D3 = Squared distances from node K to nodes 1, 2,
    -
    4714C and 3, respectively
    -
    4715C EPS = Half the machine precision
    -
    4716C I,J = Nodal indexes
    -
    4717C I0 = Index of the node preceding I in a sequence of
    -
    4718C unprocessed nodes: I = NEXT(I0)
    -
    4719C K = Index of node to be added and DO-loop index:
    -
    4720C K > 3
    -
    4721C KM1 = K-1
    -
    4722C LCC(1) = Dummy array
    -
    4723C LP = LIST index (pointer) of a neighbor of K
    -
    4724C LPL = Pointer to the last neighbor of K
    -
    4725C NCC = Number of constraint curves
    -
    4726C NEXTI = NEXT(I)
    -
    4727C NN = Local copy of N
    -
    4728C SWTOL = Tolerance for function SWPTST
    -
    4729C
    -
    4730 nn = n
    -
    4731 IF (nn .LT. 3) THEN
    -
    4732 ier = -1
    -
    4733 RETURN
    -
    4734 ENDIF
    -
    4735C
    -
    4736C Compute a tolerance for function SWPTST: SWTOL = 10*
    -
    4737C (machine precision)
    -
    4738C
    -
    4739 eps = 1.
    -
    4740 1 eps = eps/2.
    -
    4741 swtol = store(eps + 1.)
    -
    4742 IF (swtol .GT. 1.) GO TO 1
    -
    4743 swtol = eps*20.
    -
    4744C
    -
    4745C Store the first triangle in the linked list.
    -
    4746C
    -
    4747 IF ( .NOT. left(x(1),y(1),x(2),y(2),x(3),y(3)) ) THEN
    -
    4748C
    -
    4749C The initial triangle is (3,2,1) = (2,1,3) = (1,3,2).
    -
    4750C
    -
    4751 list(1) = 3
    -
    4752 lptr(1) = 2
    -
    4753 list(2) = -2
    -
    4754 lptr(2) = 1
    -
    4755 lend(1) = 2
    -
    4756C
    -
    4757 list(3) = 1
    -
    4758 lptr(3) = 4
    -
    4759 list(4) = -3
    -
    4760 lptr(4) = 3
    -
    4761 lend(2) = 4
    -
    4762C
    -
    4763 list(5) = 2
    -
    4764 lptr(5) = 6
    -
    4765 list(6) = -1
    -
    4766 lptr(6) = 5
    -
    4767 lend(3) = 6
    -
    4768C
    -
    4769 ELSEIF ( .NOT. left(x(2),y(2),x(1),y(1),x(3),y(3)) )
    -
    4770 . THEN
    -
    4771C
    -
    4772C The initial triangle is (1,2,3).
    -
    4773C
    -
    4774 list(1) = 2
    -
    4775 lptr(1) = 2
    -
    4776 list(2) = -3
    -
    4777 lptr(2) = 1
    -
    4778 lend(1) = 2
    -
    4779C
    -
    4780 list(3) = 3
    -
    4781 lptr(3) = 4
    -
    4782 list(4) = -1
    -
    4783 lptr(4) = 3
    -
    4784 lend(2) = 4
    -
    4785C
    -
    4786 list(5) = 1
    -
    4787 lptr(5) = 6
    -
    4788 list(6) = -2
    -
    4789 lptr(6) = 5
    -
    4790 lend(3) = 6
    -
    4791C
    -
    4792 ELSE
    -
    4793C
    -
    4794C The first three nodes are collinear.
    -
    4795C
    -
    4796 ier = -2
    -
    4797 RETURN
    -
    4798 ENDIF
    -
    4799C
    -
    4800C Initialize LNEW and test for N = 3.
    -
    4801C
    -
    4802 lnew = 7
    -
    4803 IF (nn .EQ. 3) THEN
    -
    4804 ier = 0
    -
    4805 RETURN
    -
    4806 ENDIF
    -
    4807C
    -
    4808C A nearest-node data structure (NEAR, NEXT, and DIST) is
    -
    4809C used to obtain an expected-time (N*log(N)) incremental
    -
    4810C algorithm by enabling constant search time for locating
    -
    4811C each new node in the triangulation.
    -
    4812C
    -
    4813C For each unprocessed node K, NEAR(K) is the index of the
    -
    4814C triangulation node closest to K (used as the starting
    -
    4815C point for the search in Subroutine TRFIND) and DIST(K)
    -
    4816C is an increasing function of the distance between nodes
    -
    4817C K and NEAR(K).
    -
    4818C
    -
    4819C Since it is necessary to efficiently find the subset of
    -
    4820C unprocessed nodes associated with each triangulation
    -
    4821C node J (those that have J as their NEAR entries), the
    -
    4822C subsets are stored in NEAR and NEXT as follows: for
    -
    4823C each node J in the triangulation, I = NEAR(J) is the
    -
    4824C first unprocessed node in J's set (with I = 0 if the
    -
    4825C set is empty), L = NEXT(I) (if I > 0) is the second,
    -
    4826C NEXT(L) (if L > 0) is the third, etc. The nodes in each
    -
    4827C set are initially ordered by increasing indexes (which
    -
    4828C maximizes efficiency) but that ordering is not main-
    -
    4829C tained as the data structure is updated.
    -
    4830C
    -
    4831C Initialize the data structure for the single triangle.
    -
    4832C
    -
    4833 near(1) = 0
    -
    4834 near(2) = 0
    -
    4835 near(3) = 0
    -
    4836 DO 2 k = nn,4,-1
    -
    4837 d1 = (x(k)-x(1))**2 + (y(k)-y(1))**2
    -
    4838 d2 = (x(k)-x(2))**2 + (y(k)-y(2))**2
    -
    4839 d3 = (x(k)-x(3))**2 + (y(k)-y(3))**2
    -
    4840 IF (d1 .LE. d2 .AND. d1 .LE. d3) THEN
    -
    4841 near(k) = 1
    -
    4842 dist(k) = d1
    -
    4843 next(k) = near(1)
    -
    4844 near(1) = k
    -
    4845 ELSEIF (d2 .LE. d1 .AND. d2 .LE. d3) THEN
    -
    4846 near(k) = 2
    -
    4847 dist(k) = d2
    -
    4848 next(k) = near(2)
    -
    4849 near(2) = k
    -
    4850 ELSE
    -
    4851 near(k) = 3
    -
    4852 dist(k) = d3
    -
    4853 next(k) = near(3)
    -
    4854 near(3) = k
    -
    4855 ENDIF
    -
    4856 2 CONTINUE
    -
    4857C
    -
    4858C Add the remaining nodes. Parameters for ADDNOD are as
    -
    4859C follows:
    -
    4860C
    -
    4861C K = Index of the node to be added.
    -
    4862C NEAR(K) = Index of the starting node for the search in
    -
    4863C TRFIND.
    -
    4864C NCC = Number of constraint curves.
    -
    4865C LCC = Dummy array (since NCC = 0).
    -
    4866C KM1 = Number of nodes in the triangulation.
    -
    4867C
    -
    4868 ncc = 0
    -
    4869 DO 7 k = 4,nn
    -
    4870 km1 = k-1
    -
    4871 CALL addnod (k,x(k),y(k),near(k),ncc, lcc,km1,x,y,
    -
    4872 . list,lptr,lend,lnew, ier)
    -
    4873 IF (ier .NE. 0) RETURN
    -
    4874C
    -
    4875C Remove K from the set of unprocessed nodes associated
    -
    4876C with NEAR(K).
    -
    4877C
    -
    4878 i = near(k)
    -
    4879 IF (near(i) .EQ. k) THEN
    -
    4880 near(i) = next(k)
    -
    4881 ELSE
    -
    4882 i = near(i)
    -
    4883 3 i0 = i
    -
    4884 i = next(i0)
    -
    4885 IF (i .NE. k) GO TO 3
    -
    4886 next(i0) = next(k)
    -
    4887 ENDIF
    -
    4888 near(k) = 0
    -
    4889C
    -
    4890C Loop on neighbors J of node K.
    -
    4891C
    -
    4892 lpl = lend(k)
    -
    4893 lp = lpl
    -
    4894 4 lp = lptr(lp)
    -
    4895 j = abs(list(lp))
    -
    4896C
    -
    4897C Loop on elements I in the sequence of unprocessed nodes
    -
    4898C associated with J: K is a candidate for replacing J
    -
    4899C as the nearest triangulation node to I. The next value
    -
    4900C of I in the sequence, NEXT(I), must be saved before I
    -
    4901C is moved because it is altered by adding I to K's set.
    -
    4902C
    -
    4903 i = near(j)
    -
    4904 5 IF (i .EQ. 0) GO TO 6
    -
    4905 nexti = next(i)
    -
    4906C
    -
    4907C Test for the distance from I to K less than the distance
    -
    4908C from I to J.
    -
    4909C
    -
    4910 d = (x(k)-x(i))**2 + (y(k)-y(i))**2
    -
    4911 IF (d .LT. dist(i)) THEN
    -
    4912C
    -
    4913C Replace J by K as the nearest triangulation node to I:
    -
    4914C update NEAR(I) and DIST(I), and remove I from J's set
    -
    4915C of unprocessed nodes and add it to K's set.
    -
    4916C
    -
    4917 near(i) = k
    -
    4918 dist(i) = d
    -
    4919 IF (i .EQ. near(j)) THEN
    -
    4920 near(j) = nexti
    -
    4921 ELSE
    -
    4922 next(i0) = nexti
    -
    4923 ENDIF
    -
    4924 next(i) = near(k)
    -
    4925 near(k) = i
    -
    4926 ELSE
    -
    4927 i0 = i
    -
    4928 ENDIF
    -
    4929C
    -
    4930C Bottom of loop on I.
    -
    4931C
    -
    4932 i = nexti
    -
    4933 GO TO 5
    -
    4934C
    -
    4935C Bottom of loop on neighbors J.
    -
    4936C
    -
    4937 6 IF (lp .NE. lpl) GO TO 4
    -
    4938 7 CONTINUE
    -
    4939 RETURN
    -
    4940 END
    -
    4941 SUBROUTINE trmshr (N,NX,X,Y, NIT, LIST,LPTR,LEND,LNEW,
    -
    4942 . IER)
    -
    4943 INTEGER N, NX, NIT, LIST(*), LPTR(*), LEND(N), LNEW,
    -
    4944 . IER
    -
    4945 REAL X(N), Y(N)
    -
    4946C
    -
    4947C***********************************************************
    -
    4948C
    -
    4949C From TRIPACK
    -
    4950C Robert J. Renka
    -
    4951C Dept. of Computer Science
    -
    4952C Univ. of North Texas
    -
    4953C renka@cs.unt.edu
    -
    4954C 06/27/98
    -
    4955C
    -
    4956C This subroutine creates a Delaunay triangulation of a
    -
    4957C set of N nodes in the plane, where the nodes are the vert-
    -
    4958C ices of an NX by NY skewed rectangular grid with the
    -
    4959C natural ordering. Thus, N = NX*NY, and the nodes are
    -
    4960C ordered from left to right beginning at the top row so
    -
    4961C that adjacent nodes have indexes which differ by 1 in the
    -
    4962C x-direction and by NX in the y-direction. A skewed rec-
    -
    4963C tangular grid is defined as one in which each grid cell is
    -
    4964C a strictly convex quadrilateral (and is thus the convex
    -
    4965C hull of its four vertices). Equivalently, any transfor-
    -
    4966C mation from a rectangle to a grid cell which is bilinear
    -
    4967C in both components has an invertible Jacobian.
    -
    4968C
    -
    4969C If the nodes are not distributed and ordered as defined
    -
    4970C above, Subroutine TRMESH must be called in place of this
    -
    4971C routine. Refer to Subroutine ADDCST for the treatment of
    -
    4972C constraints.
    -
    4973C
    -
    4974C The first phase of the algorithm consists of construc-
    -
    4975C ting a triangulation by choosing a diagonal arc in each
    -
    4976C grid cell. If NIT = 0, all diagonals connect lower left
    -
    4977C to upper right corners and no error checking or additional
    -
    4978C computation is performed. Otherwise, each diagonal arc is
    -
    4979C chosen to be locally optimal, and boundary arcs are added
    -
    4980C where necessary in order to cover the convex hull of the
    -
    4981C nodes. (This is the first iteration.) If NIT > 1 and no
    -
    4982C error was detected, the triangulation is then optimized by
    -
    4983C a sequence of up to NIT-1 iterations in which interior
    -
    4984C arcs of the triangulation are tested and swapped if appro-
    -
    4985C priate. The algorithm terminates when an iteration
    -
    4986C results in no swaps and/or when the allowable number of
    -
    4987C iterations has been performed. NIT = 0 is sufficient to
    -
    4988C produce a Delaunay triangulation if the original grid is
    -
    4989C actually rectangular, and NIT = 1 is sufficient if it is
    -
    4990C close to rectangular. Note, however, that the ordering
    -
    4991C and distribution of nodes is not checked for validity in
    -
    4992C the case NIT = 0, and the triangulation will not be valid
    -
    4993C unless the rectangular grid covers the convex hull of the
    -
    4994C nodes.
    -
    4995C
    -
    4996C
    -
    4997C On input:
    -
    4998C
    -
    4999C N = Number of nodes in the grid. N = NX*NY for some
    -
    5000C NY .GE. 2.
    -
    5001C
    -
    5002C NX = Number of grid points in the x-direction. NX
    -
    5003C .GE. 2.
    -
    5004C
    -
    5005C X,Y = Arrays of length N containing coordinates of
    -
    5006C the nodes with the ordering and distribution
    -
    5007C defined in the header comments above.
    -
    5008C (X(K),Y(K)) is referred to as node K.
    -
    5009C
    -
    5010C The above parameters are not altered by this routine.
    -
    5011C
    -
    5012C NIT = Nonnegative integer specifying the maximum
    -
    5013C number of iterations to be employed. Refer
    -
    5014C to the header comments above.
    -
    5015C
    -
    5016C LIST,LPTR = Arrays of length at least 6N-12.
    -
    5017C
    -
    5018C LEND = Array of length at least N.
    -
    5019C
    -
    5020C On output:
    -
    5021C
    -
    5022C NIT = Number of iterations employed.
    -
    5023C
    -
    5024C LIST,LPTR,LEND,LNEW = Data structure defining the
    -
    5025C triangulation. Refer to Sub-
    -
    5026C routine TRMESH.
    -
    5027C
    -
    5028C IER = Error indicator:
    -
    5029C IER = 0 if no errors were encountered.
    -
    5030C IER = K if the grid element with upper left
    -
    5031C corner at node K is not a strictly
    -
    5032C convex quadrilateral. The algorithm
    -
    5033C is terminated when the first such
    -
    5034C occurrence is detected. Note that
    -
    5035C this test is not performed if NIT = 0
    -
    5036C on input.
    -
    5037C IER = -1 if N, NX, or NIT is outside its valid
    -
    5038C range on input.
    -
    5039C IER = -2 if NIT > 1 on input, and the optimi-
    -
    5040C zation loop failed to converge within
    -
    5041C the allowable number of iterations.
    -
    5042C The triangulation is valid but not
    -
    5043C optimal in this case.
    -
    5044C
    -
    5045C Modules required by TRMSHR: INSERT, LEFT, LSTPTR, NBCNT,
    -
    5046C STORE, SWAP, SWPTST
    -
    5047C
    -
    5048C Intrinsic function called by TRMSHR: ABS
    -
    5049C
    -
    5050C***********************************************************
    -
    5051C
    -
    5052 INTEGER LSTPTR, NBCNT
    -
    5053 LOGICAL LEFT, SWPTST
    -
    5054 REAL STORE
    -
    5055 INTEGER I, ITER, J, K, KP1, LP, LPF, LPK, LPL, LPP,
    -
    5056 . M1, M2, M3, M4, MAXIT, N0, N1, N2, N3, N4, NI,
    -
    5057 . NJ, NM1, NN, NNB
    -
    5058 LOGICAL TST
    -
    5059 REAL EPS, SWTOL
    -
    5060 COMMON/SWPCOM/SWTOL
    -
    5061C
    -
    5062C Store local variables and test for errors in input
    -
    5063C parameters.
    -
    5064C
    -
    5065 NI = nx
    -
    5066 nj = n/ni
    -
    5067 nn = ni*nj
    -
    5068 maxit = nit
    -
    5069 nit = 0
    -
    5070 IF (n .NE. nn .OR. nj .LT. 2 .OR. ni .LT. 2 .OR.
    -
    5071 . maxit .LT. 0) THEN
    -
    5072 ier = -1
    -
    5073 RETURN
    -
    5074 ENDIF
    -
    5075 ier = 0
    -
    5076C
    -
    5077C Compute a tolerance for function SWPTST: SWTOL = 10*
    -
    5078C (machine precision)
    -
    5079C
    -
    5080 eps = 1.
    -
    5081 1 eps = eps/2.
    -
    5082 swtol = store(eps + 1.)
    -
    5083 IF (swtol .GT. 1.) GO TO 1
    -
    5084 swtol = eps*20.
    -
    5085C
    -
    5086C Loop on grid points (I,J) corresponding to nodes K =
    -
    5087C (J-1)*NI + I. TST = TRUE iff diagonals are to be
    -
    5088C chosen by the swap test. M1, M2, M3, and M4 are the
    -
    5089C slopes (-1, 0, or 1) of the diagonals in quadrants 1
    -
    5090C to 4 (counterclockwise beginning with the upper right)
    -
    5091C for a coordinate system with origin at node K.
    -
    5092C
    -
    5093 tst = maxit .GT. 0
    -
    5094 m1 = 0
    -
    5095 m4 = 0
    -
    5096 lp = 0
    -
    5097 kp1 = 1
    -
    5098 DO 6 j = 1,nj
    -
    5099 DO 5 i = 1,ni
    -
    5100 m2 = m1
    -
    5101 m3 = m4
    -
    5102 k = kp1
    -
    5103 kp1 = k + 1
    -
    5104 lpf = lp + 1
    -
    5105 IF (j .EQ. nj .AND. i .NE. ni) GO TO 2
    -
    5106 IF (i .NE. 1) THEN
    -
    5107 IF (j .NE. 1) THEN
    -
    5108C
    -
    5109C K is not in the top row, leftmost column, or bottom row
    -
    5110C (unless K is the lower right corner). Take the first
    -
    5111C neighbor to be the node above K.
    -
    5112C
    -
    5113 lp = lp + 1
    -
    5114 list(lp) = k - ni
    -
    5115 lptr(lp) = lp + 1
    -
    5116 IF (m2 .LE. 0) THEN
    -
    5117 lp = lp + 1
    -
    5118 list(lp) = k - 1 - ni
    -
    5119 lptr(lp) = lp + 1
    -
    5120 ENDIF
    -
    5121 ENDIF
    -
    5122C
    -
    5123C K is not in the leftmost column. The next (or first)
    -
    5124C neighbor is to the left of K.
    -
    5125C
    -
    5126 lp = lp + 1
    -
    5127 list(lp) = k - 1
    -
    5128 lptr(lp) = lp + 1
    -
    5129 IF (j .EQ. nj) GO TO 3
    -
    5130 IF (m3 .GE. 0) THEN
    -
    5131 lp = lp + 1
    -
    5132 list(lp) = k - 1 + ni
    -
    5133 lptr(lp) = lp + 1
    -
    5134 ENDIF
    -
    5135 ENDIF
    -
    5136C
    -
    5137C K is not in the bottom row. The next (or first)
    -
    5138C neighbor is below K.
    -
    5139C
    -
    5140 lp = lp + 1
    -
    5141 list(lp) = k + ni
    -
    5142 lptr(lp) = lp + 1
    -
    5143C
    -
    5144C Test for a negative diagonal in quadrant 4 unless K is
    -
    5145C in the rightmost column. The quadrilateral associated
    -
    5146C with the quadrant is tested for strict convexity un-
    -
    5147C less NIT = 0 on input.
    -
    5148C
    -
    5149 IF (i .EQ. ni) GO TO 3
    -
    5150 m4 = 1
    -
    5151 IF (.NOT. tst) GO TO 2
    -
    5152 IF ( left(x(kp1),y(kp1),x(k+ni),y(k+ni),x(k),y(k))
    -
    5153 . .OR. left(x(k),y(k),x(kp1+ni),y(kp1+ni),
    -
    5154 . x(k+ni),y(k+ni))
    -
    5155 . .OR. left(x(k+ni),y(k+ni),x(kp1),y(kp1),
    -
    5156 . x(kp1+ni),y(kp1+ni))
    -
    5157 . .OR. left(x(kp1+ni),y(kp1+ni),x(k),y(k),
    -
    5158 . x(kp1),y(kp1)) ) GO TO 12
    -
    5159 IF ( swptst(kp1,k+ni,k,kp1+ni,x,y) ) GO TO 2
    -
    5160 m4 = -1
    -
    5161 lp = lp + 1
    -
    5162 list(lp) = kp1 + ni
    -
    5163 lptr(lp) = lp + 1
    -
    5164C
    -
    5165C The next (or first) neighbor is to the right of K.
    -
    5166C
    -
    5167 2 lp = lp + 1
    -
    5168 list(lp) = kp1
    -
    5169 lptr(lp) = lp + 1
    -
    5170C
    -
    5171C Test for a positive diagonal in quadrant 1 (the neighbor
    -
    5172C of K-NI which follows K is not K+1) unless K is in the
    -
    5173C top row.
    -
    5174C
    -
    5175 IF (j .EQ. 1) GO TO 3
    -
    5176 IF (tst) THEN
    -
    5177 m1 = -1
    -
    5178 lpk = lstptr(lend(k-ni),k,list,lptr)
    -
    5179 lpk = lptr(lpk)
    -
    5180 IF (list(lpk) .NE. kp1) THEN
    -
    5181 m1 = 1
    -
    5182 lp = lp + 1
    -
    5183 list(lp) = kp1 - ni
    -
    5184 lptr(lp) = lp + 1
    -
    5185 ENDIF
    -
    5186 ENDIF
    -
    5187C
    -
    5188C If K is in the leftmost column (and not the top row) or
    -
    5189C in the bottom row (and not the rightmost column), then
    -
    5190C the next neighbor is the node above K.
    -
    5191C
    -
    5192 IF (i .NE. 1 .AND. j .NE. nj) GO TO 4
    -
    5193 lp = lp + 1
    -
    5194 list(lp) = k - ni
    -
    5195 lptr(lp) = lp + 1
    -
    5196 IF (i .EQ. 1) GO TO 3
    -
    5197C
    -
    5198C K is on the bottom row (and not the leftmost or right-
    -
    5199C most column).
    -
    5200C
    -
    5201 IF (m2 .LE. 0) THEN
    -
    5202 lp = lp + 1
    -
    5203 list(lp) = k - 1 - ni
    -
    5204 lptr(lp) = lp + 1
    -
    5205 ENDIF
    -
    5206 lp = lp + 1
    -
    5207 list(lp) = k - 1
    -
    5208 lptr(lp) = lp + 1
    -
    5209C
    -
    5210C K is a boundary node.
    -
    5211C
    -
    5212 3 list(lp) = -list(lp)
    -
    5213C
    -
    5214C Bottom of loop. Store LEND and correct LPTR(LP).
    -
    5215C LPF and LP point to the first and last neighbors
    -
    5216C of K.
    -
    5217C
    -
    5218 4 lend(k) = lp
    -
    5219 lptr(lp) = lpf
    -
    5220 5 CONTINUE
    -
    5221 6 CONTINUE
    -
    5222C
    -
    5223C Store LNEW, and terminate the algorithm if NIT = 0 on
    -
    5224C input.
    -
    5225C
    -
    5226 lnew = lp + 1
    -
    5227 IF (maxit .EQ. 0) RETURN
    -
    5228C
    -
    5229C Add boundary arcs where necessary in order to cover the
    -
    5230C convex hull of the nodes. N1, N2, and N3 are consecu-
    -
    5231C tive boundary nodes in counterclockwise order, and N0
    -
    5232C is the starting point for each loop around the boundary.
    -
    5233C
    -
    5234 n0 = 1
    -
    5235 n1 = n0
    -
    5236 n2 = ni + 1
    -
    5237C
    -
    5238C TST is set to TRUE if an arc is added. The boundary
    -
    5239C loop is repeated until a traversal results in no
    -
    5240C added arcs.
    -
    5241C
    -
    5242 7 tst = .false.
    -
    5243C
    -
    5244C Top of boundary loop. Set N3 to the first neighbor of
    -
    5245C N2, and test for N3 LEFT N1 -> N2.
    -
    5246C
    -
    5247 8 lpl = lend(n2)
    -
    5248 lp = lptr(lpl)
    -
    5249 n3 = list(lp)
    -
    5250 IF ( left(x(n1),y(n1),x(n2),y(n2),x(n3),y(n3)) )
    -
    5251 . n1 = n2
    -
    5252 IF (n1 .NE. n2) THEN
    -
    5253C
    -
    5254C Add the boundary arc N1-N3. If N0 = N2, the starting
    -
    5255C point is changed to N3, since N2 will be removed from
    -
    5256C the boundary. N3 is inserted as the first neighbor of
    -
    5257C N1, N2 is changed to an interior node, and N1 is
    -
    5258C inserted as the last neighbor of N3.
    -
    5259C
    -
    5260 tst = .true.
    -
    5261 IF (n2 .EQ. n0) n0 = n3
    -
    5262 lp = lend(n1)
    -
    5263 CALL insert (n3,lp, list,lptr,lnew )
    -
    5264 list(lpl) = -list(lpl)
    -
    5265 lp = lend(n3)
    -
    5266 list(lp) = n2
    -
    5267 CALL insert (-n1,lp, list,lptr,lnew )
    -
    5268 lend(n3) = lnew - 1
    -
    5269 ENDIF
    -
    5270C
    -
    5271C Bottom of loops. Test for termination.
    -
    5272C
    -
    5273 n2 = n3
    -
    5274 IF (n1 .NE. n0) GO TO 8
    -
    5275 IF (tst) GO TO 7
    -
    5276C
    -
    5277C Terminate the algorithm if NIT = 1 on input.
    -
    5278C
    -
    5279 nit = 1
    -
    5280 IF (maxit .EQ. 1) RETURN
    -
    5281C
    -
    5282C Optimize the triangulation by applying the swap test and
    -
    5283C appropriate swaps to the interior arcs. The loop is
    -
    5284C repeated until no swaps are performed or MAXIT itera-
    -
    5285C tions have been applied. ITER is the current iteration,
    -
    5286C and TST is set to TRUE if a swap occurs.
    -
    5287C
    -
    5288 iter = 1
    -
    5289 nm1 = nn - 1
    -
    5290 9 iter = iter + 1
    -
    5291 tst = .false.
    -
    5292C
    -
    5293C Loop on interior arcs N1-N2, where N2 > N1 and
    -
    5294C (N1,N2,N3) and (N2,N1,N4) are adjacent triangles.
    -
    5295C
    -
    5296C Top of loop on nodes N1.
    -
    5297C
    -
    5298 DO 11 n1 = 1,nm1
    -
    5299 lpl = lend(n1)
    -
    5300 n4 = list(lpl)
    -
    5301 lpf = lptr(lpl)
    -
    5302 n2 = list(lpf)
    -
    5303 lp = lptr(lpf)
    -
    5304 n3 = list(lp)
    -
    5305 nnb = nbcnt(lpl,lptr)
    -
    5306C
    -
    5307C Top of loop on neighbors N2 of N1. NNB is the number of
    -
    5308C neighbors of N1.
    -
    5309C
    -
    5310 DO 10 i = 1,nnb
    -
    5311C
    -
    5312C Bypass the swap test if N1 is a boundary node and N2 is
    -
    5313C the first neighbor (N4 < 0), N2 < N1, or N1-N2 is a
    -
    5314C diagonal arc (already locally optimal) when ITER = 2.
    -
    5315C
    -
    5316 IF ( n4 .GT. 0 .AND. n2 .GT. n1 .AND.
    -
    5317 . (iter .NE. 2 .OR. abs(n1+ni-n2) .NE. 1) )
    -
    5318 . THEN
    -
    5319 IF (swptst(n3,n4,n1,n2,x,y) ) THEN
    -
    5320C
    -
    5321C Swap diagonal N1-N2 for N3-N4, set TST to TRUE, and set
    -
    5322C N2 to N4 (the neighbor preceding N3).
    -
    5323C
    -
    5324 CALL swap (n3,n4,n1,n2, list,lptr,lend, lpp)
    -
    5325 IF (lpp .NE. 0) THEN
    -
    5326 tst = .true.
    -
    5327 n2 = n4
    -
    5328 ENDIF
    -
    5329 ENDIF
    -
    5330 ENDIF
    -
    5331C
    -
    5332C Bottom of neighbor loop.
    -
    5333C
    -
    5334 IF (list(lpl) .EQ. -n3) GO TO 11
    -
    5335 n4 = n2
    -
    5336 n2 = n3
    -
    5337 lp = lstptr(lpl,n2,list,lptr)
    -
    5338 lp = lptr(lp)
    -
    5339 n3 = abs(list(lp))
    -
    5340 10 CONTINUE
    -
    5341 11 CONTINUE
    -
    5342C
    -
    5343C Test for termination.
    -
    5344C
    -
    5345 IF (tst .AND. iter .LT. maxit) GO TO 9
    -
    5346 nit = iter
    -
    5347 IF (tst) ier = -2
    -
    5348 RETURN
    -
    5349C
    -
    5350C Invalid grid cell encountered.
    -
    5351C
    -
    5352 12 ier = k
    -
    5353 RETURN
    -
    5354 END
    -
    5355 SUBROUTINE trplot (LUN,PLTSIZ,WX1,WX2,WY1,WY2,NCC,LCC,
    -
    5356 . N,X,Y,LIST,LPTR,LEND,TITLE,
    -
    5357 . NUMBR, IER)
    -
    5358 CHARACTER*(*) TITLE
    -
    5359 INTEGER LUN, NCC, LCC(*), N, LIST(*), LPTR(*),
    -
    5360 . LEND(N), IER
    -
    5361 LOGICAL NUMBR
    -
    5362 REAL PLTSIZ, WX1, WX2, WY1, WY2, X(N), Y(N)
    -
    5363C
    -
    5364C***********************************************************
    -
    5365C
    -
    5366C From TRIPACK
    -
    5367C Robert J. Renka
    -
    5368C Dept. of Computer Science
    -
    5369C Univ. of North Texas
    -
    5370C renka@cs.unt.edu
    -
    5371C 07/15/98
    -
    5372C
    -
    5373C This subroutine creates a level-2 Encapsulated Post-
    -
    5374C script (EPS) file containing a triangulation plot.
    -
    5375C
    -
    5376C
    -
    5377C On input:
    -
    5378C
    -
    5379C LUN = Logical unit number in the range 0 to 99.
    -
    5380C The unit should be opened with an appropriate
    -
    5381C file name before the call to this routine.
    -
    5382C
    -
    5383C PLTSIZ = Plot size in inches. The window is mapped,
    -
    5384C with aspect ratio preserved, to a rectangu-
    -
    5385C lar viewport with maximum side-length equal
    -
    5386C to .88*PLTSIZ (leaving room for labels out-
    -
    5387C side the viewport). The viewport is
    -
    5388C centered on the 8.5 by 11 inch page, and
    -
    5389C its boundary is drawn. 1.0 .LE. PLTSIZ
    -
    5390C .LE. 8.5.
    -
    5391C
    -
    5392C WX1,WX2,WY1,WY2 = Parameters defining a rectangular
    -
    5393C window against which the triangu-
    -
    5394C lation is clipped. (Only the
    -
    5395C portion of the triangulation that
    -
    5396C lies in the window is drawn.)
    -
    5397C (WX1,WY1) and (WX2,WY2) are the
    -
    5398C lower left and upper right cor-
    -
    5399C ners, respectively. WX1 < WX2 and
    -
    5400C WY1 < WY2.
    -
    5401C
    -
    5402C NCC = Number of constraint curves. Refer to Subrou-
    -
    5403C tine ADDCST. NCC .GE. 0.
    -
    5404C
    -
    5405C LCC = Array of length NCC (or dummy parameter if
    -
    5406C NCC = 0) containing the index of the first
    -
    5407C node of constraint I in LCC(I). For I = 1 to
    -
    5408C NCC, LCC(I+1)-LCC(I) .GE. 3, where LCC(NCC+1)
    -
    5409C = N+1.
    -
    5410C
    -
    5411C N = Number of nodes in the triangulation. N .GE. 3.
    -
    5412C
    -
    5413C X,Y = Arrays of length N containing the coordinates
    -
    5414C of the nodes with non-constraint nodes in the
    -
    5415C first LCC(1)-1 locations.
    -
    5416C
    -
    5417C LIST,LPTR,LEND = Data structure defining the trian-
    -
    5418C gulation. Refer to Subroutine
    -
    5419C TRMESH.
    -
    5420C
    -
    5421C TITLE = Type CHARACTER variable or constant contain-
    -
    5422C ing a string to be centered above the plot.
    -
    5423C The string must be enclosed in parentheses;
    -
    5424C i.e., the first and last characters must be
    -
    5425C '(' and ')', respectively, but these are not
    -
    5426C displayed. TITLE may have at most 80 char-
    -
    5427C acters including the parentheses.
    -
    5428C
    -
    5429C NUMBR = Option indicator: If NUMBR = TRUE, the
    -
    5430C nodal indexes are plotted next to the nodes.
    -
    5431C
    -
    5432C Input parameters are not altered by this routine.
    -
    5433C
    -
    5434C On output:
    -
    5435C
    -
    5436C IER = Error indicator:
    -
    5437C IER = 0 if no errors were encountered.
    -
    5438C IER = 1 if LUN, PLTSIZ, NCC, or N is outside
    -
    5439C its valid range. LCC is not tested
    -
    5440C for validity.
    -
    5441C IER = 2 if WX1 >= WX2 or WY1 >= WY2.
    -
    5442C IER = 3 if an error was encountered in writing
    -
    5443C to unit LUN.
    -
    5444C
    -
    5445C Various plotting options can be controlled by altering
    -
    5446C the data statement below.
    -
    5447C
    -
    5448C Modules required by TRPLOT: None
    -
    5449C
    -
    5450C Intrinsic functions called by TRPLOT: ABS, CHAR, NINT,
    -
    5451C REAL
    -
    5452C
    -
    5453C***********************************************************
    -
    5454C
    -
    5455 INTEGER I, IFRST, IH, ILAST, IPX1, IPX2, IPY1, IPY2,
    -
    5456 . IW, LP, LPL, N0, N0BAK, N0FOR, N1, NLS
    -
    5457 LOGICAL ANNOT, CNSTR, PASS1
    -
    5458 REAL DASHL, DX, DY, FSIZN, FSIZT, R, SFX, SFY, T,
    -
    5459 . TX, TY, X0, Y0
    -
    5460C
    -
    5461 DATA ANNOT/.TRUE./, DASHL/4.0/, FSIZN/10.0/,
    -
    5462 . FSIZT/16.0/
    -
    5463C
    -
    5464C Local parameters:
    -
    5465C
    -
    5466C ANNOT = Logical variable with value TRUE iff the plot
    -
    5467C is to be annotated with the values of WX1,
    -
    5468C WX2, WY1, and WY2
    -
    5469C CNSTR Logical variable used to flag constraint arcs:
    -
    5470C TRUE iff N0-N1 lies in a constraint region
    -
    5471C DASHL = Length (in points, at 72 points per inch) of
    -
    5472C dashes and spaces in a dashed line pattern
    -
    5473C used for drawing constraint arcs
    -
    5474C DX = Window width WX2-WX1
    -
    5475C DY = Window height WY2-WY1
    -
    5476C FSIZN = Font size in points for labeling nodes with
    -
    5477C their indexes if NUMBR = TRUE
    -
    5478C FSIZT = Font size in points for the title (and
    -
    5479C annotation if ANNOT = TRUE)
    -
    5480C I = Constraint index (1 to NCC)
    -
    5481C IFRST = Index of the first node in constraint I
    -
    5482C IH = Height of the viewport in points
    -
    5483C ILAST = Index of the last node in constraint I
    -
    5484C IPX1,IPY1 = X and y coordinates (in points) of the lower
    -
    5485C left corner of the bounding box or viewport
    -
    5486C IPX2,IPY2 = X and y coordinates (in points) of the upper
    -
    5487C right corner of the bounding box or viewport
    -
    5488C IW = Width of the viewport in points
    -
    5489C LP = LIST index (pointer)
    -
    5490C LPL = Pointer to the last neighbor of N0
    -
    5491C N0 = Nodal index and DO-loop index
    -
    5492C N0BAK = Predecessor of N0 in a constraint curve
    -
    5493C (sequence of adjacent constraint nodes)
    -
    5494C N0FOR = Successor to N0 in a constraint curve
    -
    5495C N1 = Index of a neighbor of N0
    -
    5496C NLS = Index of the last non-constraint node
    -
    5497C PASS1 = Logical variable used to flag the first pass
    -
    5498C through the constraint nodes
    -
    5499C R = Aspect ratio DX/DY
    -
    5500C SFX,SFY = Scale factors for mapping world coordinates
    -
    5501C (window coordinates in [WX1,WX2] X [WY1,WY2])
    -
    5502C to viewport coordinates in [IPX1,IPX2] X
    -
    5503C [IPY1,IPY2]
    -
    5504C T = Temporary variable
    -
    5505C TX,TY = Translation vector for mapping world coordi-
    -
    5506C nates to viewport coordinates
    -
    5507C X0,Y0 = X(N0),Y(N0) or label location
    -
    5508C
    -
    5509C
    -
    5510C Test for error 1, and set NLS to the last non-constraint
    -
    5511C node.
    -
    5512C
    -
    5513 IF (lun .LT. 0 .OR. lun .GT. 99 .OR.
    -
    5514 . pltsiz .LT. 1.0 .OR. pltsiz .GT. 8.5 .OR.
    -
    5515 . ncc .LT. 0 .OR. n .LT. 3) GO TO 11
    -
    5516 nls = n
    -
    5517 IF (ncc .GT. 0) nls = lcc(1)-1
    -
    5518C
    -
    5519C Compute the aspect ratio of the window.
    -
    5520C
    -
    5521 dx = wx2 - wx1
    -
    5522 dy = wy2 - wy1
    -
    5523 IF (dx .LE. 0.0 .OR. dy .LE. 0.0) GO TO 12
    -
    5524 r = dx/dy
    -
    5525C
    -
    5526C Compute the lower left (IPX1,IPY1) and upper right
    -
    5527C (IPX2,IPY2) corner coordinates of the bounding box.
    -
    5528C The coordinates, specified in default user space units
    -
    5529C (points, at 72 points/inch with origin at the lower
    -
    5530C left corner of the page), are chosen to preserve the
    -
    5531C aspect ratio R, and to center the plot on the 8.5 by 11
    -
    5532C inch page. The center of the page is (306,396), and
    -
    5533C T = PLTSIZ/2 in points.
    -
    5534C
    -
    5535 t = 36.0*pltsiz
    -
    5536 IF (r .GE. 1.0) THEN
    -
    5537 ipx1 = 306 - nint(t)
    -
    5538 ipx2 = 306 + nint(t)
    -
    5539 ipy1 = 396 - nint(t/r)
    -
    5540 ipy2 = 396 + nint(t/r)
    -
    5541 ELSE
    -
    5542 ipx1 = 306 - nint(t*r)
    -
    5543 ipx2 = 306 + nint(t*r)
    -
    5544 ipy1 = 396 - nint(t)
    -
    5545 ipy2 = 396 + nint(t)
    -
    5546 ENDIF
    -
    5547C
    -
    5548C Output header comments.
    -
    5549C
    -
    5550 WRITE (lun,100,err=13) ipx1, ipy1, ipx2, ipy2
    -
    5551 100 FORMAT ('%!PS-Adobe-3.0 EPSF-3.0'/
    -
    5552 . '%%BoundingBox:',4i4/
    -
    5553 . '%%Title: Triangulation'/
    -
    5554 . '%%Creator: TRIPACK'/
    -
    5555 . '%%EndComments')
    -
    5556C
    -
    5557C Set (IPX1,IPY1) and (IPX2,IPY2) to the corner coordinates
    -
    5558C of a viewport obtained by shrinking the bounding box by
    -
    5559C 12% in each dimension.
    -
    5560C
    -
    5561 iw = nint(0.88*real(ipx2-ipx1))
    -
    5562 ih = nint(0.88*real(ipy2-ipy1))
    -
    5563 ipx1 = 306 - iw/2
    -
    5564 ipx2 = 306 + iw/2
    -
    5565 ipy1 = 396 - ih/2
    -
    5566 ipy2 = 396 + ih/2
    -
    5567C
    -
    5568C Set the line thickness to 2 points, and draw the
    -
    5569C viewport boundary.
    -
    5570C
    -
    5571 t = 2.0
    -
    5572 WRITE (lun,110,err=13) t
    -
    5573 WRITE (lun,120,err=13) ipx1, ipy1
    -
    5574 WRITE (lun,130,err=13) ipx1, ipy2
    -
    5575 WRITE (lun,130,err=13) ipx2, ipy2
    -
    5576 WRITE (lun,130,err=13) ipx2, ipy1
    -
    5577 WRITE (lun,140,err=13)
    -
    5578 WRITE (lun,150,err=13)
    -
    5579 110 FORMAT (f12.6,' setlinewidth')
    -
    5580 120 FORMAT (2i4,' moveto')
    -
    5581 130 FORMAT (2i4,' lineto')
    -
    5582 140 FORMAT ('closepath')
    -
    5583 150 FORMAT ('stroke')
    -
    5584C
    -
    5585C Set up a mapping from the window to the viewport.
    -
    5586C
    -
    5587 sfx = real(iw)/dx
    -
    5588 sfy = real(ih)/dy
    -
    5589 tx = ipx1 - sfx*wx1
    -
    5590 ty = ipy1 - sfy*wy1
    -
    5591 WRITE (lun,160,err=13) tx, ty, sfx, sfy
    -
    5592 160 FORMAT (2f12.6,' translate'/
    -
    5593 . 2f12.6,' scale')
    -
    5594C
    -
    5595C The line thickness (believe it or fucking not) must be
    -
    5596C changed to reflect the new scaling which is applied to
    -
    5597C all subsequent output. Set it to 1.0 point.
    -
    5598C
    -
    5599 t = 2.0/(sfx+sfy)
    -
    5600 WRITE (lun,110,err=13) t
    -
    5601C
    -
    5602C Save the current graphics state, and set the clip path to
    -
    5603C the boundary of the window.
    -
    5604C
    -
    5605 WRITE (lun,170,err=13)
    -
    5606 WRITE (lun,180,err=13) wx1, wy1
    -
    5607 WRITE (lun,190,err=13) wx2, wy1
    -
    5608 WRITE (lun,190,err=13) wx2, wy2
    -
    5609 WRITE (lun,190,err=13) wx1, wy2
    -
    5610 WRITE (lun,200,err=13)
    -
    5611 170 FORMAT ('gsave')
    -
    5612 180 FORMAT (2f12.6,' moveto')
    -
    5613 190 FORMAT (2f12.6,' lineto')
    -
    5614 200 FORMAT ('closepath clip newpath')
    -
    5615C
    -
    5616C Draw the edges N0->N1, where N1 > N0, beginning with a
    -
    5617C loop on non-constraint nodes N0. LPL points to the
    -
    5618C last neighbor of N0.
    -
    5619C
    -
    5620 DO 3 n0 = 1,nls
    -
    5621 x0 = x(n0)
    -
    5622 y0 = y(n0)
    -
    5623 lpl = lend(n0)
    -
    5624 lp = lpl
    -
    5625C
    -
    5626C Loop on neighbors N1 of N0.
    -
    5627C
    -
    5628 2 lp = lptr(lp)
    -
    5629 n1 = abs(list(lp))
    -
    5630 IF (n1 .GT. n0) THEN
    -
    5631C
    -
    5632C Add the edge to the path.
    -
    5633C
    -
    5634 WRITE (lun,210,err=13) x0, y0, x(n1), y(n1)
    -
    5635 210 FORMAT (2f12.6,' moveto',2f12.6,' lineto')
    -
    5636 ENDIF
    -
    5637 IF (lp .NE. lpl) GO TO 2
    -
    5638 3 CONTINUE
    -
    5639C
    -
    5640C Loop through the constraint nodes twice. The non-
    -
    5641C constraint arcs incident on constraint nodes are
    -
    5642C drawn (with solid lines) on the first pass, and the
    -
    5643C constraint arcs (both boundary and interior, if any)
    -
    5644C are drawn (with dashed lines) on the second pass.
    -
    5645C
    -
    5646 pass1 = .true.
    -
    5647C
    -
    5648C Loop on constraint nodes N0 with (N0BAK,N0,N0FOR) a sub-
    -
    5649C sequence of constraint I. The outer loop is on
    -
    5650C constraints I with first and last nodes IFRST and ILAST.
    -
    5651C
    -
    5652 4 ifrst = n+1
    -
    5653 DO 8 i = ncc,1,-1
    -
    5654 ilast = ifrst - 1
    -
    5655 ifrst = lcc(i)
    -
    5656 n0bak = ilast
    -
    5657 DO 7 n0 = ifrst,ilast
    -
    5658 n0for = n0 + 1
    -
    5659 IF (n0 .EQ. ilast) n0for = ifrst
    -
    5660 lpl = lend(n0)
    -
    5661 x0 = x(n0)
    -
    5662 y0 = y(n0)
    -
    5663 lp = lpl
    -
    5664C
    -
    5665C Loop on neighbors N1 of N0. CNSTR = TRUE iff N0-N1 is a
    -
    5666C constraint arc.
    -
    5667C
    -
    5668C Initialize CNSTR to TRUE iff the first neighbor of N0
    -
    5669C strictly follows N0FOR and precedes or coincides with
    -
    5670C N0BAK (in counterclockwise order).
    -
    5671C
    -
    5672 5 lp = lptr(lp)
    -
    5673 n1 = abs(list(lp))
    -
    5674 IF (n1 .NE. n0for .AND. n1 .NE. n0bak) GO TO 5
    -
    5675 cnstr = n1 .EQ. n0bak
    -
    5676 lp = lpl
    -
    5677C
    -
    5678C Loop on neighbors N1 of N0. Update CNSTR and test for
    -
    5679C N1 > N0.
    -
    5680C
    -
    5681 6 lp = lptr(lp)
    -
    5682 n1 = abs(list(lp))
    -
    5683 IF (n1 .EQ. n0for) cnstr = .true.
    -
    5684 IF (n1 .GT. n0) THEN
    -
    5685C
    -
    5686C Draw the edge iff (PASS1=TRUE and CNSTR=FALSE) or
    -
    5687C (PASS1=FALSE and CNSTR=TRUE); i.e., CNSTR and PASS1
    -
    5688C have opposite values.
    -
    5689C
    -
    5690 IF (cnstr .NEQV. pass1)
    -
    5691 . WRITE (lun,210,err=13) x0, y0, x(n1), y(n1)
    -
    5692 ENDIF
    -
    5693 IF (n1 .EQ. n0bak) cnstr = .false.
    -
    5694C
    -
    5695C Bottom of loops.
    -
    5696C
    -
    5697 IF (lp .NE. lpl) GO TO 6
    -
    5698 n0bak = n0
    -
    5699 7 CONTINUE
    -
    5700 8 CONTINUE
    -
    5701 IF (pass1) THEN
    -
    5702C
    -
    5703C End of first pass: paint the path and change to dashed
    -
    5704C lines for subsequent drawing. Since the scale factors
    -
    5705C are applied to everything, the dash length must be
    -
    5706C specified in world coordinates.
    -
    5707C
    -
    5708 pass1 = .false.
    -
    5709 WRITE (lun,150,err=13)
    -
    5710 t = dashl*2.0/(sfx+sfy)
    -
    5711 WRITE (lun,220,err=13) t
    -
    5712 220 FORMAT ('[',f12.6,'] 0 setdash')
    -
    5713 GO TO 4
    -
    5714 ENDIF
    -
    5715C
    -
    5716C Paint the path and restore the saved graphics state (with
    -
    5717C no clip path).
    -
    5718C
    -
    5719 WRITE (lun,150,err=13)
    -
    5720 WRITE (lun,230,err=13)
    -
    5721 230 FORMAT ('grestore')
    -
    5722 IF (numbr) THEN
    -
    5723C
    -
    5724C Nodes in the window are to be labeled with their indexes.
    -
    5725C Convert FSIZN from points to world coordinates, and
    -
    5726C output the commands to select a font and scale it.
    -
    5727C
    -
    5728 t = fsizn*2.0/(sfx+sfy)
    -
    5729 WRITE (lun,240,err=13) t
    -
    5730 240 FORMAT ('/Helvetica findfont'/
    -
    5731 . f12.6,' scalefont setfont')
    -
    5732C
    -
    5733C Loop on nodes N0 with coordinates (X0,Y0).
    -
    5734C
    -
    5735 DO 9 n0 = 1,n
    -
    5736 x0 = x(n0)
    -
    5737 y0 = y(n0)
    -
    5738 IF (x0 .LT. wx1 .OR. x0 .GT. wx2 .OR.
    -
    5739 . y0 .LT. wy1 .OR. y0 .GT. wy2) GO TO 9
    -
    5740C
    -
    5741C Move to (X0,Y0), and draw the label N0. The first char-
    -
    5742C acter will have its lower left corner about one
    -
    5743C character width to the right of the nodal position.
    -
    5744C
    -
    5745 WRITE (lun,180,err=13) x0, y0
    -
    5746 WRITE (lun,250,err=13) n0
    -
    5747 250 FORMAT ('(',i3,') show')
    -
    5748 9 CONTINUE
    -
    5749 ENDIF
    -
    5750C
    -
    5751C Convert FSIZT from points to world coordinates, and output
    -
    5752C the commands to select a font and scale it.
    -
    5753C
    -
    5754 t = fsizt*2.0/(sfx+sfy)
    -
    5755 WRITE (lun,240,err=13) t
    -
    5756C
    -
    5757C Display TITLE centered above the plot:
    -
    5758C
    -
    5759 y0 = wy2 + 3.0*t
    -
    5760 WRITE (lun,260,err=13) title, (wx1+wx2)/2.0, y0
    -
    5761 260 FORMAT (a80/' stringwidth pop 2 div neg ',f12.6,
    -
    5762 . ' add ',f12.6,' moveto')
    -
    5763 WRITE (lun,270,err=13) title
    -
    5764 270 FORMAT (a80/' show')
    -
    5765 IF (annot) THEN
    -
    5766C
    -
    5767C Display the window extrema below the plot.
    -
    5768C
    -
    5769 x0 = wx1
    -
    5770 y0 = wy1 - 100.0/(sfx+sfy)
    -
    5771 WRITE (lun,180,err=13) x0, y0
    -
    5772 WRITE (lun,280,err=13) wx1, wx2
    -
    5773 y0 = y0 - 2.0*t
    -
    5774 WRITE (lun,290,err=13) x0, y0, wy1, wy2
    -
    5775 280 FORMAT ('(Window: WX1 = ',e9.3,', WX2 = ',e9.3,
    -
    5776 . ') show')
    -
    5777 290 FORMAT ('(Window: ) stringwidth pop ',f12.6,' add',
    -
    5778 . f12.6,' moveto'/
    -
    5779 . '( WY1 = ',e9.3,', WY2 = ',e9.3,') show')
    -
    5780 ENDIF
    -
    5781C
    -
    5782C Paint the path and output the showpage command and
    -
    5783C end-of-file indicator.
    -
    5784C
    -
    5785 WRITE (lun,300,err=13)
    -
    5786 300 FORMAT ('stroke'/
    -
    5787 . 'showpage'/
    -
    5788 . '%%EOF')
    -
    5789C
    -
    5790C HP's interpreters require a one-byte End-of-PostScript-Job
    -
    5791C indicator (to eliminate a timeout error message):
    -
    5792C ASCII 4.
    -
    5793C
    -
    5794 WRITE (lun,310,err=13) char(4)
    -
    5795 310 FORMAT (a1)
    -
    5796C
    -
    5797C No error encountered.
    -
    5798C
    -
    5799 ier = 0
    -
    5800 RETURN
    -
    5801C
    -
    5802C Invalid input parameter.
    -
    5803C
    -
    5804 11 ier = 1
    -
    5805 RETURN
    -
    5806C
    -
    5807C DX or DY is not positive.
    -
    5808C
    -
    5809 12 ier = 2
    -
    5810 RETURN
    -
    5811C
    -
    5812C Error writing to unit LUN.
    -
    5813C
    -
    5814 13 ier = 3
    -
    5815 RETURN
    -
    5816 END
    -
    5817 SUBROUTINE trprnt (NCC,LCC,N,X,Y,LIST,LPTR,LEND,LOUT,
    -
    5818 . PRNTX)
    -
    5819 INTEGER NCC, LCC(*), N, LIST(*), LPTR(*), LEND(N),
    -
    5820 . LOUT
    -
    5821 LOGICAL PRNTX
    -
    5822 REAL X(N), Y(N)
    -
    5823C
    -
    5824C***********************************************************
    -
    5825C
    -
    5826C From TRIPACK
    -
    5827C Robert J. Renka
    -
    5828C Dept. of Computer Science
    -
    5829C Univ. of North Texas
    -
    5830C renka@cs.unt.edu
    -
    5831C 07/30/98
    -
    5832C
    -
    5833C Given a triangulation of a set of points in the plane,
    -
    5834C this subroutine prints the adjacency lists and, option-
    -
    5835C ally, the nodal coordinates on logical unit LOUT. The
    -
    5836C list of neighbors of a boundary node is followed by index
    -
    5837C 0. The numbers of boundary nodes, triangles, and arcs,
    -
    5838C and the constraint curve starting indexes, if any, are
    -
    5839C also printed.
    -
    5840C
    -
    5841C
    -
    5842C On input:
    -
    5843C
    -
    5844C NCC = Number of constraints.
    -
    5845C
    -
    5846C LCC = List of constraint curve starting indexes (or
    -
    5847C dummy array of length 1 if NCC = 0).
    -
    5848C
    -
    5849C N = Number of nodes in the triangulation.
    -
    5850C 3 .LE. N .LE. 9999.
    -
    5851C
    -
    5852C X,Y = Arrays of length N containing the coordinates
    -
    5853C of the nodes in the triangulation -- not used
    -
    5854C unless PRNTX = TRUE.
    -
    5855C
    -
    5856C LIST,LPTR,LEND = Data structure defining the trian-
    -
    5857C gulation. Refer to Subroutine
    -
    5858C TRMESH.
    -
    5859C
    -
    5860C LOUT = Logical unit number for output. 0 .LE. LOUT
    -
    5861C .LE. 99. Output is printed on unit 6 if LOUT
    -
    5862C is outside its valid range on input.
    -
    5863C
    -
    5864C PRNTX = Logical variable with value TRUE if and only
    -
    5865C if X and Y are to be printed (to 6 decimal
    -
    5866C places).
    -
    5867C
    -
    5868C None of the parameters are altered by this routine.
    -
    5869C
    -
    5870C Modules required by TRPRNT: None
    -
    5871C
    -
    5872C***********************************************************
    -
    5873C
    -
    5874 INTEGER I, INC, K, LP, LPL, LUN, NA, NABOR(100), NB,
    -
    5875 . ND, NL, NLMAX, NMAX, NODE, NN, NT
    -
    5876 DATA NMAX/9999/, NLMAX/60/
    -
    5877C
    -
    5878 NN = n
    -
    5879 lun = lout
    -
    5880 IF (lun .LT. 0 .OR. lun .GT. 99) lun = 6
    -
    5881C
    -
    5882C Print a heading and test the range of N.
    -
    5883C
    -
    5884 WRITE (lun,100) nn
    -
    5885 IF (nn .LT. 3 .OR. nn .GT. nmax) THEN
    -
    5886C
    -
    5887C N is outside its valid range.
    -
    5888C
    -
    5889 WRITE (lun,110)
    -
    5890 GO TO 5
    -
    5891 ENDIF
    -
    5892C
    -
    5893C Initialize NL (the number of lines printed on the current
    -
    5894C page) and NB (the number of boundary nodes encountered).
    -
    5895C
    -
    5896 nl = 6
    -
    5897 nb = 0
    -
    5898 IF (.NOT. prntx) THEN
    -
    5899C
    -
    5900C Print LIST only. K is the number of neighbors of NODE
    -
    5901C which are stored in NABOR.
    -
    5902C
    -
    5903 WRITE (lun,101)
    -
    5904 DO 2 node = 1,nn
    -
    5905 lpl = lend(node)
    -
    5906 lp = lpl
    -
    5907 k = 0
    -
    5908C
    -
    5909 1 k = k + 1
    -
    5910 lp = lptr(lp)
    -
    5911 nd = list(lp)
    -
    5912 nabor(k) = nd
    -
    5913 IF (lp .NE. lpl) GO TO 1
    -
    5914 IF (nd .LE. 0) THEN
    -
    5915C
    -
    5916C NODE is a boundary node. Correct the sign of the last
    -
    5917C neighbor, add 0 to the end of the list, and increment
    -
    5918C NB.
    -
    5919C
    -
    5920 nabor(k) = -nd
    -
    5921 k = k + 1
    -
    5922 nabor(k) = 0
    -
    5923 nb = nb + 1
    -
    5924 ENDIF
    -
    5925C
    -
    5926C Increment NL and print the list of neighbors.
    -
    5927C
    -
    5928 inc = (k-1)/14 + 2
    -
    5929 nl = nl + inc
    -
    5930 IF (nl .GT. nlmax) THEN
    -
    5931 WRITE (lun,106)
    -
    5932 nl = inc
    -
    5933 ENDIF
    -
    5934 WRITE (lun,103) node, (nabor(i), i = 1,k)
    -
    5935 IF (k .NE. 14) WRITE (lun,105)
    -
    5936 2 CONTINUE
    -
    5937 ELSE
    -
    5938C
    -
    5939C Print X, Y, and LIST.
    -
    5940C
    -
    5941 WRITE (lun,102)
    -
    5942 DO 4 node = 1,nn
    -
    5943 lpl = lend(node)
    -
    5944 lp = lpl
    -
    5945 k = 0
    -
    5946 3 k = k + 1
    -
    5947 lp = lptr(lp)
    -
    5948 nd = list(lp)
    -
    5949 nabor(k) = nd
    -
    5950 IF (lp .NE. lpl) GO TO 3
    -
    5951 IF (nd .LE. 0) THEN
    -
    5952C
    -
    5953C NODE is a boundary node.
    -
    5954C
    -
    5955 nabor(k) = -nd
    -
    5956 k = k + 1
    -
    5957 nabor(k) = 0
    -
    5958 nb = nb + 1
    -
    5959 ENDIF
    -
    5960C
    -
    5961C Increment NL and print X, Y, and NABOR.
    -
    5962C
    -
    5963 inc = (k-1)/8 + 2
    -
    5964 nl = nl + inc
    -
    5965 IF (nl .GT. nlmax) THEN
    -
    5966 WRITE (lun,106)
    -
    5967 nl = inc
    -
    5968 ENDIF
    -
    5969 WRITE (lun,104) node, x(node), y(node),
    -
    5970 . (nabor(i), i = 1,k)
    -
    5971 IF (k .NE. 8) WRITE (lun,105)
    -
    5972 4 CONTINUE
    -
    5973 ENDIF
    -
    5974C
    -
    5975C Print NB, NA, and NT (boundary nodes, arcs, and
    -
    5976C triangles).
    -
    5977C
    -
    5978 nt = 2*nn - nb - 2
    -
    5979 na = nt + nn - 1
    -
    5980 IF (nl .GT. nlmax-6) WRITE (lun,106)
    -
    5981 WRITE (lun,107) nb, na, nt
    -
    5982C
    -
    5983C Print NCC and LCC.
    -
    5984C
    -
    5985 5 WRITE (lun,108) ncc
    -
    5986 IF (ncc .GT. 0) WRITE (lun,109) (lcc(i), i = 1,ncc)
    -
    5987 RETURN
    -
    5988C
    -
    5989C Print formats:
    -
    5990C
    -
    5991 100 FORMAT (///,26x,'Adjacency Sets, N = ',i5//)
    -
    5992 101 FORMAT (1x,'Node',32x,'Neighbors of Node'//)
    -
    5993 102 FORMAT (1x,'Node',5x,'X(Node)',8x,'Y(Node)',
    -
    5994 . 20x,'Neighbors of Node'//)
    -
    5995 103 FORMAT (1x,i4,5x,14i5/(1x,9x,14i5))
    -
    5996 104 FORMAT (1x,i4,2e15.6,5x,8i5/(1x,39x,8i5))
    -
    5997 105 FORMAT (1x)
    -
    5998 106 FORMAT (///)
    -
    5999 107 FORMAT (/1x,'NB = ',i4,' Boundary Nodes',5x,
    -
    6000 . 'NA = ',i5,' Arcs',5x,'NT = ',i5,
    -
    6001 . ' Triangles')
    -
    6002 108 FORMAT (/1x,'NCC =',i3,' Constraint Curves')
    -
    6003 109 FORMAT (1x,9x,14i5)
    -
    6004 110 FORMAT (1x,10x,'*** N is outside its valid',
    -
    6005 . ' range ***')
    -
    6006 END
    -
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1color-members.html b/docs/html/typefplot__core_1_1color-members.html deleted file mode 100644 index a3850e5..0000000 --- a/docs/html/typefplot__core_1_1color-members.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::color Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::color, including all inherited members.

    - - - - - - -
    bluefplot_core::color
    copy_from=> clr_copy_fromfplot_core::color
    greenfplot_core::color
    redfplot_core::color
    to_hex_string=> clr_to_hex_stringfplot_core::color
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1colormap-members.html b/docs/html/typefplot__core_1_1colormap-members.html deleted file mode 100644 index 477b820..0000000 --- a/docs/html/typefplot__core_1_1colormap-members.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::colormap Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::colormap, including all inherited members.

    - - - -
    get_color_stringfplot_core::colormap
    get_command_string=> cm_get_cmdfplot_core::colormap
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1cool__colormap-members.html b/docs/html/typefplot__core_1_1cool__colormap-members.html deleted file mode 100644 index a06ce33..0000000 --- a/docs/html/typefplot__core_1_1cool__colormap-members.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::cool_colormap Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::cool_colormap, including all inherited members.

    - - - -
    get_color_string=> ccm_get_clrfplot_core::cool_colormap
    get_command_string=> cm_get_cmdfplot_core::colormap
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1hot__colormap-members.html b/docs/html/typefplot__core_1_1hot__colormap-members.html deleted file mode 100644 index bf75741..0000000 --- a/docs/html/typefplot__core_1_1hot__colormap-members.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::hot_colormap Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::hot_colormap, including all inherited members.

    - - - -
    get_color_string=> hcm_get_clrfplot_core::hot_colormap
    get_command_string=> cm_get_cmdfplot_core::colormap
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1latex__terminal-members.html b/docs/html/typefplot__core_1_1latex__terminal-members.html deleted file mode 100644 index 1d077a3..0000000 --- a/docs/html/typefplot__core_1_1latex__terminal-members.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::latex_terminal Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::latex_terminal, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    get_command_string=> tex_get_command_stringfplot_core::latex_terminal
    get_filename=> tex_get_filenamefplot_core::latex_terminal
    get_font_name=> term_get_font_namefplot_core::terminal
    get_font_size=> term_get_font_sizefplot_core::terminal
    get_id_string=> tex_get_term_stringfplot_core::latex_terminal
    get_plot_window_number=> term_get_plot_window_numberfplot_core::terminal
    get_title=> term_get_titlefplot_core::terminal
    get_window_height=> term_get_window_heightfplot_core::terminal
    get_window_width=> term_get_window_widthfplot_core::terminal
    m_fnamefplot_core::latex_terminalprivate
    m_idfplot_core::latex_terminalprivate
    set_filename=> tex_set_filenamefplot_core::latex_terminal
    set_font_name=> term_set_font_namefplot_core::terminal
    set_font_size=> term_set_font_sizefplot_core::terminal
    set_plot_window_number=> term_set_plot_window_numberfplot_core::terminal
    set_title=> term_set_titlefplot_core::terminal
    set_window_height=> term_set_window_heightfplot_core::terminal
    set_window_width=> term_set_window_widthfplot_core::terminal
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1legend-members.html b/docs/html/typefplot__core_1_1legend-members.html deleted file mode 100644 index 0b14e8f..0000000 --- a/docs/html/typefplot__core_1_1legend-members.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::legend Member List
    -
    - -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot-members.html b/docs/html/typefplot__core_1_1plot-members.html deleted file mode 100644 index 00101f9..0000000 --- a/docs/html/typefplot__core_1_1plot-members.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_all=> plt_clear_allfplot_core::plot
    clear_all_labels=> plt_clear_labels (defined in fplot_core::plot)fplot_core::plot
    draw=> plt_drawfplot_core::plot
    free_resources=> plt_clean_upfplot_core::plot
    get=> plt_getfplot_core::plot
    get_command_stringfplot_core::plot_object
    get_count=> plt_get_countfplot_core::plot
    get_draw_border=> plt_get_draw_borderfplot_core::plot
    get_font_name=> plt_get_fontfplot_core::plot
    get_font_size=> plt_get_font_sizefplot_core::plot
    get_label=> plt_get_label (defined in fplot_core::plot)fplot_core::plot
    get_label_count=> plt_get_label_count (defined in fplot_core::plot)fplot_core::plot
    get_legend=> plt_get_legendfplot_core::plot
    get_show_gridlines=> plt_get_show_gridfplot_core::plot
    get_terminal=> plt_get_termfplot_core::plot
    get_tics_inward=> plt_get_tics_infplot_core::plot
    get_title=> plt_get_titlefplot_core::plot
    initialize=> plt_initfplot_core::plot
    is_title_defined=> plt_has_titlefplot_core::plot
    m_datafplot_core::plotprivate
    m_drawborderfplot_core::plotprivate
    m_hastitlefplot_core::plotprivate
    m_labelsfplot_core::plotprivate
    m_legendfplot_core::plotprivate
    m_showgridfplot_core::plotprivate
    m_terminalfplot_core::plotprivate
    m_ticsinfplot_core::plotprivate
    m_titlefplot_core::plotprivate
    pop=> plt_pop_datafplot_core::plot
    pop_label=> plt_pop_label (defined in fplot_core::plot)fplot_core::plot
    push=> plt_push_datafplot_core::plot
    push_label=> plt_push_label (defined in fplot_core::plot)fplot_core::plot
    save_file=> plt_savefplot_core::plot
    set=> plt_setfplot_core::plot
    set_draw_border=> plt_set_draw_borderfplot_core::plot
    set_font_name=> plt_set_fontfplot_core::plot
    set_font_size=> plt_set_font_sizefplot_core::plot
    set_label=> plt_set_label (defined in fplot_core::plot)fplot_core::plot
    set_show_gridlines=> plt_set_show_gridfplot_core::plot
    set_tics_inward=> plt_set_tics_infplot_core::plot
    set_title=> plt_set_titlefplot_core::plot
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot__2d-members.html b/docs/html/typefplot__core_1_1plot__2d-members.html deleted file mode 100644 index ec38993..0000000 --- a/docs/html/typefplot__core_1_1plot__2d-members.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot_2d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_2d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_all=> plt_clear_allfplot_core::plot
    clear_all_labels=> plt_clear_labels (defined in fplot_core::plot)fplot_core::plot
    draw=> plt_drawfplot_core::plot
    free_resources=> plt_clean_upfplot_core::plot
    get=> plt_getfplot_core::plot
    get_command_string=> p2d_get_cmdfplot_core::plot_2d
    get_count=> plt_get_countfplot_core::plot
    get_draw_border=> plt_get_draw_borderfplot_core::plot
    get_font_name=> plt_get_fontfplot_core::plot
    get_font_size=> plt_get_font_sizefplot_core::plot
    get_label=> plt_get_label (defined in fplot_core::plot)fplot_core::plot
    get_label_count=> plt_get_label_count (defined in fplot_core::plot)fplot_core::plot
    get_legend=> plt_get_legendfplot_core::plot
    get_show_gridlines=> plt_get_show_gridfplot_core::plot
    get_terminal=> plt_get_termfplot_core::plot
    get_tics_inward=> plt_get_tics_infplot_core::plot
    get_title=> plt_get_titlefplot_core::plot
    get_use_y2_axis=> p2d_get_use_y2fplot_core::plot_2d
    get_x_axis=> p2d_get_x_axisfplot_core::plot_2d
    get_y2_axis=> p2d_get_y2_axisfplot_core::plot_2d
    get_y_axis=> p2d_get_y_axisfplot_core::plot_2d
    initialize=> p2d_initfplot_core::plot_2d
    is_title_defined=> plt_has_titlefplot_core::plot
    m_usey2fplot_core::plot_2dprivate
    m_xaxisfplot_core::plot_2dprivate
    m_y2axisfplot_core::plot_2dprivate
    m_yaxisfplot_core::plot_2dprivate
    p2d_clean_upfplot_core::plot_2dprivate
    pop=> plt_pop_datafplot_core::plot
    pop_label=> plt_pop_label (defined in fplot_core::plot)fplot_core::plot
    push=> plt_push_datafplot_core::plot
    push_label=> plt_push_label (defined in fplot_core::plot)fplot_core::plot
    save_file=> plt_savefplot_core::plot
    set=> plt_setfplot_core::plot
    set_draw_border=> plt_set_draw_borderfplot_core::plot
    set_font_name=> plt_set_fontfplot_core::plot
    set_font_size=> plt_set_font_sizefplot_core::plot
    set_label=> plt_set_label (defined in fplot_core::plot)fplot_core::plot
    set_show_gridlines=> plt_set_show_gridfplot_core::plot
    set_tics_inward=> plt_set_tics_infplot_core::plot
    set_title=> plt_set_titlefplot_core::plot
    set_use_y2_axis=> p2d_set_use_y2fplot_core::plot_2d
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot__3d-members.html b/docs/html/typefplot__core_1_1plot__3d-members.html deleted file mode 100644 index ed02a5d..0000000 --- a/docs/html/typefplot__core_1_1plot__3d-members.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot_3d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_3d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_all=> plt_clear_allfplot_core::plot
    clear_all_labels=> plt_clear_labels (defined in fplot_core::plot)fplot_core::plot
    draw=> plt_drawfplot_core::plot
    free_resources=> plt_clean_upfplot_core::plot
    get=> plt_getfplot_core::plot
    get_azimuth=> p3d_get_azimuthfplot_core::plot_3d
    get_command_string=> p3d_get_cmdfplot_core::plot_3d
    get_count=> plt_get_countfplot_core::plot
    get_draw_border=> plt_get_draw_borderfplot_core::plot
    get_elevation=> p3d_get_elevationfplot_core::plot_3d
    get_font_name=> plt_get_fontfplot_core::plot
    get_font_size=> plt_get_font_sizefplot_core::plot
    get_label=> plt_get_label (defined in fplot_core::plot)fplot_core::plot
    get_label_count=> plt_get_label_count (defined in fplot_core::plot)fplot_core::plot
    get_legend=> plt_get_legendfplot_core::plot
    get_show_gridlines=> plt_get_show_gridfplot_core::plot
    get_terminal=> plt_get_termfplot_core::plot
    get_tics_inward=> plt_get_tics_infplot_core::plot
    get_title=> plt_get_titlefplot_core::plot
    get_x_axis=> p3d_get_x_axisfplot_core::plot_3d
    get_y_axis=> p3d_get_y_axisfplot_core::plot_3d
    get_z_axis=> p3d_get_z_axisfplot_core::plot_3d
    get_z_intersect_xy=> p3d_get_z_axis_intersectfplot_core::plot_3d
    initialize=> p3d_initfplot_core::plot_3d
    is_title_defined=> plt_has_titlefplot_core::plot
    m_azimuthfplot_core::plot_3dprivate
    m_elevationfplot_core::plot_3dprivate
    m_xaxisfplot_core::plot_3dprivate
    m_yaxisfplot_core::plot_3dprivate
    m_zaxisfplot_core::plot_3dprivate
    m_zintersectfplot_core::plot_3dprivate
    p3d_clean_upfplot_core::plot_3dprivate
    pop=> plt_pop_datafplot_core::plot
    pop_label=> plt_pop_label (defined in fplot_core::plot)fplot_core::plot
    push=> plt_push_datafplot_core::plot
    push_label=> plt_push_label (defined in fplot_core::plot)fplot_core::plot
    save_file=> plt_savefplot_core::plot
    set=> plt_setfplot_core::plot
    set_azimuth=> p3d_set_azimuthfplot_core::plot_3d
    set_draw_border=> plt_set_draw_borderfplot_core::plot
    set_elevation=> p3d_set_elevationfplot_core::plot_3d
    set_font_name=> plt_set_fontfplot_core::plot
    set_font_size=> plt_set_font_sizefplot_core::plot
    set_label=> plt_set_label (defined in fplot_core::plot)fplot_core::plot
    set_show_gridlines=> plt_set_show_gridfplot_core::plot
    set_tics_inward=> plt_set_tics_infplot_core::plot
    set_title=> plt_set_titlefplot_core::plot
    set_z_intersect_xy=> p3d_set_z_axis_intersectfplot_core::plot_3d
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot__axis-members.html b/docs/html/typefplot__core_1_1plot__axis-members.html deleted file mode 100644 index 63e7cd6..0000000 --- a/docs/html/typefplot__core_1_1plot__axis-members.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/typefplot__core_1_1plot__data-members.html b/docs/html/typefplot__core_1_1plot__data-members.html deleted file mode 100644 index 43a70f2..0000000 --- a/docs/html/typefplot__core_1_1plot__data-members.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot_data Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data, including all inherited members.

    - - - - - - -
    get_command_stringfplot_core::plot_object
    get_data_stringfplot_core::plot_data
    get_name=> pd_get_namefplot_core::plot_data
    m_namefplot_core::plot_dataprivate
    set_name=> pd_set_namefplot_core::plot_data
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot__data__2d-members.html b/docs/html/typefplot__core_1_1plot__data__2d-members.html deleted file mode 100644 index 0712735..0000000 --- a/docs/html/typefplot__core_1_1plot__data__2d-members.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot_data_2d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_2d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    define_data=> pd2d_set_data_1, pd2d_set_data_2fplot_core::plot_data_2d
    get_axes_string=> pd2d_get_axes_cmdfplot_core::plot_data_2d
    get_command_string=> spd_get_cmdfplot_core::scatter_plot_data
    get_count=> pd2d_get_data_countfplot_core::plot_data_2d
    get_data_string=> pd2d_get_data_cmdfplot_core::plot_data_2d
    get_draw_against_y2=> pd2d_get_draw_against_y2fplot_core::plot_data_2d
    get_draw_line=> spd_get_draw_linefplot_core::scatter_plot_data
    get_draw_markers=> spd_get_draw_markersfplot_core::scatter_plot_data
    get_line_color=> spd_get_line_colorfplot_core::scatter_plot_data
    get_line_style=> spd_get_line_stylefplot_core::scatter_plot_data
    get_line_width=> spd_get_line_widthfplot_core::scatter_plot_data
    get_marker_frequency=> spd_get_marker_frequencyfplot_core::scatter_plot_data
    get_marker_scaling=> spd_get_marker_scalingfplot_core::scatter_plot_data
    get_marker_style=> spd_get_marker_stylefplot_core::scatter_plot_data
    get_name=> pd_get_namefplot_core::plot_data
    get_use_auto_color=> spd_get_use_auto_colorsfplot_core::scatter_plot_data
    get_x=> pd2d_get_x_datafplot_core::plot_data_2d
    get_y=> pd2d_get_y_datafplot_core::plot_data_2d
    m_datafplot_core::plot_data_2dprivate
    m_usey2fplot_core::plot_data_2dprivate
    pd2d_set_data_1 (defined in fplot_core::plot_data_2d)fplot_core::plot_data_2dprivate
    pd2d_set_data_2 (defined in fplot_core::plot_data_2d)fplot_core::plot_data_2dprivate
    set_draw_against_y2=> pd2d_set_draw_against_y2fplot_core::plot_data_2d
    set_draw_line=> spd_set_draw_linefplot_core::scatter_plot_data
    set_draw_markers=> spd_set_draw_markersfplot_core::scatter_plot_data
    set_line_color=> spd_set_line_colorfplot_core::scatter_plot_data
    set_line_style=> spd_set_line_stylefplot_core::scatter_plot_data
    set_line_width=> spd_set_line_widthfplot_core::scatter_plot_data
    set_marker_frequency=> spd_set_marker_frequencyfplot_core::scatter_plot_data
    set_marker_scaling=> spd_set_marker_scalingfplot_core::scatter_plot_data
    set_marker_style=> spd_set_marker_stylefplot_core::scatter_plot_data
    set_name=> pd_set_namefplot_core::plot_data
    set_use_auto_color=> spd_set_use_auto_colorsfplot_core::scatter_plot_data
    set_x=> pd2d_set_x_datafplot_core::plot_data_2d
    set_y=> pd2d_set_y_datafplot_core::plot_data_2d
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot__data__3d-members.html b/docs/html/typefplot__core_1_1plot__data__3d-members.html deleted file mode 100644 index 5bf8bab..0000000 --- a/docs/html/typefplot__core_1_1plot__data__3d-members.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot_data_3d Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_data_3d, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    define_data=> pd3d_set_data_1fplot_core::plot_data_3d
    get_axes_string=> pd3d_get_axes_cmdfplot_core::plot_data_3d
    get_command_string=> spd_get_cmdfplot_core::scatter_plot_data
    get_count=> pd3d_get_data_countfplot_core::plot_data_3d
    get_data_string=> pd3d_get_data_cmdfplot_core::plot_data_3d
    get_draw_line=> spd_get_draw_linefplot_core::scatter_plot_data
    get_draw_markers=> spd_get_draw_markersfplot_core::scatter_plot_data
    get_line_color=> spd_get_line_colorfplot_core::scatter_plot_data
    get_line_style=> spd_get_line_stylefplot_core::scatter_plot_data
    get_line_width=> spd_get_line_widthfplot_core::scatter_plot_data
    get_marker_frequency=> spd_get_marker_frequencyfplot_core::scatter_plot_data
    get_marker_scaling=> spd_get_marker_scalingfplot_core::scatter_plot_data
    get_marker_style=> spd_get_marker_stylefplot_core::scatter_plot_data
    get_name=> pd_get_namefplot_core::plot_data
    get_use_auto_color=> spd_get_use_auto_colorsfplot_core::scatter_plot_data
    get_x=> pd3d_get_x_datafplot_core::plot_data_3d
    get_y=> pd3d_get_y_datafplot_core::plot_data_3d
    get_z=> pd3d_get_z_datafplot_core::plot_data_3d
    m_datafplot_core::plot_data_3dprivate
    set_draw_line=> spd_set_draw_linefplot_core::scatter_plot_data
    set_draw_markers=> spd_set_draw_markersfplot_core::scatter_plot_data
    set_line_color=> spd_set_line_colorfplot_core::scatter_plot_data
    set_line_style=> spd_set_line_stylefplot_core::scatter_plot_data
    set_line_width=> spd_set_line_widthfplot_core::scatter_plot_data
    set_marker_frequency=> spd_set_marker_frequencyfplot_core::scatter_plot_data
    set_marker_scaling=> spd_set_marker_scalingfplot_core::scatter_plot_data
    set_marker_style=> spd_set_marker_stylefplot_core::scatter_plot_data
    set_name=> pd_set_namefplot_core::plot_data
    set_use_auto_color=> spd_set_use_auto_colorsfplot_core::scatter_plot_data
    set_x=> pd3d_set_x_datafplot_core::plot_data_3d
    set_y=> pd3d_set_y_datafplot_core::plot_data_3d
    set_z=> pd3d_set_z_datafplot_core::plot_data_3d
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot__label-members.html b/docs/html/typefplot__core_1_1plot__label-members.html deleted file mode 100644 index 24205a0..0000000 --- a/docs/html/typefplot__core_1_1plot__label-members.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot_label Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_label, including all inherited members.

    - - - - - - - - - - - - - - -
    get_angle=> lbl_get_angle (defined in fplot_core::plot_label)fplot_core::plot_label
    get_command_string=> lbl_get_cmd (defined in fplot_core::plot_label)fplot_core::plot_label
    get_is_visible=> lbl_get_is_visible (defined in fplot_core::plot_label)fplot_core::plot_label
    get_position=> lbl_get_position (defined in fplot_core::plot_label)fplot_core::plot_label
    get_text=> lbl_get_txt (defined in fplot_core::plot_label)fplot_core::plot_label
    m_anglefplot_core::plot_labelprivate
    m_positionfplot_core::plot_labelprivate
    m_textfplot_core::plot_labelprivate
    m_visiblefplot_core::plot_labelprivate
    set_angle=> lbl_set_angle (defined in fplot_core::plot_label)fplot_core::plot_label
    set_is_visible=> lbl_set_is_visible (defined in fplot_core::plot_label)fplot_core::plot_label
    set_position=> lbl_set_position (defined in fplot_core::plot_label)fplot_core::plot_label
    set_text=> lbl_set_txt (defined in fplot_core::plot_label)fplot_core::plot_label
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1plot__object-members.html b/docs/html/typefplot__core_1_1plot__object-members.html deleted file mode 100644 index 9102def..0000000 --- a/docs/html/typefplot__core_1_1plot__object-members.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::plot_object Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::plot_object, including all inherited members.

    - - -
    get_command_stringfplot_core::plot_object
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1png__terminal-members.html b/docs/html/typefplot__core_1_1png__terminal-members.html deleted file mode 100644 index 0bc8cd8..0000000 --- a/docs/html/typefplot__core_1_1png__terminal-members.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::png_terminal Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::png_terminal, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    get_command_string=> png_get_command_stringfplot_core::png_terminal
    get_filename=> png_get_filenamefplot_core::png_terminal
    get_font_name=> term_get_font_namefplot_core::terminal
    get_font_size=> term_get_font_sizefplot_core::terminal
    get_id_string=> png_get_term_stringfplot_core::png_terminal
    get_plot_window_number=> term_get_plot_window_numberfplot_core::terminal
    get_title=> term_get_titlefplot_core::terminal
    get_window_height=> term_get_window_heightfplot_core::terminal
    get_window_width=> term_get_window_widthfplot_core::terminal
    m_fnamefplot_core::png_terminalprivate
    m_idfplot_core::png_terminalprivate
    set_filename=> png_set_filenamefplot_core::png_terminal
    set_font_name=> term_set_font_namefplot_core::terminal
    set_font_size=> term_set_font_sizefplot_core::terminal
    set_plot_window_number=> term_set_plot_window_numberfplot_core::terminal
    set_title=> term_set_titlefplot_core::terminal
    set_window_height=> term_set_window_heightfplot_core::terminal
    set_window_width=> term_set_window_widthfplot_core::terminal
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1qt__terminal-members.html b/docs/html/typefplot__core_1_1qt__terminal-members.html deleted file mode 100644 index 03b3ff9..0000000 --- a/docs/html/typefplot__core_1_1qt__terminal-members.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::qt_terminal Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::qt_terminal, including all inherited members.

    - - - - - - - - - - - - - - - - -
    get_command_string=> term_get_command_stringfplot_core::terminal
    get_font_name=> term_get_font_namefplot_core::terminal
    get_font_size=> term_get_font_sizefplot_core::terminal
    get_id_string=> qt_get_term_stringfplot_core::qt_terminal
    get_plot_window_number=> term_get_plot_window_numberfplot_core::terminal
    get_title=> term_get_titlefplot_core::terminal
    get_window_height=> term_get_window_heightfplot_core::terminal
    get_window_width=> term_get_window_widthfplot_core::terminal
    m_idfplot_core::qt_terminalprivate
    set_font_name=> term_set_font_namefplot_core::terminal
    set_font_size=> term_set_font_sizefplot_core::terminal
    set_plot_window_number=> term_set_plot_window_numberfplot_core::terminal
    set_title=> term_set_titlefplot_core::terminal
    set_window_height=> term_set_window_heightfplot_core::terminal
    set_window_width=> term_set_window_widthfplot_core::terminal
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1rainbow__colormap-members.html b/docs/html/typefplot__core_1_1rainbow__colormap-members.html deleted file mode 100644 index 3fe5d5c..0000000 --- a/docs/html/typefplot__core_1_1rainbow__colormap-members.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::rainbow_colormap Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::rainbow_colormap, including all inherited members.

    - - - -
    get_color_string=> rcm_get_clrfplot_core::rainbow_colormap
    get_command_string=> cm_get_cmdfplot_core::colormap
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1scatter__plot__data-members.html b/docs/html/typefplot__core_1_1scatter__plot__data-members.html deleted file mode 100644 index dc539bd..0000000 --- a/docs/html/typefplot__core_1_1scatter__plot__data-members.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::scatter_plot_data Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::scatter_plot_data, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_axes_stringfplot_core::scatter_plot_data
    get_command_string=> spd_get_cmdfplot_core::scatter_plot_data
    get_countfplot_core::scatter_plot_data
    get_data_stringfplot_core::plot_data
    get_draw_line=> spd_get_draw_linefplot_core::scatter_plot_data
    get_draw_markers=> spd_get_draw_markersfplot_core::scatter_plot_data
    get_line_color=> spd_get_line_colorfplot_core::scatter_plot_data
    get_line_style=> spd_get_line_stylefplot_core::scatter_plot_data
    get_line_width=> spd_get_line_widthfplot_core::scatter_plot_data
    get_marker_frequency=> spd_get_marker_frequencyfplot_core::scatter_plot_data
    get_marker_scaling=> spd_get_marker_scalingfplot_core::scatter_plot_data
    get_marker_style=> spd_get_marker_stylefplot_core::scatter_plot_data
    get_name=> pd_get_namefplot_core::plot_data
    get_use_auto_color=> spd_get_use_auto_colorsfplot_core::scatter_plot_data
    get_xfplot_core::scatter_plot_data
    get_yfplot_core::scatter_plot_data
    m_drawlinefplot_core::scatter_plot_dataprivate
    m_drawmarkersfplot_core::scatter_plot_dataprivate
    m_linecolorfplot_core::scatter_plot_dataprivate
    m_linestylefplot_core::scatter_plot_dataprivate
    m_linewidthfplot_core::scatter_plot_dataprivate
    m_markerfrequencyfplot_core::scatter_plot_dataprivate
    m_markersizefplot_core::scatter_plot_dataprivate
    m_markertypefplot_core::scatter_plot_dataprivate
    m_useautocolorfplot_core::scatter_plot_dataprivate
    set_draw_line=> spd_set_draw_linefplot_core::scatter_plot_data
    set_draw_markers=> spd_set_draw_markersfplot_core::scatter_plot_data
    set_line_color=> spd_set_line_colorfplot_core::scatter_plot_data
    set_line_style=> spd_set_line_stylefplot_core::scatter_plot_data
    set_line_width=> spd_set_line_widthfplot_core::scatter_plot_data
    set_marker_frequency=> spd_set_marker_frequencyfplot_core::scatter_plot_data
    set_marker_scaling=> spd_set_marker_scalingfplot_core::scatter_plot_data
    set_marker_style=> spd_set_marker_stylefplot_core::scatter_plot_data
    set_name=> pd_set_namefplot_core::plot_data
    set_use_auto_color=> spd_set_use_auto_colorsfplot_core::scatter_plot_data
    set_xfplot_core::scatter_plot_data
    set_yfplot_core::scatter_plot_data
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1surface__plot-members.html b/docs/html/typefplot__core_1_1surface__plot-members.html deleted file mode 100644 index a68b818..0000000 --- a/docs/html/typefplot__core_1_1surface__plot-members.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::surface_plot Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::surface_plot, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    clear_all=> plt_clear_allfplot_core::plot
    clear_all_labels=> plt_clear_labels (defined in fplot_core::plot)fplot_core::plot
    draw=> plt_drawfplot_core::plot
    free_resources=> plt_clean_upfplot_core::plot
    get=> plt_getfplot_core::plot
    get_allow_smoothing=> surf_get_smoothfplot_core::surface_plot
    get_azimuth=> p3d_get_azimuthfplot_core::plot_3d
    get_colormap=> surf_get_colormapfplot_core::surface_plot
    get_command_string=> surf_get_cmdfplot_core::surface_plot
    get_count=> plt_get_countfplot_core::plot
    get_draw_border=> plt_get_draw_borderfplot_core::plot
    get_elevation=> p3d_get_elevationfplot_core::plot_3d
    get_font_name=> plt_get_fontfplot_core::plot
    get_font_size=> plt_get_font_sizefplot_core::plot
    get_label=> plt_get_label (defined in fplot_core::plot)fplot_core::plot
    get_label_count=> plt_get_label_count (defined in fplot_core::plot)fplot_core::plot
    get_legend=> plt_get_legendfplot_core::plot
    get_light_intensity=> surf_get_light_intensityfplot_core::surface_plot
    get_show_colorbar=> surf_get_show_colorbarfplot_core::surface_plot
    get_show_contours=> surf_get_show_contoursfplot_core::surface_plot
    get_show_gridlines=> plt_get_show_gridfplot_core::plot
    get_show_hidden=> surf_get_show_hiddenfplot_core::surface_plot
    get_specular_intensity=> surf_get_specular_intensityfplot_core::surface_plot
    get_terminal=> plt_get_termfplot_core::plot
    get_tics_inward=> plt_get_tics_infplot_core::plot
    get_title=> plt_get_titlefplot_core::plot
    get_use_lighting=> surf_get_use_lightingfplot_core::surface_plot
    get_x_axis=> p3d_get_x_axisfplot_core::plot_3d
    get_y_axis=> p3d_get_y_axisfplot_core::plot_3d
    get_z_axis=> p3d_get_z_axisfplot_core::plot_3d
    get_z_intersect_xy=> p3d_get_z_axis_intersectfplot_core::plot_3d
    initialize=> surf_initfplot_core::surface_plot
    is_title_defined=> plt_has_titlefplot_core::plot
    m_colormapfplot_core::surface_plotprivate
    m_contourfplot_core::surface_plotprivate
    m_lightintensityfplot_core::surface_plotprivate
    m_showcolorbarfplot_core::surface_plotprivate
    m_showhiddenfplot_core::surface_plotprivate
    m_smoothfplot_core::surface_plotprivate
    m_specularfplot_core::surface_plotprivate
    m_uselightingfplot_core::surface_plotprivate
    pop=> plt_pop_datafplot_core::plot
    pop_label=> plt_pop_label (defined in fplot_core::plot)fplot_core::plot
    push=> plt_push_datafplot_core::plot
    push_label=> plt_push_label (defined in fplot_core::plot)fplot_core::plot
    save_file=> plt_savefplot_core::plot
    set=> plt_setfplot_core::plot
    set_allow_smoothing=> surf_set_smoothfplot_core::surface_plot
    set_azimuth=> p3d_set_azimuthfplot_core::plot_3d
    set_colormap=> surf_set_colormapfplot_core::surface_plot
    set_draw_border=> plt_set_draw_borderfplot_core::plot
    set_elevation=> p3d_set_elevationfplot_core::plot_3d
    set_font_name=> plt_set_fontfplot_core::plot
    set_font_size=> plt_set_font_sizefplot_core::plot
    set_label=> plt_set_label (defined in fplot_core::plot)fplot_core::plot
    set_light_intensity=> surf_set_light_intensityfplot_core::surface_plot
    set_show_colorbar=> surf_set_show_colorbarfplot_core::surface_plot
    set_show_contours=> surf_set_show_contoursfplot_core::surface_plot
    set_show_gridlines=> plt_set_show_gridfplot_core::plot
    set_show_hidden=> surf_set_show_hiddenfplot_core::surface_plot
    set_specular_intensity=> surf_set_specular_intensityfplot_core::surface_plot
    set_tics_inward=> plt_set_tics_infplot_core::plot
    set_title=> plt_set_titlefplot_core::plot
    set_use_lighting=> surf_set_use_lightingfplot_core::surface_plot
    set_z_intersect_xy=> p3d_set_z_axis_intersectfplot_core::plot_3d
    surf_clean_upfplot_core::surface_plotprivate
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1surface__plot__data-members.html b/docs/html/typefplot__core_1_1surface__plot__data-members.html deleted file mode 100644 index e6ebb6f..0000000 --- a/docs/html/typefplot__core_1_1surface__plot__data-members.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/docs/html/typefplot__core_1_1terminal-members.html b/docs/html/typefplot__core_1_1terminal-members.html deleted file mode 100644 index 0de4471..0000000 --- a/docs/html/typefplot__core_1_1terminal-members.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::terminal Member List
    -
    - -
    - - - - diff --git a/docs/html/typefplot__core_1_1windows__terminal-members.html b/docs/html/typefplot__core_1_1windows__terminal-members.html deleted file mode 100644 index d46f91f..0000000 --- a/docs/html/typefplot__core_1_1windows__terminal-members.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::windows_terminal Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::windows_terminal, including all inherited members.

    - - - - - - - - - - - - - - - - -
    get_command_string=> term_get_command_stringfplot_core::terminal
    get_font_name=> term_get_font_namefplot_core::terminal
    get_font_size=> term_get_font_sizefplot_core::terminal
    get_id_string=> wt_get_term_stringfplot_core::windows_terminal
    get_plot_window_number=> term_get_plot_window_numberfplot_core::terminal
    get_title=> term_get_titlefplot_core::terminal
    get_window_height=> term_get_window_heightfplot_core::terminal
    get_window_width=> term_get_window_widthfplot_core::terminal
    m_idfplot_core::windows_terminalprivate
    set_font_name=> term_set_font_namefplot_core::terminal
    set_font_size=> term_set_font_sizefplot_core::terminal
    set_plot_window_number=> term_set_plot_window_numberfplot_core::terminal
    set_title=> term_set_titlefplot_core::terminal
    set_window_height=> term_set_window_heightfplot_core::terminal
    set_window_width=> term_set_window_widthfplot_core::terminal
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1wxt__terminal-members.html b/docs/html/typefplot__core_1_1wxt__terminal-members.html deleted file mode 100644 index 403f464..0000000 --- a/docs/html/typefplot__core_1_1wxt__terminal-members.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::wxt_terminal Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::wxt_terminal, including all inherited members.

    - - - - - - - - - - - - - - - - -
    get_command_string=> term_get_command_stringfplot_core::terminal
    get_font_name=> term_get_font_namefplot_core::terminal
    get_font_size=> term_get_font_sizefplot_core::terminal
    get_id_string=> wxt_get_term_stringfplot_core::wxt_terminal
    get_plot_window_number=> term_get_plot_window_numberfplot_core::terminal
    get_title=> term_get_titlefplot_core::terminal
    get_window_height=> term_get_window_heightfplot_core::terminal
    get_window_width=> term_get_window_widthfplot_core::terminal
    m_idfplot_core::wxt_terminalprivate
    set_font_name=> term_set_font_namefplot_core::terminal
    set_font_size=> term_set_font_sizefplot_core::terminal
    set_plot_window_number=> term_set_plot_window_numberfplot_core::terminal
    set_title=> term_set_titlefplot_core::terminal
    set_window_height=> term_set_window_heightfplot_core::terminal
    set_window_width=> term_set_window_widthfplot_core::terminal
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1x__axis-members.html b/docs/html/typefplot__core_1_1x__axis-members.html deleted file mode 100644 index 1650565..0000000 --- a/docs/html/typefplot__core_1_1x__axis-members.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::x_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::x_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - -
    get_autoscale=> pa_get_autoscalefplot_core::plot_axis
    get_command_string=> pa_get_cmd_stringfplot_core::plot_axis
    get_id_string=> xa_get_idfplot_core::x_axis
    get_is_log_scaled=> pa_get_log_scalefplot_core::plot_axis
    get_limits=> pa_get_axis_limitsfplot_core::plot_axis
    get_title=> pa_get_titlefplot_core::plot_axis
    get_zero_axis=> pa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_width=> pa_get_zero_axis_widthfplot_core::plot_axis
    is_title_defined=> pa_has_titlefplot_core::plot_axis
    m_idfplot_core::x_axisprivate
    set_autoscale=> pa_set_autoscalefplot_core::plot_axis
    set_is_log_scaled=> pa_set_log_scalefplot_core::plot_axis
    set_limits=> pa_set_axis_limitsfplot_core::plot_axis
    set_title=> pa_set_titlefplot_core::plot_axis
    set_zero_axis=> pa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_width=> pa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1y2__axis-members.html b/docs/html/typefplot__core_1_1y2__axis-members.html deleted file mode 100644 index 8ba4920..0000000 --- a/docs/html/typefplot__core_1_1y2__axis-members.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::y2_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::y2_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - -
    get_autoscale=> pa_get_autoscalefplot_core::plot_axis
    get_command_string=> pa_get_cmd_stringfplot_core::plot_axis
    get_id_string=> y2a_get_idfplot_core::y2_axis
    get_is_log_scaled=> pa_get_log_scalefplot_core::plot_axis
    get_limits=> pa_get_axis_limitsfplot_core::plot_axis
    get_title=> pa_get_titlefplot_core::plot_axis
    get_zero_axis=> pa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_width=> pa_get_zero_axis_widthfplot_core::plot_axis
    is_title_defined=> pa_has_titlefplot_core::plot_axis
    m_idfplot_core::y2_axisprivate
    set_autoscale=> pa_set_autoscalefplot_core::plot_axis
    set_is_log_scaled=> pa_set_log_scalefplot_core::plot_axis
    set_limits=> pa_set_axis_limitsfplot_core::plot_axis
    set_title=> pa_set_titlefplot_core::plot_axis
    set_zero_axis=> pa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_width=> pa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1y__axis-members.html b/docs/html/typefplot__core_1_1y__axis-members.html deleted file mode 100644 index a85581f..0000000 --- a/docs/html/typefplot__core_1_1y__axis-members.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::y_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::y_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - -
    get_autoscale=> pa_get_autoscalefplot_core::plot_axis
    get_command_string=> pa_get_cmd_stringfplot_core::plot_axis
    get_id_string=> ya_get_idfplot_core::y_axis
    get_is_log_scaled=> pa_get_log_scalefplot_core::plot_axis
    get_limits=> pa_get_axis_limitsfplot_core::plot_axis
    get_title=> pa_get_titlefplot_core::plot_axis
    get_zero_axis=> pa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_width=> pa_get_zero_axis_widthfplot_core::plot_axis
    is_title_defined=> pa_has_titlefplot_core::plot_axis
    m_idfplot_core::y_axisprivate
    set_autoscale=> pa_set_autoscalefplot_core::plot_axis
    set_is_log_scaled=> pa_set_log_scalefplot_core::plot_axis
    set_limits=> pa_set_axis_limitsfplot_core::plot_axis
    set_title=> pa_set_titlefplot_core::plot_axis
    set_zero_axis=> pa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_width=> pa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/typefplot__core_1_1z__axis-members.html b/docs/html/typefplot__core_1_1z__axis-members.html deleted file mode 100644 index 9f43dd9..0000000 --- a/docs/html/typefplot__core_1_1z__axis-members.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -fplot: Member List - - - - - - - - - - - - - - - -
    -
    - - - - - - -
    -
    fplot -  1.2.0 -
    -
    A Fortran library providing a convenient interface for plotting with Gnuplot.
    -
    -
    - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    fplot_core::z_axis Member List
    -
    -
    - -

    This is the complete list of members for fplot_core::z_axis, including all inherited members.

    - - - - - - - - - - - - - - - - - -
    get_autoscale=> pa_get_autoscalefplot_core::plot_axis
    get_command_string=> pa_get_cmd_stringfplot_core::plot_axis
    get_id_string=> za_get_idfplot_core::z_axis
    get_is_log_scaled=> pa_get_log_scalefplot_core::plot_axis
    get_limits=> pa_get_axis_limitsfplot_core::plot_axis
    get_title=> pa_get_titlefplot_core::plot_axis
    get_zero_axis=> pa_get_zero_axisfplot_core::plot_axis
    get_zero_axis_line_width=> pa_get_zero_axis_widthfplot_core::plot_axis
    is_title_defined=> pa_has_titlefplot_core::plot_axis
    m_idfplot_core::z_axisprivate
    set_autoscale=> pa_set_autoscalefplot_core::plot_axis
    set_is_log_scaled=> pa_set_log_scalefplot_core::plot_axis
    set_limits=> pa_set_axis_limitsfplot_core::plot_axis
    set_title=> pa_set_titlefplot_core::plot_axis
    set_zero_axis=> pa_set_zero_axisfplot_core::plot_axis
    set_zero_axis_line_width=> pa_set_zero_axis_widthfplot_core::plot_axis
    -
    - - - - diff --git a/docs/html/vector_plot_1.png b/docs/html/vector_plot_1.png deleted file mode 100644 index e8dc4ac7ff3f1125d32bd9d47f98b35afa0c6eb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92789 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

    |StW);21)-9P5Q?!x$d*b(WO;A@ z*9TwDIdjf=p6A^6_1w#K9UFW~qwgPLsMk6vlxOiKMi~hAELOkK&zh+3&)2;8-_3#U;{(o2I z@iiHDN?j5{5Up-e@kW?uI9Q=XibFbqY7fx30z1FkDFWLfb;uDKAShIE^)&-I=?+ek>`Hpn&mf$ z(B?IpX7p3_4{z)(?5(2899x#KcObfBUQ{wdZ~hI1a#+ZKtlfCmo;TwOA#rAo8G}At z->w+jg|x>Qk<-<9*0O-uF$C+F@WCtR>j|3K^%)G|S; zMT4LB(a%O%T7g8CHj!c#Ck|(#@z?-`YD0i4~yP1a70`f6a;78!)ggWlSfo`QFykHE@tqx zF}@*OQj(z5p89Nk$$2+yRbNH|gUjE4GDn>az1zONzA;!`135nB$B{l4lo9G9m4-$hxQ z{?GpYQ-kRF`MRmiU!zmKu_Dj*;Lk{&JPB>oEG5OG{U-wY-W3CwFAn9ZTX!34cuq211$CGfXz=I7a~^bY>QkRPe7M%k$DoYLDlm zB3ahGnOWZA+#~LjR_WMKK(rr|97^+n0eBgR9}b@Scrn}NhHm|G)`}G(-p=9UyZehD zjsnSRrnbyTK3SA?57;~J#|#IjZmd`b{?I0sh2#>cnS=Fs5W@nni$>$9%&3UGyef(S zG^^Jyi5>eRhcLpyUBknsR!6$6??RsY=6K*} zn0C8=9eTUR#=i-x;ch_|OU$E;O@dONDN3m1<-ri*&ZiPQT)?ob^5ajty`%H_CQjdy z+fC#h&79aV)kc6$YKEFe`udxO_O1UrKcqv=Uq-G)`}+Q;$!TTPuWOEH5aZ0JoK&`3nvW;8mMCtoNh;Hgddr&2ZKfF#FIxnw0f~gW@YC zYn!f_e)vJf_@HQr_CYQwsiC{KR@BzkSMFFzk8(GOs7h-H&ke|E2%jqbdPlFbvY;#? z!jRM1`HY*vp~-#aeEaqUpGF}KcGn==DBU+UwA-^R@86eo{7G`Lc$1LkX~frA*+F#J z%dz-YezC`PZR36FG*BolTnJooPgj4_(>wJIv^gp-+IlEXj1#^zFds_kS@Cc=IoX_% z%f2>hc|zou4v`e?(tJOZ&Z-^@_o?(xA22C?gr{bGyw){;4Hsh0LFPsT*yc-Fgj zrg_rRoM2NS)A)Maa#?su|_V~d;(?gS*7cXu| zWo0o{<6-0$=-CKSl&hyFoghj|k`2qlurH6xV|4ol`3H@)0u zeJszOdMTtr&F?24O9+i7{k#6du=aAZ`$e*h;aOCUTXIMNCrHH=rMvv&wyEe)Gq@C@-(pmI$!n z`4P~p{5ds@#=7nUTeHR!JSZH_r-*1n+_Sz`nIb7G;N;ZxArp6nZdPD-%7jYwo7&ym zbJxNc7>vP~zpz@Ev<2}yM|~)sO8-)4CLjQwufMOeE2r-3x6Grtb{{_#FAfLcT*I!s zbgorUONxnQl_W&L)PREqxh&y>Q_%a?CGAYlpPomkxR|2RcJ`P-hT+M?#44X`vs3M4 z><>j{ggSfg%8HPnfuWnL{^iT#lO|AIKvCe@PB?+^|DjxxUQ?3L633|14GnQSZ=imm zGhL(QD66y}eEYkO$zTDkf8mGEgOdV(m7?55`p?_S3H|4%HMpBoCMhXUWbk6cTwIgr zsT7Yk*j(Y)*5T2t3w|gqGu_Mu>2F8J&elXI_UK`3Gm|B~ID0<^8rh1S{iQVg%F4j| zDd@2O-c}cl3*y<;7*}KDuQ4%Ua{{rlnv~}r`|Q#G((oht95OO|K|#Pb$+PotPc+FA z`j7baC`KB1JP%*~pIJp*PpfuM55WSpPtQtYQ=G*fSdbavKTf~7zIdcAD3zJRDkF5? zec2o)Eu*NH9aRMi!f1>vj5BA~=jJd8i2&F55i;PMd<(|LdOQ$FHa+s* zm8p{_9;_`Pp>Qx3C>%Nd&e%f&AD{YH6N)!XdaJ92L_tZ+W^+SGK>xsjhzuSyswFsr zi`-(+I`kYS>|zHGH8&3U{;np^Y?owYXt1Qjh9m{WRRSX+y5dSCFWB1RsM zu(P)b)PW}m(DI*gn~D)d89xl$de_(S;zGg@T1YfEx^~UY!;F`=r&cvy(vrq)8}NiR z`wlch^fo;xtL&ywI}o3WO;HgH@PE4}a8^a;EkRNeP!Atp`myS2oR{eO#`8vIwS}>g z@Y@O8O%n^kgE9J6nKBudTzy)B1g%d4|;m6NOziuJkk#uuCP?Bx=aMAdz ziOHkKfH5g-9DufjeOw7EBijtRQg`KzjxN3u%yqc5^f~j)sKB1U)K$TLYEUk*qB17} zDW-K-&Vp`}1Mw@WNHZDBR{Op)eV$N$p8LPR8ifG`&D56o?wAG#2be8hUhuJ&Sr#uN zlarH&zkRuh@6Mk_`s~_u^(qrcePWnzqzb5GenDF6m%UnJOPw5fZ9XU0AM5>WOV|x4 zv(QFJfU(RG79WC+dx87T-A1NBjuJE?r0UrHP@AZe4oT*Y+m&CIm2 z(*qaj)7>6zqQ4i^t5-s|;XH)^g2wYYk&-IakF6?LrW>xWqR|N=UhNIWc)Z$?jHFvW^^N>G#(I_>M)O$p1B3$w$mJeQpS}kRX?PT7 zO&xU2dyZ-WZmmWXvf~LAcR3@?d*bTqF9R`bH=1jA0s`h4hs$6w^U_luvoz< z&4Y@TCMtXF@e=&zZrIiEy_k#thc0|}^^seH`p@*F++D@8%~$=L=H#){$T1%-aSrf2 zDIqq=Ov)FQujRGOqt$m5a8X=t$T0?ds>m@8L98cHs2IJncw}R9AWQOT1XJxBX3E>9 zOgTOK#i!**x#gNjT994Nb7zyICv1`#rP%={acJN>_dpzOkTVNa8M4|mU z5HMfC$zDp3Tl+0+F1K5B&ue=TnDrVS!LP9LWjQ)j?b`NfYZ6Wx#{8_VV8s<9;OL9( zUfbKqRW^InUYy#UIGRL8(&kfd!`S7-SIkW(UScv~YzN;|8EN*h57FicjazRe*T1yb zs*&sXAbYbuY^gnX@)o))^ni_=#zoH*upD5lkU6}~x4-;U7Yy*pHO_k%LMIH3D>0IC z!YbwaNYGo`;=1+BzLdxMmqaic{Iwh%7u^l#Z#Ql}-gf-D=hB<;xKF z>?1@sk#z%Ln}ZbvL&MRSPe-GWw59+AxDc3Bu&g2Qu(T#JRuTcu7*3+iBeup94#sge aZf;BNY_H=gjKLt_&&wvCx!V%zq~bKdj*gj4-t_tjVL)vK#& z-FH>3>Ig-7Nq86>7!VK;cxfpyWe^as-yk5MML)s5uP}IlkAMF_8UZB5K)(Jv^14ft zKtPBJ7s*ZK* zuIGsVh>9dI^#97p7skf4-S7W7zX+%3!}-6$2`cxSo$Wud1Iqxhw)juhf3Sfr&HX2B z&=z1-`TvO{>f8@a(f?$RA`iOme}<70LN$c{Phv8E|9>8k$VwfPJdL5Tz|Jk`d$N&z z4>4-`y17sLub3(CZDwtz-_zT3qx`ZuO!yOMzYA%KLI=gZ+Lc#edga5G>Cxbpw8pVSW}suEv|{o{i1d zwyPEdV*J6f@mH#3V_R3g=T%m=t3y6Bu;DY)I0C|c#dcdvgDtgPSoZ&8m`K;-{yOJl zbvinhAR-A#d8Ylrg>rVJ`FLp7= zku3fPcI0RTw>sZZ6l>y`3gY8%q67IHhjp-fUG(@%InllMWq@U?- z9?YNs;T_n5u(T-pPq8Pcl*t2RL)=?hXhO#wsuP-(aaR{yC2hkDVc*u2QRA=FU~b*! zZ8lOGFtF!*T)7nCYWKpY%KZG^Rd|pF?}d<_G4b4P;P+y1mq;AH()Z?uJSBIg6%%y5x^1UGtp9uKi3PKv=#tK_>>J;DQYsX<^Z3dF>( z=NKe@2Jk5k6VmcrXII=4FzhnVS+Byg;4SYz*G1Vh=b@%!%45G>juAo0+mzsAbdn0T z{^5F*eo0y|Sj4PlNPIxKn{9q9LxnH(dVKNm%;FiWR2fR<^i`Ss5l`oJYNy65O>hG> z*KT?JejOjNm(H7>9Di8qTt{MbbKwUFpZV%yPb7U$)WNZ`fqKe_RjCSe_T1M~#R@}B z@t^_&V|2GZDYBm@VLqT5{g4-i1MuT0?@KwPL9FV6yThKBdp%CK~Dy6cQzNIX}?u*Xk97Eh-l4UKA zXZ%o-ucn;ettixb5zPPmS%Fz~s#LI?U`4O^<66@Fx0xI)_N(iFon|y06s0DTd93XP zMDq@j4D|XE4i1DOnyE0h+JjHR9l~wnr})9AXZzO_=ArKWst)vjD7H@Iz?URvre5q! z1x|=>DX*xho-GNkh;~r6a=F_uoc;Qm=hE+ungWZHX2})AjTJ|4&y3m;2Cc0-)>Y{8 z$8dnL4FmLjj=uO4ybZhW10RE^HvqFJacg}^7zt00 zMN2Dt#*5Xh9~1+fXfZ;1=gf*PgVp38OfB_~9!c$vO52Jst78qN@oMX3s15#Pg8{X1 zB|C5#{;uAVIfM?u4#F~b#DrKrqpL7Kx|EFyMh7rIFz6BmL3hX;!7>;i7W^YhoNsn3m61S;!GCu$~5y_N;L0|`D87o zFu9OA&^VrO1qi{7TIx{FDmn_p8u?~n`MXe#v+e!pQu0Eo3y=t@hAbG!9!mggVcdqw zROG>YU|L5tKM+FkMp<=BQP6hOC{EPKzljr7O1_#bt0?`3716!N{p1+W@zp3(%_x;E zI+plWDQRJLlBF|lr6rZs>em`#N2~-!C0`a-m%5PTX|gj#zXC1f)6VcA&bDi2_Atd8 z0uuLxOQDMG=D=6+s^Q|GVyfy}Ho8(zx;sr@MpFl(2;T^s?vZ&Dyuj8RGF(^LKP;Z= zA)%oX3IFj?|Ml&Z>~7Qaba+kffQH&#B_n-?+pd#wSFDmPKQ^f}OJRm$Pk|9-^ox}P z(PH>p?4%&-IiXNj5&8jxX8Q4q01jxyy~kZ6nzvm| z&n$(OdUhV(`KpHbXceaYmn<~ZtwyfP!wIJwbrTCQ`(kJCl zOc5H4<8zLo((O@zA%+Gd3V)JzW0|STM-RVH`x`8D*8~kOqBhC2q2NUJHGd>x`nF@b z^1de02RCRschR;al`Q0oP3*AN5&n`*h*w(|tTqybDdPnNjXnm(4uedgylN<~6n zhN}ab{LDR`gXQYAcFme?k5En8Q@@PAbiX_-+2ACr>hQ_ADC^0i1NWF_gA~?-*vl?O zO}su`k^(q0nW$Ivuw&K;=wUk8zMbhtVK0u#YnHT+cP*#!pVA%N1&``E&FAJjTe1`T zi5o)HwXbW(Ggx%_7^O7Te^a55gbd{DL9>xU|3YISCwrnt~DG9Ws(tvCS~ zp_DNZQV`b`M$^`n&GAz00!z+bt(7_ns%^lGs)p&dO^O)>-+hap{h5O z^hx`0QyiEN5bx1V<^8eD?&3e}y^L2Yw2;F<2KfJMq99tzRD!!GQjew?IbgEiY^Qo56lV8fj@eR zTm)4|VxM?RyELqNs%5gSg28#{CJ<%&lUW!GVZKUPdQ%e02QHWBDj%+QUSXwKR)BZ# zXr50usIa^IWO5_L(@GEnDnR1%cm)5SQ3{TDfw*uQZJee&h z_ROnnOyxFP>W3GZm0$VUh)P?8+%T!pdTdiglHNhfYtZGdd7_WkB0W*43+(?W9`ikSkg67>H}-GG|J{Lsm=ITHr&-90Jz-G@GVvb5aiw$G13^JlM7M`z;e-!>_FhNl5x}X?VLxZe298 z6|%PEtxNHrYqlOK=`KInJB^KHa>#wquw%}Ehxi+NE92&~WNUdyc88+npFGttd3jpJ(s< z|214q*}x&y;f1O3k0%CM6SuBUVUm}}00Kcls@4`7=5K&#=870h1*lDB6+qABN4 zMLBBMRu$kXSzZRF5O9G5L|Y;NIr1C9ERAxrJeeis1PUy$Sq#r=6D*2b+;Gu(?r|hp zrZp+=S-ML$D1)q>J*ii9)29u#`@Yt5=tDSFbZ4_q7e;V>$W5Gq=TRoBEiCvLkvR_I zxwgNa7jiYag_fkJO9kriR?9=3e6$KI_K4`R(Z^$`wm+%18Tr%u=Ndh5U%GIzVbccb zYPRv@mEmHq%KuCR33L}wRgx1=UaW8FAK|hJYJ)EP;1BkwXQb*a&xV9`=$YnbRWGYe z+@Jst?)w}F(vpY%a=We6zo&8QOl;OJ$sKU^I`lB~-A~yJcv$&04BdE&W>EK2eze|> z@$9MoiOij2Z=ah%caq=wHs71}Fs9h;Kv_?GZ%I-qS@4@*bN-pZ;o!6q9nCa)f&Xsh zeAQmT*)EIR!Aq%8{+lbP;84!|aLRP;2L=wpz@47h_s@kw!&LKS7rcxko;hoX@nFrsg$6e+G++zO~L{?7o)UixwzF<+>6sJ8<=ub$Ma%eZDcvhAEG;Qvgw?JCTa*ob0Mko78!06PR z3r9$$uAe&GZR0|{e>rml_ow9y=C~}tP>SdZ0{u#|g~&dk0rJdU_59MVKq)XrkYRBw zm)B{j9Y%$faMxx3uZ#VqYE~%R^7|(YZ;-_SO-#aE7OfkDu&plU6iYwkvHEt$$sALV z2|fp7KlGz6zeZlg0JJ>~`lgzcI}>FjB1zf)EW6;)Z}DO3=M#@Ek~>_qJIz}Z--NlK zU;?8>P@KQ}0rGHdQM@>X`|Ym@R6IR_`m@2Ko_Ek)%}V`ikm5>i$x3Q^?EghUOZ|3~ zuXwbNjYI@TLg4|^@!N@%eS}Gj_FW@&`R9v^6sb6nEq{qug2p4f>*2}sQ8y*aG2%zB zn=8*{3_ryE+J#JbDz1eqZ9w%!cag{!vh?xIE5Y`1($P{?$7*{t9HVz^^zd%j8ryI> z{FtV*U%@ae4(WM8GDUhmh|xH(Vb!*N@Y?6>zhPx$xJnA@unPIfBI5mFLtf}J6diH?TZLt~MI(j2SIKzeIo$?bmS2e#EYDXL) zU1CCa%0Ox7%W1@@a5`B3a2eL7J5niZH9&5-$XpZLta&=d?K7ujuNLC6eucS>sycT- z%zx7nBqXlv1#M#1^W4qg7`Aeq-5w%Z1agqQvtdG5pLFfV7B=?&WoFvt zb_i-!`0#cRDU#!b_S>`7V+bpF#!Y6gA@<2mA zVVYxXY)&P7@#P=0_FFfC33k`fy;=?fgFkDjgNdY<2YwHmXrn2|9GN-C27z$m^wRP)OGSt+T8=r;ytkR*_h zEd3*vL@0o9&*K8ALa}b|!hAdAb;{<C>V~)uYlL*Rp9QV*Iz1cfS95}}8(m=QKsHZF=WA;%ze9TSTn&gb!TUl|_Kx>)Aeo@<|<^Nj|; z+QgV{dG4w}-|yW1=$gE=-Z==_h~0?&J8^qZr5Cj*-R^XM0r>j7KNTNNoDyGZi?BdZ z#$m&BS#>=80k4x>74C&lOd>;UY<*dm=$KFmPqq3Q^h-ShlM|hiuyj_j988$}1wmhK z`a)IiNk^L5nM?U4D^u>#j*T}Pros?(3qa!mz@+)%& z-{Tpys|&Ds&Bq}CLW}30j&ntAv*p1gS zY9&|dIiV!`CrF~2zVuF6cAfV>f%cE<3OJTv8lG6Se3{sd_Q?IT2wa7fdR2bdI8k^_ z5G}9|em;2XJpY`@?0{cV6jPGW0sJ%y|2%|d;TWTtM*F#V)zIWUR2W8s*?FHyGU7aQyU5ckS*sY9KC<{p>Rvv|+d>)~PlzahQ&*1?>gP*R-_ca$17Q z7R>$d^i6}z4@mi$RDgseBmvoM&1&*fr4-}A-wSwM5sa2HD2KYo^kY};nS>g`p`?_z zM(?ghqt*nogI^J?c+7N8M(Av90iqh(0h@TBu>bvy_TK}YF!kAF-ry7KEWpO_jfo=k zR*#hr-b~KTVboC@n64jYMlg9DwWn1N$;hb9Mp^_tor$s#j4@rN`F#2wm0IsWEr+wv z20EQF*9Q7=%SL^hw(JS@ z0lAsS@D*D>u+^~X4865)qlTK1q@Sub0L&TBXWOs`^XUky3QW{S_NG89r&G@@Czp|l zJ3T&2j!-q-KScTnTPZ{BtDv^iWr#>_E&8^*u0JPqC7CGzlxMQMb;eYErKhj(c zG3S9@EtO=9qKYRf|KyeP5PQrW9jIS(erWSl(S}rMCOe}qqapMizb-9P1S8#tWHv|g z4q2%j(%+d9m)9q{#Odu3AH+j_m*x558OYTbcQDcbeTU=I3akCsDdin{EsqmbJ;kUX zXb&Q;BxceYBbM?BA$u+B0j@sCa_u8>?ztn4>-D@T6@xOukKf8f2T6#3cec0^W?y^r zPfJX5GyHSd*1Tz(sBk&KZZh}MI#0_~B)8BA+L!Y8Ux{OAj4Q)E<_=C{MM;8o)Ly>3 zu3HGV6PM@K#v=NkcX7A=J3>j4ucy535*q7t4YXOWi8-^4B^(5`u0T&9J^gVDl%PUk z?~oaA?0%bodvf_v=R*|Cq_Mi4qafk14dD#*JPm90=+Z7i3`)YB-9{;W+bP%w=*{1& z0lfiXR`u8Nm=F9r+vQ|9xam5vk=%*#bad}kRPo*=x{vrrc25tYrwz%; zR0eKL#}oJh!TcR0KA5h}v3;pej|h4%#MTm5?bY>YH$d6S-@%c!-QCz$+qK7YEj{GV zr!|!Sw@PI~L!fZ4O)bU?>dAoj>dy@Q+iq&1BJIE6AraEC-BW4ZHmis8WQLCzkcvZALx8;v{zaTi(A+dTaAv!$GDc-*RbQ^rl0=;TK4m4DCyt|Gq?P^xrLD^YF>lZ2>|?Rm za||L49<}|W@;nj+L$1UdHSq_QPJX+$*`ve3UvwU?eaye5o->v?`^5n&Z2?49ziT6j zvvbQZd)SFMBE?&)BWi4NeJfNL|6~~_sFL-NELAvoBj8JejTyalA&4jn`&=O<>}7pX zVu+sX5zuk*=)>9_9!5ap|Mj63iuiPo(h3z>kVRcsfn)W({vhd|5zQ6uE(a1*8fuA+ z@jfLLWjMCgao{0ERIt2LY4oScMAv$&oEb%IbXy|$+>z&x*7u>W3w4R?;|@-QpFLVo zZG{DNX3t>jxSdqqeJqyab2o*q26=zId&EW%cl|5F>hupu(NOUik81^A_y4?ub|8Zb zg}j!NUZ07|>asIW445Z(xwDfq_JFgM_0fux;oK+LL>+z8;dYCt*Yl_c7l7>H9h$UO zMC-vG+pCVO-HFTIe{<5TGU-4dd%BPo+7Ya9hJNqLMfZ;Ao*;E+DI?X(*pG!T-SJ6S zEUo)4!jeXMQnN^B4(jP)|BXN%=EO%zxxlyNip_}gOeRzo5uJ^}UA`SdM!egipo&D% zlTc&--h3;BV=85-Lxz1)F7z9R(I$}8z|2J%GB;C_fp_}}TXQRqrw9I0hwxyh`p!qz zhFe+y!+&-WGapq?>Us2l@&}mHkGPiJnP9@Ip)B2MR{DkmyhcibY~07QComR*-?W!j zOyEo}xV3_Ty6`aw;Dtd{o22cl+(!3kB(pnW^H?1bPAQhqP8m8@aAP5k-BNk3An>)L zinMjd`*KX#q{E|e_vt_XyuUv;U+dyL+GRd&?-37{&t(OpFDlwS7@kpUdJ>v6u5GYE zgl#pRF*NjsbS<)$Z&FF+^}>iDD1>o%#2MZ5$g9qjsX>0h*2^(71?OYkL~U_;*1F`5 zm}&I1AsH1BIi1ZVoGXr!e6dGl17#r30QrLOVNPf=q3}3IniQ!?Sc2(IIp$5f4=ny; z*jIJC`VEa^&MBUi6bGLf5c+E9Dj&MMcXV z`9LQ03z@z=OwMJ*|5s-S`2gV1%C5VsTA7UNtmpQqLY;LXZKDX2CKS_Tq?yW}FRgU7 zr#E+y?C}b?EqNa%U1^FwlB_Sq%ei=JvL{04T|9rss6+L0c3U9r+^z@T9vT+?z9qe== zZGeb~DjgL~hRri`wOTH+ldI4ub|SY@Ewn;X3!L+&00FwGUzu-G4D4b3OG#{le+lW`sREhv}BdF31gr4iGaejB#X}OO*SLA@z{^*DpH6R~! z1;7ZR27LOk2Kn&=)I3vB7&imrFoSq*4KYXWtx5~WrC#l&?x79r8GX7npJm(#xc|2o z00nU~p?BM?gwS-j^8A`+#v0yGVDM3X-51P0uAn>1(o*tt*&ZF^P)%*kg#=ezX(mlc zt@(SKo{H5hdSES0iTsh$*b_~U)u&{mk9|@sC?H9_Bsq7Mt4jB^4E;(tZZlb%dU|L4^`s7g!-* zv?$oFsovm#PFAIaS7mD1g9M-Ib`&^l$mz3#i*#XECV!`4qDrvrn0E2Q zN-$ukt)TZe@K>z>vSm~WuzGu>qvOiJ5nBl7%rDh+r8GOxZ$5Jlg;Vl>XMP(kKW1K1%W6h1m1fpOdx*xd$P1b@7@b8;)(cW?x0B>6&4|@gAaoI9jEEk!5jA^Y_mJOZmu63va!NZ{DxNDYq;2dZj;4RGJr$8J)zzsyZ7fqz zNZc%N@I!uYj#^=>scC)3MhzyXcdE6c-{BgAg@MRn*z?uspl3`?az13`wF;PhR$)kl z!r4OEkl&5+%}&_u<66Zu?CD8aVLZ(c3?>A6lJw0}n*Wy$r_>6Wx?iGn-i{o$rvGUC+q-C!->9b<)>S-<4EP6MgzdCP7mBKy8nmqrbFU4BA9;MLFGRHx~9gSKYek#O4nCXCKZD~D<{qYK4`Op z=$^G4YPy}DU}uR@23K{O%F0~6+Va`Ef2g^AGm=WlSk#oxXsv#WWFb`>Nz{&xhLy;r zv~H;r_$amuSgxEKj+~sER)6A0&x3Q`%Fx!9Fg099NI+;oknUXmkS92JMsJ*7o-F~x zat;2`P%7!i9y4y}02dZ0q-cC+13{O3x9fpx)#*$+YJRJPmuoNxZ8RRk%t6zHXrl90 zK%scSH3_xG?Fi)TMAZ$-ovGuCti(|Ki7z#qF}!7*THi^LOy6mVI`Dh*{&E7Je%&70 zhdlsd@@1JRnm{MWtnv9}V=R3HIN6jH->BLQ_LObj$9>4YXCdCV9Nvp4*dtSm$IB6l zABA;K!%K_aY0_b341m@4l|S(2x0D`ODAqWfMMQw_4(NP7%7=EKp8xS&yFcCEbUu`1 z4A50%NL+&KeK>|40(wZSS~10M8%prq)m~e%Z&n2;#I96HZP!Z)R7`3jM$ep)kt1VJ z?Cgk10yMF9c2Ecvf*{%KYgB8d*$ob6on;h3<}?3BOZ7*zx-WfROcY7Wl*+doI0U3P zMhnV3O-xzHsUh0jtN!wVS+k+55%ShJkeW8R!&VP#q>kLm$(NhKH|=W#Rw+5257WXs z=Xj1pilE!aZiya%S-mzUjaHRuIF57{W!}GIOl@3JAg`+85Nvk|QLME06onTkPDj;s zmMMn+(M#JDu9jY?XMs_x4Qh>sI6`I0uBQ%nu>a`K8J=(PU*0nGHPdd-u zdQBgn1zy($L@dMOWd%YMPSq_H2a4Y{nCdA)Gsv$7*|Bc`B>@EmD8>x zyMGZI^14}3>jb#Ft6!r`4J!f4f6g`+83aepY_Fs8{<(qqCl-sGlH;c^W9QGZ! zwERXpAy^Y9tNsx#VUyH?{GGgW3)v)>T$B5PKYJxMtg@Ow((%ihptnJ5}DaPWi6J z^|EsLR)JZ%?vFMKEMJZDKiZNlz;xZXs*ho1{jgjG`Jry>-XOeGSQAaG0rKzQ>G5cWp_4?6ehUQ9V!>fetgSl!6?1s{n>%a)wSMCm*|=qk1yRq4xWrU zrij=Qi5T5{c<6jJT5_g1qhZR1XN8`1Aw?q6*K1WoS?;C%@7Ms5zliTHdiU&A7uB{4 zcVxl&oi}(H$Fs@gJEsuL_QW_$HU5pLv9O9WSmD5tHBw`w(YQQ&`#{nLqZ77g|3edk z@u=#e>kviZe3Bq`dcefc6Y8}yR4f}Mr*2+x$C}ZF27GWeM@F5P5Wjn(k%FriM^kOH zyDzX(wsJU}#>Y1xP2s3!%4XqC&lwVZ#oBOGYjaiB1qHFiaLE!4=G^Lh7(kz%VBWts zWb(NpeT=YV+kc!w-|^wKYfuuEXS#AtP39%6v~c&iI2q-1ko-p#heH(-fthb%)?pN% zr}fgVRg>v$_lfw(%*l^<`ZeDF&I$_KV6KrIabr68oUA@5P)a7XS&0=SDMyg`YiqyA~l{;7{t{dD~Io$Qu)syB-(>F0-Ywsw< zA5nl1oLFsz15A*#&&&fmRoEItzI4$Rcl0_ zLV0woDoQi!&n-n2{U=0+PMqXU@wKI1Ae@cNcDq9bRz#hlqtOCu0|g=G&n|7BU`rj~ zpCIDuxihSeh}?p@4mX6?Wn-;g-TF9zQT(UHLR4Sxxz^G*HI^)z(i!JtxK4%nJe)m( z0!tNuSnw$Y?T;T+c3A-OPV~$+{lfFyy8c6^Zn4;2V|?7?!(gVROzrF97sM zcKyoSY`QH4l7?+h?kUGbxnIEkQmSYi{p*%K*tOvi7)a~Chic=2Gsd0hJ}ns$RoGdM zFS$BYFlbM&#s%&*u*vQh#-*NZbWV&V3^(28e&-`g-=+<&{m-y>oZ#=elb@YAyl%7@l((gT~i@kR~NCa}(S`+`6S-RhPAavr` z3A~|<|7~Artth*5qyw}WOC#6?i;aqomnaav%ljLbGBuXM^b&4*yT9Z zd}!wxBy(|_RAP8pz`8B3C8VIHO9-bC@bB-@KnECi{Jl0HsjcN{&9aFS^NGXHMWb~0 zfGd$>{Q!(k?o8n{CmXw?k)c-ZdD>%V38lShHeD%+SdcfIW994zL?Z`$v*y)1C|T~T zES}kZ)^ma3nj|sZJ`1wN(2emUQqOXO{8>~f0BYFaM>(ky-C9-EKZ$7~$SrzA_fi>% z-`-cv1boLNM_N7b1_mOVYlc_5j2DYxd z!Eet^YoVExeM*fTYy^#GuY!_QN$oYgOAm}RPqVb|_tk+G$>=R;S}0`H2``K8HA%w6 zyDlB{X!NQI*tc5b6Np7KVaLjugw z(_c!MD5wX0psqV2uKTK`ew}q|)4%@FDu~PUbi%`{`TF2dBo#UuA0Y~sajeDYen2wm z9IT6To_OyLaY=j7zFp^#O$(+Z!*O!gnv4Z?7Mqsg0g#co)5$^&g0bINH@^I3Dntnc z$!!qJvG~PK`hHv3mW%eGCrMv0Y729~hS`t7 z)(VlZKcv>V_B^i|#Wh7<4u4Ht(6AruTyJvtxMIVdAlnWfz=!OR^(6xxH6v z?GZ!j?pEgR4)AmbxY}5|JxFT_4?ma0Cbpuj7a#|o5EvMx%HmVGo63ZSbBSe>FuR&O zxk=BYee34d*V1TOrk6#wru(F)h$e=IWby-1j=3Le;bPSlSr?4gRO?oAGK00na#}pssZVeC1A`@ku`nY#^mHuS-)NqOQkI8d~g`c2{`BhK?+hsGae@$BHBKT)&=}@r=k7GyWJZ1-s{$N z4dN9u8ezT1S==fgAMWe|`ew80-&WZMku=OJ)a4!>ikJxw#}eq@>LmPkdj9y#hKPu(_rSYqGD@RdcX;H8n3 zG^`kJsG2Jz#jul=3tjCE{W?*U#AE2*2RI*!2|T7##=Jv;e|PdFkKnkV>uPb5T=l}_ z^oGp+XpBG6=elbxp7*@~b&CU)+rD1ekjS)U689HAd%+fWYMm=fUi3US3*N z2VIS=v#{}fCLrEmC^sqKNjq3v`XQ&lp8gZR=v{AjSvWaW1U5eeYfUEG`#>z`buZEM z*vaxfp^BSYV`11o5{p8nFpjK0u~$1vR02Px19yM6(vIQu(YXG)L3M*xuw&8y3!^le zhg{Bmf>_~Asl6&TRU6i1$V_^gIfJnXaBUO;xGQT@N$Fs0E33UBE`JLg+MK)U7e!Gv z+2J|i*QR+)$yYge@_l)e(4s^0R;#C@{X@Sm(oyt~dMG&7bw=%&I4_RCPc(`$bcpuA zz@*tv)~vci-9biPLh`EWS}>t(NGwcc@M=iUh>xy6|cM;ibj2k&tTiMH@l4- zqV4zR<^W6;w1ZaTlk4hT?R$iLDI83KuRof48JA>}%7VAl$W$PuKzy~_K@#qwVW-L= zK^o4T=^Rgl>}?$wr)E|IxA>+24T06j%qJ$-cqoIUCOpdSVT#4CWSXnVWX1Z!Hgmxhnizq^ zN(jE3H`L-23hbs6?UFGbXPWQB_nZXX10dM1ORA% z27KP5!yc6Ty(}2%d!4*@UU|*+`O~!qgVf>*>$}Eet+wY4dTxa4EW&<^fJV!d12~TX-c{@6{#YZW-_e9tuBcPaQlmXd$3ujtRRu_oyicP)BGayfynqb zOsWELDDmT>9Bb=z2;z{CsWoQA-F9Sw(K zO|n2ncqr*HBp{1H!R<;Cb%6j0HvZ7-h46Q0pAqA&-&ZocyUcXdu2EbMDKpOt>Z;R6 z86zx(^g)!9u5wQ*EdTnlt7msG2U_Xb-q=+9k{US=iG2n+-ML~6&R1u6s7{;_STr1i zBoLC!6#m?7&uFdVueRK8ds4SuW_$31jR{rcB5zwT+RSZPCgo&K9ms9k2gF;O7srx z;~e@N^`RVg{;TWE=~ahZI3ttXj=94zK>5>@8ARo(bWMkpF9JPqB;s7?Wi>I+j(41YiP}x3TFs`j2c^2#l8ts{m?EUY!e1Q z^A|0VOSMnl94s2)|0XeRf2~jjWKrvzGa~-nq+kCR&-&OZVMHx zO^NsZ#}!Pb0#QX7>A`%}?%9l*n=ZU3++jWhFHOo)A84mQndQeR4x=R|V zvddKcZJL(IWEg3FDg(C%JN(|Mk1by7{fdT3eqz1T(fQbFDd8Ml&l3qiz`O0-)kF?6bG+O=?Y-hDQC;#Igpj5yRSH6 zoJ^iAwn9ANmrb>was`CuBKy*M9!1#z>>i}cpYq}K7%=&N+R3zxC%uvHyL0c~2yw-% zu?bL#k`A5M$MUEG2}s#n#_h?O)5P~z*xQ|fE(X-400H@2yA)t$@nPd_pX#as1~S!m z5EKybQoKAl$?aHh8UcUtT^rEq5`K+A@AV!kEuAwk^@rqTl?DGhLrPW?FI9gAs+B}8 zaV78Dh~WR?+_2s#F(U0lDE+zat0yTj7O{LsiEzO<**lq;_wORi>Msi+ullRbCoh;( zdjq!&WuIq3)jEW(rLblzHg!TnQRE8Dk0OTWxGp`Z=i+dW{qRqrg)7IiaEt`chT0k* zEb3)G8#7_}Pj$Zq>Bi~?d&w>rErtvKWJPzs-d_1MTn<@wEM>UR{k**7`1n8i-3taD z{kNB$*tH7v?!F?`b6OHzq`#ExV9dmMb315!F{CnA8~8^GCqwiT{+*c)5i|1^G)SgI zo>4M((N*=_i%P%uIbtt-{9bofWbj}TKIY*l{l;Cjp49eHz-up7blHo8s61}?8piNm<- zN3$?v|47&T(uR7R{z$gGj4cJ?=n60OkitK%mdePoJ09k8(vc)OYAr!YcUV8M-E*F7 zF&m8BU3H<}-A8Sg&gMOZ^@M+5XBnmR~i+e$gw-@+94|5mb zCoT!I^fFXE`>Yy>mV`x>zQ$_=^`_*?F2GnWXufg{mq*gY#gD)iKhba>TRDH9YqY$R zv%L3#pTuW*AFGs^6h|b5BG72-dlf5&*(a(|*u+;{O-^O+UiUFI^Oy`km)FZL>7$K% zO7eEz=pQ(3T*y|B#yiBuluVXXzZ%u+%9{6aFzay1n0DF`J zbCQJ@$-Bmc7YpjwzS9&Si@5Fb3^vmC`G!umfF3+zT710C3H(n72L1PCFDVAfNcT8A z&>5Z)-ZryeB^$MA_xQ9L8`9?LLQCZBL?oDG#u-D9<1<35IU2vwR~Mvua_Q7&$r0j% z{X2W#Pb?e0l+w^jRe1iUkuvNowmd(Bqto&z^ThF9$n>%@W#2gGftajmBD@Ew637a;vFf5G0;{CFD=uNwQ;(M4(yTh4D2=)|iH!n{+SO zg~c^MvjWEQZCY95O%m*%01^qX@}^v-f2hkl^#tJ4K52)q^RENwsMk9aLRJ}2-DG0y z_eU3RRoYzMB>v4l9G5f{wJsoGv+2o?c&Zi=na_-^x1Z(-TZO>PxLstSQk3<6)f{HS zvHc3Hpqe2T{bS<3tI^`qpbEE9wzD#fQIrsdg z3oGjd?D{(W(P;5H!WxoTef{mjCudchT}kxVXlLc9ZK|Tz-ZD*o(|E%2_~L_23WeBn zziMvkIO@*|Qm)P+IZn6jTC=u>maLHm*IM=(8Qy|%Z!mrZUiJYpt?wc&E4{r_LdP$0 zfD?jtXBcxlWy$5X(^^x9lj?Ntx@5nmEjdYt%XCk4SJ9>4- zeDwJk36Zl%OPu10Vk0&;Ag5W&Rd58QW-2R#hEkz|Ql6{!3z$yT-`{aK{UEQVZllWb z9*u?OTd@(JvD#bvdC}_ougTFrX7Hw~11B?y8*yQL0}}iN>6s^Wd`A}kmst1t(0@sM zZaQ{*kl5&aPh!O9rVzk!iy*acB!eg{laSv)^8n>wR~SbdaTTg%K3oOhnOAxJ+Cyv3soM6y{^X`$elK2#t z+_8bNC;ezGBl*LehW>d8#8EG$8N$Y+gRkq|khP2LKn>NzkwA8n?V6E9tPMJbTPHny zHC3c4tw5%vn%=_qcMeoKHJ7H7h6FJpM;$%yqsB}g%w7`6;>OSKd|U3OlEj(lJW^M| zH|)`~Xy2`Ev2mswkU6$mS&;st6&fDPyB+m`jGKd4e3{aosI{7&=8Vp9o#$L@Juqib z%0q5p<>e^Y<)I@Hm15FyTn02&qNg@Wo$B4-#HsI030+n`}CyxU8KKr#Z-Xf@sASzitb@_ zZw(FP%Esdsu_y};ZSe1PInKMkl)KuL>2wnp9Kh{gdvkKA`<$2beSLbeTO6sZ60<^% z<*b_>cuwzhACi3);_2>7AH`0+Ql&VhsqqzCS6Wc}gZNyg^lvFFTIYtr<8GiOmJLg^ znlH0F+ArhK7K@p~zGtsm`)@WsZ=LxpOIv*}Vq}5T21~_h)pu#pbS89@%_~Dfp_5FX zdv>o{6J7WvZ$QY{!Qg*;0RR(rmz5&9BAm1?1cU3iUxUXm&F<xi$2oQ0!j6!#($B5K%2>c;} zB0?lY)X`(!BUpf|_wU~Ot!LUdJ1QzW8|XY^GTVOSc?f({B6A9&bKXUP<#aee`1r?K z20M*A3P)Ij%_6pUne$nxjbYO^Q#9zK3ItBy%$4ZSvbzN{@A8O7-I;PHkK+sKKFgml zANcr=vRNvx#{MRkF3^NHJl{8kd*XL|6wa4U2Wag|^qe)6iSn3xn&nMh9jk>C1q-zE z{T~3mKtjKl6L$vU~Lk$nB(%a%o-I8l1rw!e5s|6PzINfghf zt{&$Qa1Q=F1Ys@7w;rWE)jjj&+;BSGL9&0>%=(0Ug?<_wSDE@v=#*}c={ll+CuRe$ zf1!v93FBATuHv#Ulgrx9?cri?fi?Z6S1;J1Mrse)E{=9)l(5U{n+!=-6na!^%JJ2u zODjv4RunF*h%{5=XJRd>YdR?@=FS+&^6gaPt5*rmbv+- zb+n!(eF#|fa8bi#0zMl}dw(J?p$W&BBJZA7jWO_~bwiW1yclPr`bE5L+`L9?iYbjw z&F>%4uu%HfHq4jZ4|(|#TZ;U|l0<%2ZVxASdKnCNUtr)*^lrkq4m^3o`ZH|3fK5hk z#wO#c<@7YF*_$T8!8C6!>-Ds3DYa}#^X8Jbch=+9xpQQ2unll^mDDNxI69r=j{-m(lT_4qBK6eiC3ly|Rr;A{ z7uQZqeWnL{cr=MpeJMRTx$ym3O!}I4la~{0v9Z^S6{~#xx~5PDf9C&1~Wb@_pYR2)OGE_Q{XkNCL0|DMegbiLMdJ$D9P;W=rN7_S6Xo zkRu{Qt`D`(>uNPZm=#j0-;G9zw-ejmk?WO9rrS-M%#$Y@CQQ)w>!)#bO^1Yq!2b~y zOJ#ET>A?R574l|XEhQf7$>)SlNl-Y4uCU`AXZ_Kttx>U(kd)pYTv!RV}CsfSfHX~wq{F0fwICcxQiWnnF&#_L!;Yl8rfVQQu~;Yb(XvtbiQ&az62(;}?jVfh73tHdWI7TRIjjAk>l zPI7oFC)H@o{2t5b+}wiHS%)8(W^Yl=7^MjCkcy=&kBYhM@oP&;D|zoWPKnd&jjK3u zkTttf)(jdsQk6S*p&2tAy@CIJNRlMVXH!>qa|k#Ge+AZOJgH2PyD04~izf&0`+|NpaKHDu zwT0cZeBG7C<&wXB#>>z7eiujd7zL?+4~6l0#4$B0lZmHK<;%Bh#{z_3wDd@&jB!^8 zi;z^3Py#5xUB!+@a?{EQw&Bc~#u+mV&d!n$qHkZP@#D3nO8r%@WUOyETNnMKl$Db*c)y6H)OW<16UN2OiL0Y2ohQQwM;6RJ&$4S6twfq|R?(_B zyFSd~+Kg6)?`PdjY%+jO&H4}NltBbuJZv&mCUGw;c|9I**0AYQI{c}1+=w^0=+I`L zFZyl(TlTVUJ7G_4rZ;+p(V)``vsw7~C|kGIv~KOxxUnX8?&ROYz8D6DF)J^Fa%IwM zG6bSKQ=L$+V>)mOxhJOHsJ=$6fR8Zm!CDQ)Ih;n)H4k}bu>^>srG^ik8J4!g6Vat_ zxR^gx-c#cYSTSv;-%A305N=pF_Yo_=|Ws6s0%0XQeLRTZHp$-`}ZmKPI;% zeJeIyN3;#mpOBYWcTwEgI2G9+T}Bk1fWtiK&yJm<_tQ&-CvBlbUgmbEda>jRe%u+z zlt+ZbqEFe-72Pbxj3J$9FN2knfnuM(@O>sdGE2z9s*o@Vx1VFnx>LHe;`())zkh;F zr&6I(QKyb-$`ozOmf04G<2XzfN`JzWSIH%kgolpv^C_3$HB23Zbv~Hho2gNdgZI!| z(5czekLIP3r1T%0mwNgfz-Z;Sc07*ay-gHyMLjoy-cSawWx(zEZ!gk}d-?_ko$tAyju}g%8dSOx0pB)Mwx*x(=cv@DkAzvkdQ} zn1MAGp+g#qY9_{x)Q=CyvT`Ge*15Sak$Qz(n6GcN)K}^{_K-Hk@O%}mUl9P((9qdM zj{ZV{a2g!LEzyJY)fimd_}uPczuT-?-ob;tx^;W&VfyccBuS!THg$F9-$=kY`+&0* zmS7Q>N7&M61_o{w`|71re{@^1ec63+wUzJ=7a8u{Ojnx2D&&45xUmR`7J3m=QJAw< zgg-1EQ~d;R6}=Phg3n)2j%1FusalJwfm?M=agk&6}?V`8#d#v$yPICVz+vQC^mpMHhi z=Y^`BppBr7klG6OF5>3nl;0=s1Gd=2x4xplY_a=}5JJp7DVQi0B<=`J_rduiL=;>i zCZ0^*8@=GNc#xGi_uA_s&v)X-#0ws_PqbL)kn%?GE74}I$U9VM`w4mqmygBFomsa! zby19+De83)F6D$vS&^%<&BdfFrWDPgm@%`h&76D_X_V}qR%oBm_j%! zPUvTeC9a~HMpTF=U?)*&pvXWiC{s8)+Yzuv^Tyr%jfY31B)wLvU;FxIDr1o;qN2o+ zV`AA#F?NDz`GF{2PH5bPF1K*<5NO4uFH_gI+Qd(Lg?A58Zm@9bAZR08JBcf)x92Ai zaL{YfXqjlfN<2+eH?qlM)y3p`sa_Vc5I=6M+!|}F>H-PCq3vZRK*2F><(R7F+W3Twd}{!=iQ zabxEpEm8~=|Yhk*Yga$L~a4a-A9-=XM36mE9q0c&}*f!0S;*B{)3j-S}tbpM3< zof-ZCAE(=EM$#Mt#_;qkai@*To#k+J8?(H?Qv`Ko({FTZN(msw$kLC8;lhd{ zMHEGfDDvmeFf`f`M7*Y82_y+)ieO_&!dc7WANkmR+t-x`PXh<;L&))DG((*ivn(Q$leRH_@(O#wm_$!Pm@} zGLdeqNLfwBx|=aq#45977m%nzQ_tG3;DqrL+wmF*3Sgk^*`@0r<`wwR0CXzyP zH5zi~;?Q2IRY|V%I))j)vEwXX_oGkK1d3X^pNd6!H%&Znl#vm;xfaI8?o`WArVLUL z@Tn*C+E1r4{O}%X$HL2mV9`asJIjg>XqP5dITKiH%saYSH&2I<^Mzs))rMrcu8nyUOB` z=?*0sxgF!RG~P`s73l=@>!1s&Ur`UIYaa5>WX@~KdT>HT!WyQYh&8l-&P@}sY5Uip zn|9y>t#^H_`zhFsqJsdeR_YaJ{Q=4+kD%q{%bR7(R(9uod2YbYIzwpCVpod4UZnx`UoQ*|MK|R^(1>yr_B{?G-+I?(H{ml>LnF z_F*ss)TQbT_RMFpJFb_wxrgJ94gzR2{7vj@HnVXv*RCTc?rm{#pm(#adGDQvlARYESA56_fxM;XMG7I*Nhk%8Cbl=CyRxE7hDEq#Mqs>Nk-{bP2 zw`1R{LDZeb>HA!n&FI#tP4g_-Hz<_R)2Z1OrIP!;o`-iUPz zd32ukEm^dN!nNo;2q7?rVH(BheU!S&EkkCVC{S!*<_$J1;qnC39!PHXX0sl4VEYBz z5Bz+AKen)4$D}xtxAyK~Y$%u0WnTcK%kTJbWeF9(=iW4|(EutHy#}$)&e&CZdwaBQ z{c3%B!j?J6fjx38;J*jYK1A0PkCAqTHWS-Q(qb=OHSEey?BLh$Sa->WbubOv(!Uc! z)9p2Ljp*-qQNS?1Gm_4Eog>$Hj*t)8PztXbJdeW+c;gbxgy1ms*Lyj7i!rSk(;6o= zKs2#mvamoz)zR)BXy3+Vn!R`)&e{zuUPjR(jQ*7G=X2Q)oim?}W%|@)9!lwRu9THj zo>gY{aaLYrRTtW(=afzh$<@2fuPr=m`6kq5FUKSMM9Yu@Bx3qC#0k}{OsgY5?_w~@_| zbm=;zGdOwh@FN*`dF1)PKILhfn2`5s~K2~#>z zX&g7xD0RHo38S7%$CRk1v34b2hVn4oUUd{J%k=9E6xh;!JCVE*+SxCye}r3hIC713 zDO8@kmk5nZ^w`B=p2Nv<1z0zfqm%IqqU;1#p1>yKj_U&P#hPzEXgrJPOl^@rhpk%; zhYlI9Trod+Vlx=hc@F)q(RUyfs}uN`Lwh)Lf{!{eVI1ym?ApqVFB9H%uVWa!f{wEo z@d3WyWX-;hU(fay zz!%*3=B?TH);;=;<(*FW^QKA`M&I2&M8Iu)1xdjqW4($)HMt-xLz+VWtOJIhTNSkhj}}j6cBCri^;WAzMYj zB0s*n$g`i?in|9KytSZ6dThtXjn(bb*Og2cZ{nD=nPazEK7bZ)DPMKnpRX5l>LO!5 zVPtt${%s9o770B+4 zaUyx=u94_X^bO#+IgLBIfT%KVK`4W6@^m@+AZn}!IDeAK!|}CCh4fav7$JdCd=DeXo(nMYukgubxAOFdQ+?CD06A+gsT1ADT6{YuM z7e;*WI$vzV|0!lGfJR9kcg{|um;++M4&uWPBX;k$v#b?Lr7XFqwXSt)OQS!PI(0yq zaTv~9`J91QaeT6!z}IZ-L1oACsYMv*caWEQwzQ|Xr=t(fx*L3UgfAK~x}HO4iO05! zj9g2Hn#}8k>)TkEXD;*IGH%^t>?aKFiSwVbPG7wezP^^@$1TT?TVi5F)28b8-cyer z9cwV)>?~=u%%AVlx35zsdfk5!uU_-?InTm*8NtifJbB8KFv4CC{*pIQM774P2Zt+C zFN2AN1#5FYZBFek8JMzMz)5U#u^z>C0c}mBVSMC;Jf7>hxGULPVVC)37sD+WQ~sGX zxC}ktx`?$3^~Z6dEOmC{SsS2PWo9p?{<}#vWxf7d(V~^ETyZLzP1%C}k&q-wWSpw& z?YcUYL%=!6UOa7zdw<;Q_r#c^*j}3UmvAj+SH5)#7mhH04-m%V0n}N>AH_4E*esG2 zin!R=N<*9{Pg3=*j27E@;<_R^_paA9B1stgvcyF zp}@nLQ(sc)Pbtsq_2SMQ%Z(eBTemE?Zdq>Juvjb@jk3i8pmuVSC0C_d+x`PFbDE-j zrk>$+d~aMyE=A-`3Gg#+RSbeIFl`Oo(>QNC_(?VoZ!U$dxcQccF^INh8AE zFydDpg|m7PbxJzg3OI9_=?e%9Ve|lo_QvTg#Sry+aqgV;*fGnoW0nUGY<26Znm1QB zZ?3LULlr-yO`1fXJ7*m?PW$DT&VMesZ#H62BtycPoQKg~=~oEnb#3}DXHpv)r2Y0a zA~zBcM@$Fm^+MI1kDVD4|E)kg;$A7rzu?}_wmMM?gGEZP!6g(G&F}SJewR;!c(Rs| zpJ{X!Bz|4O#nUX?oboKeW5y_5T?@^gosBpCPlF^$qJ1`XwKs==bCA6-oZ#gMirh)P z*6#NO<|yhfwktFn=}?lN4pXW!u$?7`*|3r`iuCgVXO*nbdLqv7aXr_KCrn$sO+SMH zoN>E~BH8tQoJWJ%{esxoG&Ecc&j7}&5-(eCrr<~-?PF6UaMf~nA`MDsJrZGIHh+KX zojVpkKeL~oB{0xhqJ*kqMOB3g>Y6n*wQ8yF-nF)GA7PQ5t+=|mDaL#%O&F(eamlRD zKjCvWS^4THn{V)ISDKW_x;`n~&Z}C{HjxptBw)WVdhDQHA(pk}$%`bZ%S=xsSmn#q zZ47VDln!VdcJ3ZK!_*&$jpOs7^z4Aj;f6LF*RLm#?)mf9a^;lqq}#Z$I<1(oudk(K zNoA2DZ(;Ucy=tmZL8I0FEo>cNrc`MJC2y4 zeDo0ivjiznSgnD(3>B}rNoEq>+wH|90LA}$RXgr8KI5v9EodJyFyb0+spFdO?3AAUDkd_z)fav z1O#F%@7LtLKBUQy1~}k|M&H3|Ibo4(&Iuc$v}nJ;X==(UGGaZ~MsvV~%}8>VK^HXN z(&|$Z+@`&Npds*hd31%+DY+?K$dUedqMV}IZfwp+kJ$~GhKfj`3Lv{1!>Q=4P8D(Go z(=?R>4gZHM9VW*|v(^=UJmm zFQ_UB$JjT89$V-SqkGfx72zsWKe4GPZ2?|Sxvjjk+2e`@y$y>J%{vjz+8?pe<9A-2 z;QAn%`lE1S@^JF`Fy_mYJ>P5D(z}0uubw@#_s0J@kR(ZT&Ze$*FB1no06f`WV`m;OBD`DGj_Jv_G|e;%G^dgK#dJ zIBQ^xCuHJ?76wccF|7t8DT7HBrEm*Kd+D*5zvkqRoU>rFCguiqGHX7aKe%E(w_?Rq z#fz&76;g)BNaq9i<1Q!f^58kn8q5|97L*Fs4x!gO964fKx-{1`X$m9|QXFabHoUbk-ao3qD!M(QAA^knRp|f%y3{lMeBH zTlzViDd^@)+V9|_a?EMOh1)FO%dXSpawBvbN@e;Fj^09-t%OHY!N#srC=}?8eB6vx zBh%JR#`pXA{s1$(P{@U!c5(a~Ho^93bj~>J`Sc}*OvcllsiSzmi9?R}urPVtxHw;5 ztEZ>bteLu5Gj)?DYA>%WT7LD_>+o=!r>6pNagj6{Nu`q9+!TPjyF#hN$w`Xe?d|EQ zlq8&;rQ^pHZ{Er$R3^r^)HR|l)B0$VxUiOGA^xLnRX)n2FB36UTS4&)+dYmSA87{WPy9Fi2@W7w$ zEw~hfDtVXQn>~A;&7E7}>{&c0(=B#CTFJRxn#A>bVR1>C2bE42%z^$9OTvR2dFMVpIMHpRNnVFmP z9nrRP#C3-Vgk4f2z--Zln{E^?n7%FckccrHILTu@7J*R9s!BJ?S6SFRD9HNwu{Av0 zR-k~gSTR)s9~V)XTs6-us`EjL%a4gQ@N5ZTk1Y=#SgTf5uUZxJBkiGphU)@vuW{C&pv-1-(>ZE3?^dqC={Gp zME#2CTfk;3doD70AI}1@Sg}}9DXCDH%k#7FC;#lrjr(jmipfHZ0j-AN?fGFyW=#Sf z^W+&#Q>&tGQV-b>YHq;YQxPIW{uV78NA}v9ZEp5mu{+iIIUS z{j-Ar03ZNKL_t*OXxV1NWDnDxjO_!OHVm#p z^B;)4$C<`7y^F?+PK_BfmiLpT=!DI7qg1KV+qb*a{8Jes|MAEn;J=6*0?sz*xpRjW zHF>DO-oF{Qi`TO$d?j^0;Il(;&fl|!+6S+BN!dxGBIs0>O*hC}Fuq_MZ7WiDAk&iC zy|(fGGip1r$QxrSN3`uSvGu?%`FRp7vUcv;Y4^h>fAuLP)7QJim%t(Hc}7euCLQW? z45^9_V6ljh5L-}?_3>j%P>?mAl^;L0zJ4tiEvhO|LQ}S=BA%Oz6;pln)tldcH%b!D z&WgNw6%!_S^y%XgZ#MlC@ai>(eA%*(1~r+Io^7f(viSr{c5^ob1O^j;PRmcD8Sp-& zw+1W(jVE(C08_FfpIoloS%Oc-iiC$RGkG=lL$TQsBFvpM)GdeaybNWiQ=RnkO|~6k z%K@G|qj>|4IwZmJ|AD9|e0*LS3@)Hjsp2%67$GdRYH8cH)irIZt6e)a&DsQC_^~~R zUCpTMn1-VfYeP2mr_!fX54F%X7=JTX0pOxwNG|5(2MFeQJqB!HPGhRe*uJM~d%iDE zLhx=JF~jM0nbUFhn~s#I+SBbvHUQkKjq?kP7h0rGgHh|aIUI!( zl@_pj6Ptf#vz^|1*f-yp0t1V$TJ>iJ@gEOKl0=_u>S}!s0q5Ya;U1mcX;^@<_Qisb zs^s||T`Rldm_YW{iTdbfRn7QcnD`#m63XX~Ly{OfFaFaj!un8sJ_pKEE2(LeOxrL@ zsQEcBPb7Osv}HT`{$!x$6C;&ey7}R}pK0Bg=_BzfZ1YGHYVs}1`RV^$G!HDdLuC> za<&9MUffxOXQuidCNsVl*nEIJN0DWWCahM96vS_Lved>u0j{orPEJylDy|xho1dS$ zTsf(4U#WL*Ntf{g{N~4uzQB_DbSdW0DT0Zv$HwinuPhg=_>eG5^4wFWV0&TScLg}c zrGCt~#IFVMzQyiCOq;-U3B^P1_NLVvUKvS8TtdN+>#J8c%9N@4@S!UA+qhr;OCU*-NI!kd z+jsR#4gu%juOW^b{=8q4M+)rSqcNL^`iVm4QaAXc54kEGt6vPL5r3`PIG z{iEsPNf=*z%l_k7tO-d70G%^im(#XchOO=dQFBm&IqRgMPC0ykOjfW;mw+EVr^T0q zzQSU|#fe$H8QXy@F@8CVc44&vxN5nun2NZ!Pemy5nh|Zm*Aw#4ZHPUZ&<24_ipldO{uIZ2)-~fTcIaVTQ z;03+XX#Y2HS8%5kh139Z_+>w5{$RNV^&%S9XK-!$UgpdoI>r)XNpC-%7U$ti8qG9h z1GkHiyDaYgasMRY>wx{7okRcg00G|;d5PLP`EDwPIHubPwm<6K+oe{m{A0#seKY@U z$RXgrh#UgWX56KtC(V3F<=M0mQW5VJIKOLG9C??+&FJ!QxN4;d%Niyml+PKAcL4@Z zPpUYXE=4IjlsPF|n*}|>F$vb?54t4TM?~B1h`7d*h)$t{3m~KYRy(wa)3lbjRhRES zlPrp0?SP-lP5+bvdDFR_Sj?`xoy{5-C*0hEl}agJK1K23s&eHt6)LEU7gv=ip(lM$VkwF~LeHp3=SaSUI8?=>Q0Fj*+z#jRiMtkSduyyqfAmoljf z*8|ybl6H02IXQK=sUQSD?PktKygdkbib~1)Npx~RZ*t~h=B^;l5Pv0jxN>P1rHf_V zFbUDo+`1*-yeS?&6hHi+`u|ice)^OR8^p?$LaU{3Uuob#DUbc^?$IMW3(?INjgsHq z#nXXb-$29lb-@+1LKADh_M(!K7lQ@jBPQp^YcUgox%ewxrtm8o+BAfB8K-CqP%h0kqmx9qH2V=&bKmVw2 z->UcT^Zz{e{QDtElE^ez;Vrsa@oyyH|Fs{)e;h^lDwJzK&>V;w6MieG&HpE z>C--|R(Xvb>)x@Wu1Xb6HnOh}goKD=$81ZNT80fXHEgKAdpG@+Z?%dq$0on}bj~dO zCNuWEc$Zp(adjqO19dB)b>jGf%zVOD8Nw-7NDig83LcpGJRCqm`h{t}`2E8EqSP%!&9f{8-0=9BedC#_ zLno!lJ8Z>zknI58!+5<9=O#oZtPLS4s6L2mD*zN4%FW`=1bhlory;vHrR>DDeto5f zN7S)ne`>(~@la;d@$ZDlL3ZPgX!}eoOwr#K;$-PKf-6+~T45UN4@U5seNAw>^T(atjetTSVzZ zBuR%H>D<)zyGmR~T#G;4#Ep9qmWkgBui9eNEb;th_Kih$BRpJg-`-HXc&u6-qtnHB zdd6zCF_IKhp+anEsGPR`n+e&-!qp+dHa6Xk;k zg^P<#qp^8;*?fKF4G%@$-^9+Ktow-&hT>x7E)j4=FM2-_T7RMS7u*)y7A|+hp6G;X z_e4-$(dvr08!qlm72a_oBB_U4!mo}fSVlM(5u`kth_VSa?l%$5FG8?lSWPM#owm9Dj;a+Yb|+hq>st<4Q!Edg;hWq~zx|Bs zdjTr8VbTx0Ni@G@nLZPEmc}^#k05Ve>CPS7|Bjj!;J9^%OGeoIGp#!aQrHlm(wnBdr!VxG|gbC64-Z%T4U)@m)&2G z%dxabRvXjT(d%ngjbq`6(6}L73AW`uL?oQ#IcThxg ztTm?_5VQhw1mM-PXYBd&rpJ%7Z{+?l&}7r`uS5<3XFpu2=}h?-tWEue`^T8BWAaN~ zUTqpTzCpImpnoVY*Kq`(Lc5qSrig~di(68B4} zpK}D=4m6`6fg&`RdYgBrY;Ho{M$~2Wh4Qm-Dpz-7FjBe&lYSsFnw>}3dXQ@Ex&IG% zdpvt4%9mFrsV(Ys%%1JEd9zb0A_;g*%bt9*n4POxw~#!!$?b{XVLr=Xy=vP@>J8(A z`W&810Y?JPB-Qjyj9kgCFPPZb(X6i_FL-Y}=k9QIIjvJmL1czME>XQb{sG)N$l&e? zr&}_e4_i9a{OD1+MGK3~CdH4EPA9Ecq5AH-|JSA8EK$8W^X5q^6-mBmy`CjYME|Dp z*2-LbNr&S^r4uQYjJo)ILA_4wHek)CVn$xV%d)HhRkXy&bVv*W=*YVt(X2aDTkzEd zRz>n8sRtL_ma%OXOLXXx-i!v~7RSe4bIMg!PR)oCVzR0Am?0%S1Tjvb>=QC;}H=Rkgxt_B127_!E zL<%{{czDyIemtX_7hs$kug+n>sj}OyM+%>$Y7&%1dxvsK@14LW%v!>MlUS@oMx#*R zs^jn)>R113L-S{G<%+y;q504uTeohib?dAKgK%|~_UzHV`>x%yYcTTNQkJb_%1A!# zpS3z;bQ~jo*G*xZ#>>a zG3k4bo?+=sTEAuHb6MuV0eQ|GTSSDIFhSY7x3Xwav)Rmn1FD7%9h!OX+!^=kmCe;v zp;iNEG?I&p0;pTp>F)@p+qzZs>LoN9jK*YRU7^6qi6zUV`xT|#A?$8OxlHq5_T!KS z#VYK!{P`KUVPrt!_F@}yTgKL;TmzoO@}e87fe4~padtuj1aiMW^}>lYVg_p!O^g_~Z za2hkrsfRv=W6u@E4-^<;zvF1(T0Z|CbE4(p;>^Z*bZGu(1|%)4RxxyFxT~w=?XB|k zRCszSt>*VDZ2E%g zj&XcEwjE;hEIxXlIpcA4OuRZC77Lp;*}nVE=H$efG0I-Ol<^ahZQJA;HKdXy9p(SN zeP3+d8mm?#grw0(vMi#b1&HIv3%vKgC4_FrJq+VBtTCz20;CZ_1Nrb{*=p{4kkeJ^u8- z*r90AMQoMd$COTUD@{9GyA1z*9j2fls*;AF|d4By`=yXy_ zL*nUk#(c#Me-_WC<-6&g$_`c=v)8j?FRLc-L4AiV)h07*3%?v=<9HfXbo9Zw6GV?W zR4c{OQE#E0`8bqeU-JAFtL9LEXpFP}7VqOx7PKWV25fxo|b!Gg#Q z8)8kSggbR{k*Za5TDsJ`N|pcDB|BLrJe>UbktEK&;3HoKmEo)EX+oA0@qjmt*mRK2 zHOXve^mQJzV$@vfo#5Pd%m$2QDSDSJNfq?WImDqaxnaPdMSGPO&gckeL7o9n zUwC|q{uq`AsmrTOZloK+1#cUq^m~k6o3gn<7raehanWmi`EHO9d0fO zOOJXZ6TW52{M09UD?E8(*}Xev>eQDOivVO9gF&`fgb;lCX|96@i%*(lE?ruG_N?u< z-<+;o(e>@CN||LZckX2NwOCoWhU%@TSe9GI9b(`3c&l@_@muLA`@V>x^;ev}!=-sy zh+Cz^x}!9kz{KvXo9HO}T5T-+mAajHuO3%+zXkio#ISIotz=2_wr%qI^{O*x)Njka zLU8Mr`KO7y=P6w~g`Bkz zJP6|QP0n58^c4bvP$)1M8PtuHvm70Yr%$a{t{DCNjDCK`D_0CkrBt(~wpK0eix;*v zYa%5HNsLU2wqVEC*wqRQKgyq{T^8vq#V!#hPi(u0ilq%@ZS%7Q)4E_S|+$^0zF$Yoz z$K%Bdv2>|z=~B6MYsI8V$_f?UF19K#&~ogU;n*>Qudl(~UGdI4+J+6aEnDh}6;lBv zONK;8%k$@Z_3GvJ&ykTZ*%)zw%P-m8jN)zp%kLpc3`v%NWE{Q$MDC%ZA_G%7nCER6 z^N3JWV&sGZsU3}WrwENU^0Se(t{ne{&vWBFg2@Ogw~JEx2vQu+J5l&P3Kw47;MhBO z2yAJ0RZA4^OZ8vlKZJevo$|6bgpaejt+ zW1kRIjv}}eg)XBmW>+4#8UICma1IcN513Mq3SWxebg#m=`P6NZvaW%+K2#gW!UnWS zD!k0Z7c916{}vFg)uqLS>6iJXzQ#74XG?ii9_=m4WmL^-<4ypVZ{ez=d&Y7WVPV#I zx{W^!22ru1re;lT{86!Df)@XU3x;ORLWT{?U801?iWOF)k>SJDg9fQHkqeH;^Ot-+ z8{c!x|B8=3$f9yQlH#p?`;w|99cm&3b9b_EFKfrrqFQo!<^+8527SNf!-jl6B#S&q zNzfaZxtR64_+|oqKg_y*Jc5G6f(5p9>ul}XDW^?SmMY~C^~y4L@0!n^H6A-=IB~+@ z;gLYPty<}llp~XH?wqkk4JWPkEl7Ro(pPor=xWx~{oPU4EAR8wHP$!AMMd+&ND`OY zQ6W(c+lt(bt*t0FB{8jaO8DZ}iO*xu+w3!!XmNVTj)Hh67RYa?>B0;RDe}&TO+}8Q z&;r7HqA5qNX#l@AptzQ}OIXv$uxks@GQqKwAPpT5pz`wi%LDMAM-Bo1MdT20_CO$Z zv!OjbmG%MkksJwRObu?Q_V!0iL5@1=J*zw}g-FZ{BW&!fK*QDKYXpQ5QG>zz_`3GN zOYHrH8M}i1{LMJ;=3xf3(FSe0%Hr~( z44iyGhpJiLL^5R9M4Zoam!2nyv7omiK`}S(e28=64TYnx#rie0YDuy9l4G1GLum_A zC3>1Li!@^CTAaqyb2dYhN{pr)f2pAl9I|3xju(hhk*ikEoDqUzV&Op z#Cg?BZk(m+J7KZ(+RK9G^r%1;-f2Ro`HcRUFDB9DIY9#1m%yQ%xIillF-ds|T|KUp zn(|_#r`Pb|%6$?WV>nnK{TnHPrUV+`{(aM#GjU;I*3eMPt5?=Mc~pf9t9^V_g$rv6 z6i^i`s4i4U?c<{^Qbesw+%vg$?Q4I3vxkRbzyQy&WAhX!piciBDd6NJnM|BI{(bJJ(=rb%U{e3YDnAxp@DI3rh=llN`15eb$P^E$fk^5#v$Ws?KtQ;j5$E|iF~e0pbQ@^Xm3^1! zT@-iV4Cgkm=~q_yv9>K^!+CAMjx3Fseq!sF3~)+Z(^XJZ5NYIRErSy(X^P-dk2hQK z>W|w1UQfq+1*I!tI6-a+ql#FioiAFU=G7k*N^pba8!_Th&z?SG$NrB5I9gR&Umtz(%5ER1FHQe&& z;8sVuBp$&b6wP>d%|8$}n~08uOGCP`XJ(mOlH zO`o3ov(M5?_mPN*I6AMu+l{sT&^hL!c#f^)A0}If&Xgh=OQ&LeV>%U0E}6@vodles zy9Q+}v8AbWn7vi05{scfGY@k<&OTPl4VUFi?3uiiSVT}1^tpK~k+|t&jc~!U!^Gc+rs87wkB=P)}-XO!{=YPMtzCW_Z5;zC-u<4~8U3;;+SHCU-UN z-)I5n5O8*)2k&)bU@9XRxIvvlO!A_WU8(IkA(fsMxmHv8_%PM0B|Y2zi+Of}W;^3Q zMG{+;Pu82qHSX{sKklb&bs#L3)|+Wr_C|Q4eoqK6rf@jB;QlQ;Ytzh3#5tP9ao>g! za1r$egq(k7NeDP`HgL^Dlr54C)cEF&EiBCPR;i;wyz zK?wdh&EneWtX5J&DO0}FE45EV5i=_H9B2}KRL6NA-{3$344c8 z#DV0w5hhxll&^+MN+DTOtmL|>x&0wU66cqK|6}jG!=gI6IQ+YJd!cs_1q&dch#gU* z#;(|6jj=={b}=z_6MKv$QS4#|V~f2Tdqq*ySP&IODbm}rz1;cadvK=!03ZNKL_t*k z0EAr@SQCxp3-7a!k2^av+_}4V&YUx6&OtvMbAdP%?EtLAnk%?=1p5m<-GP%6uv`vh zNprLhYCcABLIpV%E3i|5!9vU}Dr4}tCfs*Jbq0A$L73v;8?-s>!tpQ^Ik%uI674(( zbV_~KVaARf*#{1Io;XqQAS*W%MUl`C)Ky580IuTiaTnLW$Jgia)IbT&#<2v@gPa2Ee?16~A#X z=W*14gA}23CA*|Rcf_Fi*abibc@%nN>euJn*;R_24nlDMKI7*{mmeN0ArV`)WAipB zl#oc^V2{W5V52V&N($iAbZpy&RU4sFAzum>4WGKWa{-)k4e$(uOINUNBTk4nVj;WZi-zq0Qo=$ztLJ8i&)nbK84qh)NFWBU|HcY4X47g#6eIW2Tg-9@VcU5 zF%j0w5ZM8_cM4@N#Y6jN5EKrHQK=r(sNr+-Ca-2qlLlE?p(u)M_&{Ba{VxjO|BFqC zN<(9`bV9Y`*ke#`jUE)(**Ip{z-k60n};xbKbXzHi^4({A3l@tuvmfWfJU9rcuGIu z&P7E2ftdr*-@E#`Th4D8zEWq{64M+y>*vmk7av(+$&f=EM%pWyJjYFZXBfMwf) zZq-T?6r_oc{<}YYio)Hyb#ilkva)<`->wrDR&Crko6kQNe{$)oRO0k$-SFWW8yjV# zMylJljb|+cpwXaH5IpN)`L9S#LtY+)Li};UQ2HA1)32EOGcqzE$p;}YGsBq!6-eJ3 zk#KfL@BTP)3`!-mTC@njFH21t4#VK)O=ijzjjOA&P90@Lgy9e1(?Zi|+Ei$;=|IzH z-=4F7zv$0D&1=@AyL6E@ZY&88S8GZHPCalytyB^KA?*-07~R)lSCmPAakZJbS2O9P z0eK4>!Hy3z4zvW%^YFv{;yPyF?njTQxbg&$K-(4lD? zH<~oUD*k_|62KprDOePW1=>=9A**3l0_MZO>yqsXQBUNqUJtLM$T*42!t%P~@%B6< zFWyyLfw3v^H)J9qzCGQmmnJAkbL&>IaMEb-?Ad!rWgd@e*icXqE4VTslVRshU6(FuD=X#T z!Rm+zZGJxH&gHadQRWqLIOyI5G!3N+0E7bU+=6<(WmPX^#RAyb7W&f&1vvT}9LwA5 z1b`-uU~L7N9E5!x12R-2kix^-iXA73e~3nt>? zLQkL0fBDj4`gDFogt~h5ycshT@$pP{HW@rv?&l|oi(>$E@xl2J{CFHQ4p)!_2>=c3 zf^9e_zn+ic?Er)Y!p90)21_5}O0m%w^)+4XkD&Z;d4*i-7MaJWVS|WW*N1Yb+ivE39+t57DsCejj~Fkn|QhEwqKwU7+RF zdm&<#`tiz;e++sj{X24I`(u|oM^TNf6Bm8w4DdpO0}Mh!STA34`}L!T4%N17sX2a} z0kC_wu2CcPg$rfsi=Uj5`^}|cvoUwB=FAzLQb}@hAP`{eSk}CG0wFaAc;_x`FO^+zXewpmQ}`(vPD0CF-_A^`SUL zgS8NIr(+HSCci}5(BbHI2RrQ{P5-KyPGPf!&{XA{_uQ-b;fugW$2kMp?^+b=6BUuICKaU3w5Bkg* z9@hkK;gl5Jg$v5ntMi8r&8}B3RU}I4-aWJ8X8#Cv>#|m@5+)>Aq@)mqf-nqZG7KLs z3l5g6RInA}>?DYJ2waYY>&Xjm0>%#2`ey}-qoe_BaE5`o>c9|0`FXqV(MEjr_ zA9}H)*x=qQt!)Dw3Zu=DR0FfDAfmwq6bwQ#idwNTWC-igBW~NabaplYpiq$Szt>Kh zq-8#-CY+bYI61xT&>?;Dqm#fKY%g?Qw8t1?P^GN`y>7 z@Hp(bmDg2my$#f83nnJY5k6xoFfN@wS{efwrk zo0b<5A$$5%V`W9JU29cw%YTrlD4j&Yyt{RBId<(*H*6@0k7synY#)l@0SH`yJ8vrJ zXAUfRpyngDoH`uPdl9r8QRnf7k6{r=ONHzV^fF!Bz%~q{2Z1k#DiV+0mGd!Dg#$v& zkYYyRGMZf-qVEYy*=yB9mk$MjRe8cXb>8z4G2&L1kh1YyxqGw z0|&AWA1>2WtI=TIB8(b`-*({VMTO2&4I99$>_opx6(9`#=~rAlijgHwoRx14j(vuJ z&ybXi`?t}uXu4=)LW-u%BiJs4afjoPAIyaZ7R751A znl?pOG#Kh?s{&#L!zm@BjMFSDA z-45y5a&s`a!fX**b-}?%nt0`q^Msam#9|en zud=XEak)yGR(g7>l9HIeb5H&PYBduPA@lP~@%DbpQH0X3BIa&AgskUU{!zAK9 zhfF_2bme}xSBS!iBqR}SSrzt^XJQh{BENtvFL?3E%9o{{l>21ga?*eydUsw$PG^(G zYH}%yxaN=!8AO~;sC0rnxea+`PU0vMhr(AZOe-REi6zT4+1Yoktkh{~ zg@JbXyz&0`H6`uD6wfKEr6H-9FV>x4oU zpHGQIv_L?0?`}DAq;1J+QYqQGRr>3%`L3?)>C?@+cNYvCn8o8^%N8S+=iFQ}cdqup z0o{@%922iF{5MRQjyW?BGQrd){D2jX_H!`aKUpogJ7aCY+^3C8= zWxH9O9!+%(LwPkm9aRGOBQgXXgD|i^MwBch(A|f3EreM>KXtA0Hd6be#tTr~bf}v$ z*U!d1@w~qjip;{;?gTgkB%-8YTSrqre_eg?*t(CfwHBNK+{MMI=&6K^fLP?UI%{#Y zuqJ^C`4s*MBodvU-_zHx3xgieG{xsrt5&&=8dWHO)6;e9*Gt!}lQwV8n={9}S+hd< zlb=t_%#4iT_;KC%@tQVm=vAvY*47mdQX;{)5ZwP0dv>CJJ(I3krNXp%IDHMPOI zsbV0+}2u z6<9!^gMJPrilNO_E4Wk(q_hW9ln*qYg*wR)ITY86i$%Y7xbp_=Vt+u{{rfL^_x5}F zlKKlC?VlQoqR4@YtC`eQ-@hV&PmiX$hP7Dr;zmgAifUC#30$=Y{1N#U^H*bm270F` zD6pzwM&i2@{qNv61J@Jzzd0HvkKt5>9RXZ4&p+Wq^v z;o)3Uq;J$+GzHuxbT1tus~n=H`-+ z5Y2!A>Zw!NCr@%sm%i7ptAc_uJ9WyaS(6nP=M)-h`A+)6*nKk~J6n75WZvxA$!*#^ zv$lS4=8S~Rrf8ZH3RzvcSj5Em?AcQ(q%Qy-8#{)fezynv*qFBo3W(U4Fgh5AfH35T;K>bf0Dbi|5bhJD) zG=1pM*KTf)TD5w%e}7Jm8r*g3s%K>QtzTcA&Bllkwy$5;Te8H(!h#hYtsXiwyJgFC zD=R8C)@jowD-VzIe1!^}t(rGiHE&Mcxx;JTyy9OnAqZWI?!EET0)%fxg(-&%ICdIM zK1Z)^I2-{>3zM28CZSy?{Ba(4BhkHU#q|p~eq2|-zA7h&JbcJA(TdJ6IDTBwym{J) z5!vnA^Wx*3=FPLPvNGwRe)UQf9-b8vlF+zujGNn|B}-CtIx=O7!|T`eVq$z5h6)T6 zUAyLa@?;$^FMh?{{j*H%2oWDyGB5;64SH{cM*oLx4SFx^MkDKWsgO8zVe<&XJHlO5 z;_#^&SWtRb2U)73%uT@8qXIGgDX20*e=r^+!?!q(cOmx>ISGR< z;km(1a2mE`;&-w7tSuXQ!K0E}!+b2L037j$+Q@+lLQxUcF1>$AF_RZQ*lITIa4t}5 zCccVLe-y{^S3vqbdf1T~yTi7}=R(Us#KE^svCst1TL90WD*)Kqa;&W@csM3adgbjc z?AOm0z_n}A8#knpk+KI5I#jdV;!_Uvx<>u;KUAYW{W5*QBm*;0> z=%!3D8#YX2O78dT*O@V6G;VIx+O?({X_Mb#$OsUEUEASOMk+=FG#bp9kHaUiZyTEE zpC~QI1bz4@#!keylQ8u=Q`618d`ZTQQ>Ue2(TvZf>lpQ_Z_{ z;a8}ks#N6mZRw30(wjG>k&!ZUb5>xWI3Pe27%2Aj6&U1uj)_rtdkX+Oc_QcWXgfQ$ zg+&EFgRj4S-nOk}uU* z6Dg%w0|23IGZs+xvjISU5~=+GB@!LrvIVtEtirTfG%z0;Tu6UF96H+CB zKMV|r4>qnwrw%ZTu09N%yQ1#^d{eTJKyweC$5JB_6@lB_OMDD&4Y3YS9f^R^)UdWFvY6ylg5S zQE+hFrAxV)nOccNYirA~vEkU*u;2Y_XIK3HFTQvxk!Tr)s$N|v5^;lqEZVg*Z`xF3 zN?6K-1l{1lS>JwZ)~lDmL~+G1=+sFydNjLl-}l%vn>`moA!dAE!C|42T#Ll7>#=Q( zVJi<&h}8q&R3be@16^U*c1;>rpQrXRxAn^5SA)k`54XC|VR{%lNuK1i<(&hnzo z;L$i~2jL>LEqEJ^v~D<<3zZ5wfOLiHNj;Y<062-z3z#||31)BvpvE5(^e!!fX(Bd% zW6p6)EHo?14kN8Ebk4Zn0R4~aRsCfivNN%GZOO94nKPOEd|s_uDa)7ZWHLsfs1X|K zFm`Okx8sxYi3D(gOf6OXPRJIxUA?2iJ>pMCl>q)=?8TE`a4QNU4OEf)xHSO-F5`uP z5}b;S8RYnYCnsk+VQ@)_m=p-}kx)Irt1!f>P|9emWm(!}?jBNO>eA3ykwT~B(o-kb zTHC*xCB&IH!YZ+?@G=K}TcKs3de;eo6LfzDQ+BqdDkxel$;#4ZWoh31o0+M}%q)Hz z87X-erh}ruW>Y6lcz5hrxuQLMSWI-n`hP;LCguDFGBY)|ZsnJ#&SJC0W@eUwfxM6q z^Y-m4HeyFTLGLM;H3H-Nn{++-O8j^ctIvVQK%oWzTQQ!`hn4=$LJpWlc>61?dqD^w z0eKCvIR<0xQMgl^1w~&Ri$ba#8Wu4@N>n&3!2p8;2^2WO zOj{v$C(Jt(7D;y_YaR~e;_KV6EV0T?PeEH>+=_>pc|n2v!Goj)3v!Pfp#*}$=+G49 zIB8OiRjW+87oQG_qKJ`rKYyvKuK&esNdLKcWZNA-J$m?qcj!lPi0(k3B&6y$$^;((}-03^at2DA82o4jtjBYmM|(3hu^L<-$+ zT^znz=xqk!F)V6>1|{oeEAUGcR^5S?Dck^N6T&^8`$aX~j2RZ*-tQTMwe+Y7IGh_i z9z_T|JOs^}nKf-{*0ZOzt?l3Kxia$~6u{+^k)d&PjN0*8Q zv})P1JT8|SGsbM_&&M~)m)CHnYd|0u&cQBd_j zdL*3O!3Ho9XLw+(K!Lqxg9(Il(0tDB=FCSm(>Jb2b_j)9tih>Z{?f9IOKx^+2|CYg8dF8Iqnt~wn#aU$E#PvquS>0EU_9#sO^0Et9* z{kp`@PvqiaXc8v`7cMA6LnU|bsz;9&PnckCTekHjM}pqp!`2cJ3nAcD{C5cu^a729 zXq<()CvZOzx2B<)yJ5AJknDl%Ivly6QXuuk#%PRkgPu>_B_wpi?+jFO%rtm@xbX@DPD>;9Ww6BI==$2Ye1-he5dmMoAGp z-2QGbcRee?3(|dH6nfGZfCpgC)|GsEwF+e4cecaL#npeYc<{#Fyk@e3#SjMMFs`c% zLUjND?1Wg=0Z)VRg%^YzD0H}6!|dftmmx#MvuEejt@}1KG+&`00Cwz<9z9xKBtHXK zEUITuoBuQEt1)s5E8xKc?XzcT0#oQnT01#EN2)+~tJac>s>oP(xrMygGQ zxhq)HkOM#np(VPEM2tb5wx}M9kz)LL30Dn1az}kGsy)H+U(oP5E~p>{$ThHOI8Z1K zZ$g2uv2TscZF-HZYQerfV)b$nBCs7O%CUJv%Z?pszVT;A{q}9eSifl;#H&hAW z56pag_5&_!OPv(_4hz>}vB8;O8ax+#pM)j-tACZq)F3dn0HgpPh9z{?(M9e*Hyo-~nKPK8@RDU0V$c?CyzsU!!X+oQp?n9yN5R=+8f$*Q~KV zdsb1iX7b#*xwB^F4j7Ozdv?yJ&A#xdc5vi%nvSsqGzn1)W7X2O`oX}9~XV0AL)ZujOnAW*-`j0>6?${yq^-YP5Exy}4 zE_N+KrvL;D$FqtOFaWS;W1Aa>$0JjV`Yy)vVNk$U*q(rVIV5%QHWA`05WRw-gs%?E zRp>Pfb4osmGGrabWIkT#pwU3d6m1AekgW#A$4IJZ&zL~2v95-!&4x#h8jeM@;n5=u z4o1Yr+WYsjZEcNSG$BNrl~uaDivK671n>u@BWgOs>^D3%D6fY`p78x0+YQPcF(x0k zIo$X(hpRb^mGShV90A&`q}j#!0n)Q?cfvghv}_iZ&UK4xAEP|cPr&dckcZ(!`B&&^ zgX8`1Y8?FR0f3^=p#%TaDf>&89PZpvr>E;wDiRthuhw8?001BWNkla9#pk$o8#`DF@1VI!;tqi{^#cYyT24WJJt_BSj5M>3>qX{wJKku zL2|OTNt4tgM~eN5DGKvOW7Y_K_6@Gxuei^S<``&=Vev*6u!UHH?hD~`g7rWVd;%$I3P=N1J3E!Zhk=kq#t;ab~Do@Jrc{Eqa3x044^ zTWm&he+^+1_Iccs7(J(`k6Wpj5?)@M)Kr~L2LLh|bN#x?*Ei+q)AzT=ern?4v_JnW z@$q?Er_S3+lX6m1b>(WAaiM{frRBbH<8q%p)8*$AYisJ%DGN?THnI44X8n3)em;>% zh*(UWIb&Yo3FhQv#?diz`0%{Tm(@BQ{QcRRH=CO>B8EX!lxo(joH}(9?d;y9rvB?~ z-8>#utr}aaB>)%(QYkZdaMr9@xh0oMBYGlY5&BNU-m?{V_>&8AbXc2i{L_3ey^+2a z`2>Z(1p?{}II%EHjZA}Hh`F;cmjOe8;=>Xk8YoNmsfIKW<|^zLVvYdc6v$vL?!$Hz zGW7#s(QGvM2KV&~MPf8;hTbiOqk6hof-d#jA%rMjy)rDVgnXhv9RD9w3E&S;AY8p* zyA2Nv%Il$#7wYZDHiL3UjLE}=d+@30F!7la!<3%J899_UrM3;$v|T1=^8hGVJh$AJ z>yY@aO276v*`br=v=wYE?{2A}dZwV!ka6S8CQmkR(}wTt%+l$Ql%#FkI5j7yQm9pyRFd}X(|-IhFD6Dy2>kuIM~~W-bN2W2=sJ^qPn|v6hs7$G0~DDp zV;meRel9F6DRXm*$AeIa-+mLjyI0)A#f9$BfvZ#!ih`vjeddf+S^11h^5c)$R#vau zw@+EVJm=Lb&7wtCj*kDnpuwfFvZ5C+wi+-%=;Ol?iz%g&S+XQ==1e`aaEE3%zX8)% zW8S8+x+#QBVV64=y~TZFi_i7QKL&-YgodmIbg1zoZj`Rv9bIi;{TucIXpKqjFpUQz zc`O*{p5ZzdZB*DR!b%?cQxF0yt(6C4x1oNmSKB`rPxe410f3w=Y*>!QuDEp#@h_oN z*s?X&e9-#F5S?7Es`O4+Rs2n=1n@^;G1@G|bw#N#c;8~d2K-!73C_hIj}WMXT!E)L zNOOfG-WH{0uu>W6ft#~j>n?2Ym5j~jFxm!LFJmEpT_W{qpdYS`t?%&V?^ieZ|An1J z4u|^Y8}Z7OR+lb0Bqvu>D5^hy?tJW+or$3hKL&Yuy5-9=yLEf*==jve=4pox@mscJ zm*0e<(5{_8rz0#D<>bV=aKT<6C{M_B-bhw?xB2R;{MoZb6opBx=itb1CWPf3+O?}> z(M%o$62dy{Ugmlsc=VDj@B9*>$a!*crc zQei>LK&2v2o+ytT$z8D`EiUdo_NV_D8aCukpKiW)uifLv&iVP(GcsHwBOOPNHq66Z zuQnog;Mf%eFM_sQ&A%oOYinS@E994|HXRl_U?bMoGr6Gu0P`o(N_Vvg^M1qv6;uE^ zVQv7%aE-~}G{kT)LV+-VGQ$=wx)aFM^i5a~My7r?Zm|<;w8fJ>m>P^m)v#h7Qj;Oe zN70(V-4Z-DsFJ6zv|2@sp{H17q{;;SH>eW8AB9G6Y6|C#h&CwqMME#t--oRLa&Y=S z>cyh33=bJ7-#v<{7DzJV5L)jL22b-wM05c4bNzt_+*|W?>Sh^F3CIqll&t1m6OkME zC$D3~d}y?YOT@UJ|KbqXY}Bd4`TX-w>E3K+##*;7>(r_Iv@|WBPmLdMvwC%TVI&_s zPzMC0Wn}2S{8D6PMP0q>Q2y#6FOT%^FWI$AdFz(t{Q1HQ7c3|CsX*tDO39!>QeZ@6 zq(%S!+#^TKmoBY1sB~1TyjVoXXj^3f28uffp~EMC!MF9YGB-uzNN&j4DYg%7;LP$)!u zVnq`SE3F5!!B2w~L8cbb0Bw%lTy)hT4z^>EwG~8v`=-%YM6X9+Td-JAmI|ar!PA=1 z`mxZIv9U%*QrW07LH`Y^1n|dV5!(EWoB1%D_`b#b_4r8vNfMSQ5UWG+D)=1<_S$%k zOJPWN002evA84#wz(NGpH-X>XaPVo6{Za`g49NzK9c^$q4A~O2AB)z(*m?x}EBk4F zF?kFR8n3>(&yEg*pQoA+_fRz8o-+vDW4z|->bNb%E@SS)4Zw|s%V*$; zisn5TI5#1Wf{_D1OR!)umgb`{yw?|4>x-To{UBLdC|}|_AKxgj834etz%es~f$s&L z2lDiTG`h8ePK73J=rsreBa1d33$>eg(xPH9uS`fVKFBKmU#Jqm9}6GYeGa!ZxMNW6 zi-x{v^gANFagqmj%GlbE0=Z{vo=MdKRb<;FM5KCf7XHDg#-q92Ixg3qJ7rH16EmlqKQdmuohzO;v?XAt58xt}XFzKjtULF}VC~w&^*`-TXAt9z^UjpQE zGH+f^t5$D=f`m~~E=`;AJUlq-*4dikFMa-ee)sM#Kl|*(XP=p|SX9%d!Y5Da)~|0; zHpJ)8DlQJ}s=xCcI`O5`!rLLG}Ue2i3KKPeQ|MW5P@ zMux%0H3k3Ch~9uD>)}@0Xi#!Xjl^->xOXyGmz_=i!kP4c82SUf{*(My$Ni5mAD^wn z?d(#M^<>OjkDoMP*TZEtj2}I662!KWoYT;@h2Ig8L3xV>>Q~fR2@f5|?5)rSfE?P* zrPl9S9ln?fi4+Ac%}OM+)xNxpqsoA%$@kD@fIhipdci_OxB}**!@3$={#L_!5GMKJi^9~uais?f7xIk56JujQZijY9S#OCZ>*1t4Vlxwx8eA@#7OZbTE7M%4hFh_j&W2E?@Sj zFqzdm)~reN^Sf2M_6@Q45|?{n%oxLXGM}80^O2NRxD%{Wqu+GnhG<^_esso{ub?jD zT>WfVo`i!XXaIkL9}CG97&&pg2=i89O*%3P-X`I#6^7ZtyX3T)fIAfI3tX}E8e4t= zlONajTa~IXa~A7U>m#ij8xa3e-<@pK=XJ2Xg*(^Xw05osbGDe*ME{K0sIlE z1M42}SXnAEh7bJfqse}3<-*w)msk*&ZcBr;*gda{>?)xPPO1GYB6t~ zw0G~^)vL`yL(OTTI3uX z>k|@UFBH-u5j|&)WBC!48HU8h%J%F@ojUc!=bzu(zWpsBltu$CmktWD3kj)i$_4zB z4Csiu?l2dDqM&2&A_2<{b8Qzg!5*$$%uX(|tG3|ZhqDJb3Xs-lJqMRc*KtFQ0qD0J zzh)w90w&ji?+nbHf=DgctfH8*6sR=B@)4{+m|kOw3+rLX++18DNx;n|P|I*`5)_Zo zffzS_j}%WH0{cjnOnAG4<2keV}`wxQ^guvZZ0!@ zdhWS%%CInNQ!?!U(CM&np)4#+xnqY}$Bu?h%VnhuJ$_t0a-?j^6#n$-dRE+WVnHV) z=mrnYPPi^!0^6Z&BI$9DPEs2Sd-Mg31Z z4C6RywS>)nZ?D#ZU$rS*h{B9Dc=iTT8F*aW-vcie zG7_22V4uX^)#%(Fh9;RfysVEV6u^Keq2z#*h2#TR9E;65NOe$iA?$^f0r(~xwajsV zjYh?dRj=@@IecE@^%dM&f#gUK0&NM)_)Xw3Rg{ky0AOx`J?GG%N&d~7u^l=Poz89b zYWv_|lkUr>fTAd3B%H}#>ZgSF-5GUDO(GL;h7a}%v^OXpjot~@ z+t%c{K4~)54T-~{<>)E0v@=5NnO~d4V6)9{fr?-dHLAxRJyreZpH&AA2whz0eCT@O z!DZyMgY|hdEbH2S|AYB*s!GciH1^cp*=?$=r$>+I>(_Gt2!$*juTYR!TCypM0>I@` zk&(FoL?V_OaC)t6tUOC-#iHMZ{Vrkaa)@6Mh&HF^AayV0X)*c&vssZcPkuKa4%cy4Y2S69BP ztH9NjU!w+JC}aWf@VMT)xBckRuJ2^_?Ad9zZ_9uD(Y|$SBS&|Pa`!Gqj38&vQcg}L zw!p<`be{!9CVXq*!CtV8Ep@I*G2kVlz40#h@n|s3K#eH1>9ZG4enDguzIpe78tRSM zJP(VckiUx{YXS2E*yD#f6XEX-aUPNxXzQcT*ElH0A{~; zHf|_z*u}6s1yWyZ`V*t7p*ZXj0oj4oi}Afq$p>EwU;tRXz}G?cu8tUu{cz{80_|cE z<2=_kf59*Ky@`F_``cAZm#TK{61Ho{)`5JB=iBi%3!ibz-cWe^R=s$&^w1f#g)(j6 zK%1|>wyRO2g1yZAd~HFXBDq|rQWdTYa&ii13bmR92Hp~hXof-K#ui<>+D@HXQ>i38 z9>rq4pZ1fRtFyFxzb&BLT*lJ!{dQ0C@`$-PWke{R9!+%(Gn%oR5ai_%OG_ieDMtg& z$zk62o#bR6T{%(!Mq=SNVBzNO`mQT6l7Aguh3AeUQN!P zrD~g;IX&z)em#M{PFOhBcnD|!^WNf0KF)jKfdW$!vB;AQ1M>_lgEb2Q{1LVgZGzwd z;1;5Kp`R2oS&8Qn00-xD>XkeUr|8@!=V!r?sk5Ykt{ zVhwf#Kx@o#Pbq)=C<(mc zvC9c9OIh!x;ergBb?6L$fLy@wC77ClwEPkd%wm{tMH?M1Fh$Qi4PgMJ0JSb1>(Via z{(iUm3rDkn{k3rUvi8d_C<@tvZ1jyEuTnqv@AS4bI+bEKR@A+A+~+{S__3V zfR`_owQ9Y`kzbvTY}%CAy0w+Jx0o&+M(GQzM zjHS^Kl}hLBEq?egu;9}IF+6u}nx!Rc=1jZp-OVdB32fSg1q;aO(^UQXrd~tP4m5PZ z{0?PS&=ItI4l#`@`Cxz}wXxKk83Jl}DJA#_p8bf+4-ia)Qb6$;Iy}M?WvL*P&Cv7~ zu3W|bQ`kHeVJp#8hRk_LvVe;OeYohtFPZk6Xz|z$wa?)3C0v>bjm)4oP&6FA#**Do z6p80AzQXE=qSo4qPq}?kD2gI~exR=WsswNqe~+Dc*pQ3J8io&d78IUXAB7P$VKoMQ zF5{F6hLMQ`5dDbdKG-A09R^AOG(`S*#D)7$Z!zyJ7y<$aXrwlPISYx2OrJh-Pft25 zOklbtwg9D)Iet7hJUk;ZQrfkv<&Yt^g9gQQ?rgbnqnlX#U-d_PAF2d!0rByQlP5E3 z*A~{PBdk$FPk z{6leQ2%44QF_xx5k2pljp(CJxZkCu)n+yXJTS^HA&>Y*Qpm{%d1IR~yGqie%c(wjf zem(?JWDw{E!*vyIvY-h?%dc^uHrl9hMus1(3{D=V%!M`w&Wo`3GbH>8rqs{IyFZc} zVAWzMWB|~hDNdG|(5$jSQ4}%EJM&k&^8GIg;3_ZZ56KV~w_a2>#O z{LF{x}pSWEMRXo0Jyr+*RF}#Y^r5T+3VNu zcW{%>r~CD@K7QQu{{4EMp8OFbUghQK4jsz&^n4fsxp!VGhbX{!xEqv zNEOuWSx(?mc(<=AWw0u>@c(>1cI*(08N&?-ke)wZ-l3qfaCPO*p6$}Ir5R0A6or%& zO+dhtB}@J#nZT>~mq1Yn3Nnw1s=auz!`ii3ZQ8^?eysBId-3Fnkzg5JyW-$M>Z`BF zp+luVG(s;Qw5Wj@r;L2$C%{k}l+?6o3K3bD3u+;l(hp20)N+D&cTp};TiD#dMH^Vr zCFV&jv^Nk5peus^z;*^YHr}~Y(0q(6JddQ4Aaes^Jn?!Eh!%_-v>c6%9e9-_fugW+ zKdfy*QOLqf462o!}@V-T}1-J&FKANn-K0XZhigP%L z_YxIcIQil-3nBt057#OcJ8GKzBj48p3(6(eQQ5QJhz$FV< zP(@Rv0*bRZ55N^(cBp;_dgtr;_(p~OL~;lZ9gs8?%IDBYK#Bya81MlMycCtWV6+gM zVaGA>1pq-xl1am^BveJh`WyUL$Ne!`Vu$&ekd?9uPeRixc=G^h06s_eAF)cPe>j*2 z;edS)^5hW0yDpAWU@PzhKy4l#`l78F#54e?2*UK!n6_@szI|JC=#Xa6Ah}#lHf~fu zdh{NP=thl1J$qV>9qTZEzH4}Rt+{hcd2&}_47Hl<-J6@3Sm}cWRwnZDbR$Pv`}*>@ zTuPx}I(2#-8EGVgV8e#Ec#)bnkE~i%ai11^L<~UiL1Y`tML5VB*SuiQLBaXzObw#t z_z~0sV@hyKxYmL74itM9)k4iH_(NRcQN4*<1^?-ck!PUiqD;e)i#95=3<$hHjG4t< z00#=35{qv(5BW&|;OmchE1}aNF}~t4SMh&Al>q+mG~pvqfY2PnauGPw&|)606ucdT z;DHz?EExuirSfcXcW5XGfd$&t##S9X50%4*C;Iw6)9FmVV@}hir8qjq+`X%Cbv4QV zynqJ}6jP=o9Y1auzWcvJK!9-bW|v2gJmhlUm>7?Uh-$vR#@+9|ym0LrwP6F9F@pe5 zt5Hr^##Zj=TMwfS8vnF`5RZM}FNBDOf?#bL+JSNgwa=Im{1e(Oz}0uTL}k#_gYP+< zB+^>SMa5dcP zlsV2yNR0 zp@^!E(6`8Mh9-NlyC4$-2i!>92Ed1?CHkC4c**94u2`IOxbHD8gIO#D%`H}fi59u9 zi$5JP5sv>V6I7K6`fu=G9rs73CI>TR)ZyX(V(VyXs(R0! zjA6r`J$hu!u&56qXxHvp$Br+;!?S1_%a)lmg-NBlM~@V0HEG;fuxy!0qSW4=6&Wc5 zcw#Yi{J48rajHwAR5Hz)#muW&6;H(7gK{c>T>Jr7-XdQPjS4zG*msc{ zhNJGN!vPmSHZsIkc@dNG^;#qu%V`S0i;u^?*y3j7qi?_Ey?J9cWeVTY5*iIPYLw#H zv&xuSu6)#LQonw*yZfCXL!KQul2v|2fdcaLb>`+QjfN2j=rd=(6>W#%knC)z)sRXN5<;@dcrF0=J7ZEHMjSvn zit;yhcv=rVECJvLPz&`lDls7Y@T4d9$)QezG#@G@wAWE+`<{(4)zB8e#iHa5bdY?gHmU$PC$sk7tSc4eucUN;4=^$5kQdfFDN7X`@ClmX@sX zU{Zft!vk6IXYGxZ|Lq_Mf2uyjT;MY-mDGu@7As2 z2#bUuEG)BQ$GDj@9p}w+I)A>7iE*3n-j$v?lS|VSmrI{I<=w8GNha&mR8{ZZ_x=2C zI67YB^Z)qfo5v<*Gpyu{9ZU7-0ih5y4W$y3CY5K9pV1al71rM>ufy8B!ilc~C>v0} z7wNAA=!D;f<7grz>Y|5~0lA36J=#vFr$qJ1_&xzi8Wb*WI%4=4Y}F!4f_|BBk>Lj& zk_dDF0}6RHOV6?dil+e3c^xdOgQAiB;=OK2<%0S^um2=f0ewCqQU;#!IOc*zd;mC# z=U?Km9C}Jg6F5g<1b{b)>wzXxNTy-QXiOsn{a1j)!j%{Zxp=YuFJ43GWHtXVsi~^! z)h|&L)M}=7ZQ+3f4gLJe6kX4sE9T63efxI)?Ag^fZA#g{zi#;fGL=eZ-n_Tr;aQtD z)d&i*G-a?-DKlzR(z9o(0|#oQ9Uv?$d(NEHO`BYL_qKp(k+9O!wIfEn$;iVAhX6x;i>?IUK4>7b{a5YBc2d@$|30`ct7`*lcRW3a^lm z8YceHe+7>oVe;hvv3H(vQ5{_z{@+~|mJW&(6-7bB-mqa;Y*=I0#BNZNsA!C)_{PMT z*bP`>L}MYgVC)KN#8|4jhd6VhgyULpJdFZ(lHx{5}1I>rM1hNc@XQkO3o+H}>`-{p4sxtz+7+)KJ1z;uq zV!$lNARE+I?kz&@Y`E-$uLN@eHQs+59xUTnjOs|+xE)$O1%RSt{N6NuV|ZL`*Y?C# zV>hq(Y^8VcrPV40W^ZadqOE!rN7jf+X) z@nIRx=S|>bZt(p;#?8*|&FhIrt;UCpG??E@d~h%#N5F>7@((68LJbcTj8^?s4z z@QJ3}UbP*&p>kDS^9<)fopuL@8k#NLV5}K(N)SED=b{7;k8>_pXS32fSPt zM@lo7=E+gb#`$kCum(OxTsI7E&$V1h{QDQI=zGGwLJ(@0wgFAy^WcYu5pezUd25sI z*%|v!4ipvw8PDE%%T?Zo^s~37d@MPyHUWBn2ImE1>bR>5M+R@p%kCg1+w#Z(Ieq2! zw4go|ba9J?F{iP30gWivR zW}oj)uWL;)on17cKLGy9CGgmc-c7DmADtc#)IasQF%;6`7s`@uE;nMLWAvZYDsaJ~ z#3GaF=BF}gU}5b~*VP+XbVg(Fe@0;qF4x%A+GvA9207CHB}B@L^=@n!4*I#MiVUq;%?b-`4+Uq8Ho_DGZUa7rg{Y^Pe%1oxs}mC! zy5}+$F40<#uYcLsVU=JGR)`7+Fa1_E2GrNyN0T*W|>M zm<3hqR#9j9dwUba}#*-Y|Fej;o<4XKKU+%CN zWJ~02p63;+o0};_C#rQT2)HRJBHo_-*2Ad0Bn!B`9b zw%tYZ?deFr`(GyrRW4L8Gz_dWM(471PWzEG28$^4UD5gKv);#Rk4iynb}N^uN0!@x z)NMS)bZ>aM1f$KK1oZASyI9Zgdo9~rscQ}mrFhCu*TJKq=^IVD8XCsN#vBE43K?8n zF0Pzb^F#T<5d93=Mn@AC?e29^Q8I%>{r4v*va&0Lyjm{j=BwRZzco4ggCT_*Oiy{? zGq`$aX%qcET#SF`GvE;krr2&y2-*W9S)WickjfB=Cx?3{OKUC8=Oj>8|-8 z%0kSo;Q)f6`C$;DoOJ3Q+-bzXOvt~AJeVgDrX4#6F$iODWMGBr2^z)zW(8Ni{}fe$ zge;Pfz69A^{V(3mq@_5UQGmi1Fv@zE{TBdmSL78wRGy+kQ1(JQa5M51>sSKFF|^DZ z|2OPot77#aA)2X@xoY8A+P{q319=vF1b{ed;WKKQxn{f>J|J<{iyk=H2bwr-N*fu4 zNvB?%DX71Fb;a&Xo%~aURy82?>M@oetOb0hui% z26%1Nwl|*XhdEPIb00IJQVY?o9P;miC^CaC@M;!F(#Gs)f8v=Iy9G$C#1L$Z^~gYfBtVNT=JemBnYx0} z%MH1zs-|NBv)>WPW8CEA8N*4~7?RO3NS$37)fziSb_!?Ig%VuzXk#Yiw2@EG4u4lA{!k2hXRFVw7`T$uK_aYUGqP`|Y_9q1W;WbtS=TNG^8$>#wMzwACO1HXgW(GB)%bW#Jzk`zy3@dQhfa4(4E#(}tA|1jY*Meg z)Q2r%-r2syHn&0n@DlBAVPxVc*L`}#+X-d=A%;XZfR=|Ljr4ax-V5u~)ciyt?H1mK zsHCa*>u;JI{_G3Il0LvBTe}Vd*ti%;Ihi0r4<~*zXC!fw*AkWX(TxI!tX% z)rxcZ3l%Tto2qEuA6fC1YalBTF`u&!Jl4PUjjVfZS?F=m_ zspCf&WeqneLMtTnf7q^7T_Q*a4rBCy`?I4bfV}OorV`XObxWX)RhHL!7+s_XcIIJ4 ziq32Rmi+~lF(-WTVifHQ1x~;>6%PCrh?(pOT3luc7Ifb{td%yI$ilS?@#aE zXwNI{!Af0cKI!0E6H?DdbE1Qsf?R<*aLw_>vG;l>0WnBChWqK#rLlrG7Ew_#7l)hK z?%n;;ZA=N#8NPH7Zc@Elx~R+q8?)aHXQ1O zAlk0XF9DWSo4^|S65U%z?ZuC~H_ROX?`nh=kp5GwVaAtv7xsC~4~ga9w<67`7dPPn z<}(?mfF|57a9^2wB5MxWGt)Fq#0py>-c$ zXS;)*VJHY(Hu;{|)|GXabQ8L876s1KEFObwbY{@F9f;)y5M zM`nh~*d5`X@Fl$@JZ>q;-jS@miH3#*NOi)ktdmH-5-*&BKu^c-1P*p{zmG&XrrEWo zK?@beGYPtr-S?NkAeaVG5%=Ku($dGNDbKiaw{Ty`cT>rt{VBrDWICuHKk8l1(zP^H zPHr;OX|I-W5qim;(eba@ z9an;6hx!IkwTtq7_Mi#%$bTVdq!;5HGX~2LB0tQF0jKc~3`jPU(pah@^ZEh9HfH(mV{b5OM>sTdX7wC)N{LsF|f(WtoTjPNj-n|Cl2Vx+>><}z~ zQ4KL!IZ!Onz^)X=~jHLjp!Q?B%L_=Lb> zVAXAz>Rb4O20!}#5`xEZHur;imt>p#;zr#y=n5iS#Wa>Hh=YK_sd-RH!vl)%n>%!2 z`Jc2tb3`6uVI2PxjSa*LM3q2Ed>}J^8K6}I*lPfumoHDd{gf2Tyi|jIm;Tb5Oba<( zGEC_=Df8h-RGe8EQ%5y{~wc5ru4M_E~%yf1}8HTus( zX?y~SUKdZX-&aRyXruAhzR7GN1=GKOwri^vhTl3p*!*?}B-UG~gtL|_veQHQd&iQC zne;hvek6h{h`fG!IzB#}_-~v>2hd_v1}9o0i~AI`5*^UT=288$7V-X!?ooKW|S>uC`J+ z?XvAmQ>ZX#H(hwG;8_3e-X2s+B@wY(+$uQKMT?7lkN3G(;?5wPFoFsRJygy%pG?=l zIwM5|b#F9(NSAAlcz%2!KsMR>h>|KPc60CSKoCrGUA{ANUNCI4q=zHtS3@I+@v-F zRx3(P&h#`y5*!icNc-vd3tE@6?I=Y55i3(K{NEV+NI+i62mQET4>GVIx`GH(+7jUv z?V5MsALIwG@r)TaMzjnqZr@qm4e0VKJ}x#kkVwg@F9LoMwd1y7V7I`y2wnS+}=PW@BQ;bB(%5Ikkjdq zz1Uh?B#`-s=Ey<)boNExj^akbzKP*addnCOK$_dDzy)!YSqL2?2}Acd5PUZ&lUK0=WE?=Gz{6r zq)zDX*LNBzZl^;s&|oSe1uTq(tp2=L;QoOW=;)bQ46e@Xms>fUlOPR0VOl9ZX zTEIF@KFm;)4}pq_gb|LEB^Ji`2yc>fyu)ZiH`+$2dIs(prczIl58OdnDU;p+-X7x_ z_nG*!JG`X+HVLgJUXZv)VDQ1DQ&A{8G!3tLvF3lOAm{ASP-H-qMK;qQ?D|<6c3@4YagTu0G+8=s!wKYBO4j&Tu{5r&8Zhte9 zpb{W7w5RkT+u=sFzM}KPhbQQi6_zA8IOKrK+TG>Bk^xaEBxG*3fcXBxi;7INP)qM4 z3LWQpZ0T|CbWw@*FDadjtW$m<_^8{~&xIO4)7=5yDsBCVv2PYBB%m#u#hW_Ue4+Ur z0Q-E-246u(5)4Aqcg9np{v-?1N4^w3i5dNiOlzc!BjZ?3rIV}>9C^SHfgNS~su)K7 z^`hx5E2%7k5xk#Zgnx@W;=DMSO-~wJn6NTC;0)Uv7>RY(4hyuva~#ow)j~L}a*dAs z;dET9R|_+JWl0o*jX-yQ*nA2@)LKtZRx0+z$n9X%u2MnYaCF^zZ63w%Z@=>t1+13# zMkF^6#`$@iYeB+_08^?O5Hs)lOyamN83rOA2?^!QeOq|l9G7b1o}ac5-JV`QURMte zB2Wm9IoxYSIY>dPV=^OoNtv7qo0u0%zlO+drB*x)Sv3{IZoU{B^nHRtU_NX#8>PwVE$r<|aenL6zxsuoaydXsfsNjgis1^F2vE$$mi-#a-&vto zai|)DA@+yJOf`7Inivzs`@rMn@L>bY%UV1@wbBJ%#cz@^?kJf zt-pgrA3B%oYl_xS)FWFp6`-0LG?_TxN^P&rQlnO~ew$)h3(tMY z-D=&9%uIG!mT#;QFB0zVu^n%kR#pYYa+Bp>g*@CicANi--0ZX=AVQ~8RSU|;YiqaP zU#-IOL}hk$tQJTC^z?|Jm&xqEHo4=TD{IbqkbAtw?#wcATD=$q0a-1#gIG6AJ&lMW zilbD09V)qU`3hD4@!u#o22R%oRE+9TQVcLKduPjU9c{^J0~WqqY-~X^%9+Rn*P!&2 zKcgcl47$gF(M>K=cHh~O^j{Y#!qb` z9!?#K<$da{|IXhYOqN%afNW-7XG@hJ-Q#d{-bJ({H^}(f?p9;J(-+CFB#JEm5$mz_ zohL6}#S_{#)G%)AEHR@DHeARY566EnPzXNh7EhOcF!ZhlliA+_XqbyVgJO%oJVUJh zQpBSH_6soqw-w^%Mpvgbqz4XGS>4Rf3as}|`#IS2dFY%-Pff*Fq_z33J8atpCQos* zXgum-y@B@XTf}JYwB+(%%R;?wdfScH(3U5*x>l{4<6BtB`u;HVwU!ze zjfMublssdxU;aX)!aIsF1!OX}-Z=q=fY&+O~a;Kq?z+@Zz$99H#3P5vRwk zv9z75$jC;AxAuBTU7bp^8-+r)hv`RhF2fkH{Zo1W<*S={8LID~;axISM_Te#7^ zMvxoONy^dC)ys>ycNQ=f`rCzZx@ieX>k3NO*uJe2ohrRXHvfh5q|!J-3? zMqPcL*Ui(^Oa>ac6GY3-mX)c@)v#R!+QHi!)4@dAVj(nymJ+`S(=y ziG^BhDZk!wKn*(_IM@Z=+2aKgG$QlA=BhD`@MMWo*Jhjr6p1g!DgdN=ZOI<~aiVEvfl@Ja_-KN!<^}#ieqX$7dxK3{v0yf<2k((2??Fsaus#iwRzp zOwm&%bL7lKd~VYjWfUp?^T|MJ!qjFeeHb9iMYTB$TSccs2oPc|`zzPsMmvJPh-fi> zRn^q5FTxKV`*1dRe_PQSDeY5c3z7mK?2j%fmr(8>jYmdVyxr1cv6;umR8`G_#!Ff) zpZY2By9DcXRpN0SQc}WWGej1a^;o4EYvA~SJZXP0%5#+_)9a|@*|l2aqk;iJFu7@Q z*TXe3=W-4n-((Sm{k={s#X=kV3&i$I5%;LTgn{xv!ZfgnpMnaF2Z3Y(^n_Y4TpzhK z<#}@WMjuPB5U>vxz09ZJ^2l3qft}-z&DQ~T6BlbIg%4_nXxPimurZZybQ_KPsrq<_ z2cub;*)Wj%b21D%E949|zzFoLx2NSkACe?iRN2DMy1f|n@3w(#|RV-{G2!9N2 zmydhVSFSaQgWC7O=Nu<6Nf7d)Q0ej1uoK6Jd(q3XKu>jD8DsuIy+qmQcb zms^k_4wIjIqix;^YI~?quB2S@t^2K9Mt$QqlZL+zd*`nY^YI>XaoH%ap}p}WoMaMf zzm}%Q5^vlcBZA)_wToUfTvpcV52v|4cfulLu@{-$c)%3`)O|_4e#umx$MTUxE}VSS z>Dr%y0WiSX0ucNO6rnBEPqpdNG6#&HWsQmkfS&g%A(T)A_=HLuwkTUcP0e;Uo3*tD zTRmI#HrjgwVmFf+c>h%Ik7o;{zdlV%{p<*MmFnJ0Hd|S7O;7WuW6p!En1I;*(A?pU9x&tdQ(Zf+NaC8pEtv#cVQ}r2 zxl&-M(GSMn{0mb?%bR&0Z$(n*{V*v1x?jhp=6;>=X?xxua~lt72>6^XHJ0t1%!jZ) z%+F({q=5dr5PYsVd1ybLhI~vs00g2ncoW?mgWSvpZfXt~klFxI@ldS#bmxPO^1PpK zjPrQ5A9W0J33NP~5W{<>DP9TkUzz;c+!l#VL+MQVV;wHz2R8=Rh(yyVKX+F16@hK& z@}Cj%7Z&RcXYhSSXte-9B$&F;N$qa{M%l4(R-j>;Hpe~Dy=iXH)t^t^e2KWFV@!LS zy;(BN9^V&l0guN@y|X11uutE$;9#*v%ZM`cnKaU{pIQQIzA@2R%s=7? z|7igLY2ZwN;TEee82El>Y^!5_oZ=+-*4J*MO8uHhU-i?{qO#ZrZ;kyUtE_6ByqPvG zwKy#v7gi91&B|PV23N#Xrmvs;bSZl-5qvgp=QiGp8uAK}#I|qm> zXwW*@7W|5~Te%+S^3pmU3`4nFYy8pT`GD@3uxs=;bs6Lv(?`THP+)R7l$GvqJz8s7 z<`dQkl_dYV>E+)#!`l}w985Bqjp z;3p@G7>ZmpN$T=s>pGr7<@a(RTVPG&WL(^E-8vc7G|`>jv9E(UH)3;(Rz*3HfaA$aQB#k(GGFsA8=Kj?0L%0 zfkv%Ej0g&@qhFeH+*+x_jw6am9xWwR#KM;GdgQ}LMV)VNYAT_sB5m{JAY*6G82??P zF&q0!EbqHQHppR9myc8w{*5!^Wk2Z_6n0W&mD_Sn&+x2+V4MUmf`I8n$WYAF*M}Q@7amp==05`$ro5Ejfx#fUt0fy+98MdHyS-bJk|7$Js@Nj$n)j$Kl?Cp+@ z9A>dPcl!D;3k|K(Q~np%?0+-dV!$C_l#o9Gjh4UL>P8!UmVBD1kj*Z_sm#2GC{TbHBXxYF zSp8rWuldA@_Rx6h%gM=m1bPq(fx9rx?%CV^%iVjMQ%zW?>90r-4PuqkWa0F@^ z9PGb7sHdcas;P-1BNtOrs#MtK7a*VzMQ^q+NrR};usEx=1)YL$4f?C~r`s;C)hwPx zuV;Jm-*@ovg;P_#^jLSNi{WE}x~lhAexOZQ;;`3vO!oRbz-116x#VR~0}%46T`%iH zmB{~?jT#spe|?&kl($9vUV}54ny(1UiBK=?z~_t_YWTP`BNFVv(}pOueh`iMr&gkB zk~L3ax??X$561h+cIocOqrt3W7Khe^wchAwYtB|wVc|^-e#Q)eAUk`Devg&okG?)= z=PP;qmG_yvMnc}i?)Q37Yp{{$Fd5InCTQXlG>I1V%9gq-Y;@p`$i}UkIoDkpqCo?v<3DiuBvC3Jv)Ylqm zT0ojrI5;iIhZAGZyJA0G_boJBN!h<9DX|m7kKyQOB{U^;Fin})|r|o zRT9UmNznZTH^MWeC)7T1doYDj)zMT&D7ZV5z}kTm|PpI zL0JPp)VJ?@9SuqRXd_Mx$S&Z#FWEaSXq8a0zOkX$_DxFRcOggP3FRLrV3Bf9d8CG2 zDFgrm>l zC`4FGBDu*b>FIJZJmO?*XXeq)c4G`A8gQ_mv9+jI^Im!4aTnM-(656iYp&%ZepKzD zaXBmpkw-Cjxb1DT-Pnlpz>(vCI+moIt^F*{N;P4p4%|>pHBp5DwJa5&9d2a(Kk~XS z3*AO3UhdlAXqGlV{f?h-Y^DoroTiit&H31d4Sx&CZ-!zP%CrHT8Gl*!$^^{xlN-%1 zZn`sak9y2zzB_qdAOJ@G@~=LrYh0l;vvyJvC#frKZ z9o)FU%|##Slo-QuYXlul_(2-CGG!YiBn!Ej$H!1W_m{xqCO<=FL03#J#eoJ?j6d^#2Q2*cBxRGtVp1;s%|KS?}}uI%YO2!H$M9 zR1wv?{>&xP%gs&HpOZh~n+*hbYujJh99y@`Osv@u(5Lm%5`nVv1?l1H8lKI+XUDrk zbI%0rmU?gRODXckE3`N&%%}scrqhk>dXr=>5g*f(M>^vV(-dv&N(m5HcZFDG%Au3; zkFrRsRqW~1lv&zXG!1|6H_zh+HH}9BTJ1@dws+M(WY0%-1-WE$N=vjSDh8X}hK2~C z+>mB`z7=GkUC$sE#th>$dc?l3uaa)Nj-*uH=`S4o2Emv8)AQ9Yy^fT}9L>(fqXqo# z3`mbuhAOL_p!(~>;NwgVJ%!)dFhO9VGS+LjGNnfWcaZX>>Wo<5bnR(Koz2AGV^^s$JY{+J;TaYAl(3AF!Mc3 zJVus`^w#aNP?`($`|Z<}*TGmt0L1j_3IQxiiQIX+@$mdk|FrX^_r&lKWf83Zz(9VS zKs&SLg2zM0I25)5$dW_S2UBzizpVa|J0A6Jc*Yg^HR^mGbSo-%NMfvPKSlDe2nE_QM@%C3O)mOGhla2$)|;Q*H!nAsjxX59n&qMt8;u%JywI!0wj$kInj zBFy`A!eV?nJZOR4dXc2?pW3e^js&#Kn=O;IE7Y*!h_MwTnGu&NPneBE8$zILBq2dy zUwpihxVUxMALsMZpYH{rk1%5XG2hS3B@Dk;XYVL1zia_Qzr7*4*9PyG-^Wu~XlKiU z6XOL)0T}q&jqVQSU!O-wiH(Ygd&BxR^M?z`bQb9qDYp;HD7%h z8J#Zi@qz8#A0JaUg!Vyjy)MK%02X-U^-=-7 zfzzE4U-RzSbbVu#YlRyihe(nV&<_p4Co3dQa?SuI+t^ffduKZFQ-wWLL1&egUzfF{V&__??-FwDv{dOb}hYD=1wVeC(aDD z^C+gZ>CBVEvp093|Ii=OjrP@xtt%Q-Nw5(UcnFBetf}DOe9$epoSLv%BsPeNyd7k* z?4_$n^SG3&Ye-gLe!fsK(3Zy!8Xbo0HN>^*6ToqVI89}bRfA{E@qXUh@;gE!XJt?*EWb)}HYm7w{7s8})yiG3~2 z#bX7X#>00oD2@{o+{ML>#9bY34f5I1SF7`k^wwdL?D`c1)9pc1Jj~0m_jG5*#>Toj z3zJXK(>ZY)F8W|h&?~?ifPbs3>{=|=dRcPj}OigBm?JFvsDFgsm@`VTHX z2nMYtDDX$E)bX$zi5Jh#)^aW{mh15S@}0WbgWz#3oXqgLHuzVm*>W`Du-ewZTO>_Q zo4B?@P@_J5o#V&1-c+FLDPX@XxLjj)u`=tjBcd*yki}cj^SrycP$vKO^u*4ZZ@GSV z1ZA_HO~?!ckyoF8%Gt?8kN2Jb%{T01^LG&tMANKep`s=wk!jWDCP%=1l#2En=Y|=k z8FH8ibeARtaGy$=XMBO+Tb6D8Tzw0vJb+xvcNgA?HWdkbV*l%5X10(m&xx1)EDn|F zj*?;{k((D*QBkb0f$R033fYM0ozQh9{+4N$bRM^E6IR&knAOy z8r!1YvK(byT|xuQ8vNW}BX=PZ0GMnv+853P%@CiypRTpt z^zF^8nLveZXH9N&NC;>#NHv(6rdO2P?~2`~vBYZq4Y6YTa|i4B34s%OQ=0emU4;s> zHq<$|+J=J=#Jx(88mxkc3Xxp@mEMuK;qDtI{RTcVP9~Fzb+ua1 zaKifVr+;ovQTqbH;Qg7>Mf?qX#!8>x1sW-?{uDe0)WQ{YtCEa>nnQ_Oh;=}yKP)$# z4mHF32%)gT_dEpZHg7b&F5os;t9SBaAq2F2baWbpOr%0q{_P+pJSKR+lqUwLOds`# z=b${>%#dQ;Q|2gM<-!MT>~sWmx{!OcA?4oF?m(~s4oGo$Wg4A<57gyk8fg%~61KXd z?-x>DkNdS6@scB*9-Wy4lj(~qX&hdz^=ej856830&~a4Q5%;D!mZQQW8ta zMD<<5K|*EiM+4YcrMq|TM1-X^c4mIF2n5b$#JwzEv3At){y=k`As&~h-(5^Z4ASD{ z>Ed{!a!DzfL?i4{9;gsfu$fW1oa0~;D|9?-$7Qz!=z+DEUx0lzVNOnh`p7f;!!+EL zF37Mye(QkW2qJ?(xouDag^qeAT$t8XfE5kSBNuHY+3z~$H{tMtG3@! z{=)^gifJqb**dYB4d2YB<-bL_OqB_PPGPv#=s7!^k4&hS$@3FGM0^>p{dk) zUpf=;gMnqO4h{rcY;76<0sS`Xkn9gtl`H6!8lxr?QP^5I`6qiOC$o2X*U$&&?RVo+Jd=L(kKg3O-Frx5(IK0TrWfl}#NTFn!WB{}CwiG@#B%7e?8 z5g0LeA8)guC(SoQYL!RC--IhNQ@%La8*~MdMoTaa?l6PmC$!q;KraFCF2RCqw-^Cb z2^U0QyOn!yfUp~TPr#LTZ!|Q(9Z;jv=N?LBa4Iimr{)C7rhi?;e6YPj9qsI^>w8JM z^cA_D+Gsv;lyesy^LH}CLOoBXRq=k+j0T0M(RxP6i8_a=C;IhaSxm(K!LkJm!n}a> zg#OBku$HK5rJcj@<(66m6?Mk<)%l{Ydn!E{^g+@embEE2e+rA(zp^;v6jJl7r?0YO1QJC`n2V-5rIj zuJTw3&E0J|e7;xI)@Bxx3;5^-7s+HioG4FkZi4Ew`s(W1Z~oP$aTeBJt!4_bhvn@t zn~)!zAbj&@xU^-ZsW}iF!XM@4iTeg;bnG@Rp#Pvq+-2y*o1TUgr#f zkQfSyyi472rOauxV_Np`m|U&pIB{Z)U3jRrc!W?jk^+bE{*B% zI_~naG}VZN(x^q&OvXY2HHzR688uqTSVZy%UU^48sAtPjN=b=K?gGjQTIo#+HU8sh z0U2zwnPG`i1);Tv`Q$>KsB?AKm_pznZ9%m+UOWgim)1SiaPvyD2LSy;bV%gO=vUIY zAj0C*od*-g>%Q!+E8Gv%{|A8IzW>nOM)4o)%M%4vpd%<4Y>P^3J3AAT0j-`*mqps6 z&yTAto+6T(s+yX&rK+q|YjH|tZk}wd=JTB-D!e5Dw7~H2_bgt0*))4qTAw>O&JYnR zABB;O)_wD2-p3w{mudNX(-x_MSqj#A;53ut;ROC4n8ubPaWVHMD>FkQqwANWCm1An zI9N$)#-(@Cg_>y=PSYx#Rqvyzr2>httMyc^yubt!@W5>W2#aLLUoGZ_jXoWF&o?)1 zZH;!B$fO`^iB;ecn=D5{VzQ>wcxhF&v{)QG(?}KxB;AM*loG1QRDwjx0KQ4PBO9fY zSrY$PdOzHcd{XM<1Q7ctE<6aKr$Ca)5ZsZh@s^<88R;bOe$-;bDQI} z0clsb(0A>|B%4^WdW-_u=!F zPsay6CTE;v!aCR==0Te9J`k}#TTruH^W|ok7yKESEqK({t|#cl2^!#&8xnjXj^~l^ zC(;X+#N=l84``~#@pQg2z#t)gwNY6d^ra?Eh`%2r4TdKb??wToBQs04?P!v;kPyt9 zo|aAO8ypWqF02X`B+Er{C!YWl94{IiP0gfDt>^^QA<@Jazx_F|$Ncj4d$0@Yl>I~k z0k-0Y#ac#Tam6Yf79AuwgGw2w`ZK7Al!asEa8kfS(a@I5OEaqTd8aklZX}_RF{Wn! zEWE+@e6|lvUQ`N&W9AY(J;1zuyJAvSe!;^hOQvuAIdmV+_6P`TLPJz%U4BWJoBI}se^u)fOE4v-)1J?gIo}_{ zgoON(PPliTz20&2eC))KC6<@ICnYXLmqJjYLuLEF`BBtGg-YA#k)qg`3J3T4Ggt1eZz1##b{uyt7c zvpVL_0i&M|b?-6wnk^o7@U4g-iNDN9gf$M!e~PoTf%vd8^6B6SWmVw!d4}*Oxb9uZfI^U9SAYJ13q{XQW)q{+sVcv)MSUsO#1Hzu(vOX2W7N=!h~!ycZ{q_UcsrcDo`z(KRNB?)Q@)<}Wc0UMp^+FbH+47cH6M%<{?ahgCdT4p zZ&s*lXr+fAib)gNAJ5Qfug8x;ur^U+kh3X!pQ-5;h^wpD#1@~+R%&BAJ=;fSZ4@n5 z6wuOTkC9W};&bp!n|^IHoh4VOH<-(_81}iKC-n~vNfgV@8oBFMNJ^3ob-}f(l?6S3 zxV<;pj(?Ag6Lp?YIuW2oY*D{yH%@sRSK$wNaG3nO%WjuKHg1K)i36cnE#{9DF7|6J48*9_6|}dk2cJcM~6#tD)fX zS}4^9I&i*S{fr_~iloLc*&TQT{!m|zFC=$aLc|38VGOT={k{J&x@_C`yX3&}XB<(U5URc75DUve1USSzE@j#ve76Hx>aYFL zBvObVgYV|23&a1DTh?nFacACoWNh55Ilx!=;VWP{+h^eHPy z6hBluh?aI`{K8c3{`)k34R!J+Pit6Go&`0|^5??pJA znEZO*8IU!9dm;J50rd~!4&g_@z+u}CTQ3XRujBjs@~2jG1n7&jC_PCY@nUWI6B=N> zO53`lqI$FW1B>Mv9$Xr?1W za3^FHx9~E01_M>&Eww_pecJ0PDuk8LG&@^sosKfoa6ak>-NdaMS-t-T1%V{f@*rUq z0Hn1n8Xc2@U9HVK7$)Z0x5q(JRmI_5vR$c#rcc2lZJ#Jt)q#M3g$$2M3JWdwLtDe? z4G!V^;YmqS<(+} zG>APOPVo<18vgD)^0hKHn+yYSobbH(O1=6#MQyEBYEc;t**7#Sgcy7)SMG(o(9S_F zjT*5p2m%6)`C^Av>!FEgiw&)hC?I&deIB45^Ef3~7L(B0CN@VfXj;t$PTUwIRq5}4 zs?frl%cGn<#kbWH)t2MbqqtVB)Mo<8K42Ed6bV2#(Lvv)Yr2bUc{ab1D;M&AT7W=9 zPgPkmoeYBl8UrCk`TbuWRd{uAn6()N%x%Ki-_)-(|&P_lpWkPb?lepi{vBG{TXHAHNiJw4w(4 zVlkgRVL*O}vs4@-W6Kk_cisFO{7(UlT1%9?=z53O>y6WKD`LA6|8ZS2Rdr2XDxiMP z1U+~80O+wT8+#+8flZ9xskx&yZBy z?A`VER}jEBaZl74Gi+>3GV0N5G*WlFoJpLVV6+*P+O{x$1JO(%0n$zPx>AezY9dIE zAR{W;EDJ55FPyYc0j^w(~qiSFKMpnFay zm_I|L8Yls_;;idqtVw_ViK}lXlpgvHOMysa-RRYFP^#pSkf6GDiHP(U0b2`1Es`XG zcCg=j0?oG*xjBs1=(K$>04;IB3PM2MbsBrVEB~%bz-HGZGJ!d0#KS^fkW_~&+H&;` z`}iNT1L;d(KxUi(Z8yFAZQrbYA>B9DPn(<<438lPAMc(iYV0o-~o#Q4a+y z`wO|rBJph5U${RX-0~|g7X-T!*)?_1p$8lzhf2dtUU)$){ztHan0`k(`;lyQ0SZN8 z(rPd{eOZgE+_#V4v}tBS0#zo4t5*x!wR<>Vz_X`Ms|?xSzyFQ;_0Jm{pJB64@pw`~ zDg~{p%{RT~(5G=RY}nHvJ8PgyiSTyuA~eH-GZ)zeQz* z+s+ewM7k^|uc{6#CJ-pv^~y5(<|>Q)WJ9(jlR`qsKYZeuOrDF$hFmgEUHoUcJf=yv zd#E?L;#JqmkPbBo^*0;<$e^0pbTTy`L;mZ)4Yh-WX~;hcmNBe9K~w)?ED>T`+0L_o z1O|iA-32%EkvR{o4Mtlz^|U^b`ubgbyc7`^VP!#kq1(6fw{I6* zzh2+LL9?|(CL{ayWv*VGGJ15qpMP#*V^h%-9}tkdYE@)Lh8Tc>0n@6LdB={H9Xncf z>}b`YgQbN<&4qoa-7t)(B?JW(E?AH_e7NP-txZf#Sv(=^=0GZi2^WFOF|?z4skB^aHWJJ8R-tAv*X@>1re_ zt{cFHLWqJR$UDr2GgQ|8js_+`W`!q0Y`2DeJM_7Uavo4~(eEH`miaz+MMF7W08RoJ z+(ybAoKvkl9n33`8#*aM+mC9&82xBywaH zW4CVBk&(O=D-3U+b1ylYp2+9N-ER=9NO6XoCO>7v`Wa{~gBRG$a` zM=VwxIg&nf=!3jG4NI+5$<385SP*yWR4%;;fIt7tTe`Gj{`TsLiV}|;SXMn zYv}6LErmk)k|ob0$>igCFbT>ufbr9_=yE9lso)Y?^LjP(zz8qN^SG zyZ|JB4n;8luuR2mHt;y#5foOa#lXZ0H}50$I5uuA9|Nl=*8C4+ywE}UZ*y!yJ&JbiHRv@vzZnx%v8%SU(Wpc>xdUGio{~#=4O_Z zBrr2GaCSCp-rUsL*|d3cQ#UvB?%nHYJbq+k@t!@YhYzQ9?rbq{UgI%i>}cXi$>qe~ zKl6tllBZ5>@WT&|R#sH+d10Y^;lku+&qPO#IJIk6X;@Un2skjXV9}zq_3Q0t&(?f7 zN?yJcj~}1Zqld|k9gVnLs+AbY$&y*K5~Nac@L;p%&5bk*0Jm=!efed)LV+z?n)T^p zskV+-tS~ZS0T7847cOKSIg%CkF0rvLx0!K%oqodH?Uf|#$ zw6_=d`PsO+mGj&xLUy+1`EzCK*5zMYMFYvAGgR+VR{1dUn0qdd;MFcmRJ(C*XXj{Z3=c2*^wVczG55lS z7A;$v+v@gh`Is?@y?R;RzU?iMn6>`U>1g4?7yI|iPM&PkzP-5v9XnPqWy|tw|H<@Zm07x3+L_5R_X#Cg$zP$o#u^^9l-d8#Yv+^Q{gX90V1ORS6923&6Jl zd>bG<4ggpdE_RRzAxB{sG+K!7$780US~oP<-~3@Av;b7lg(H0=4j;rY4j2xw%n`FQ zF+d7l>F4TX3)ud5xAz8bPyyd^{#h!1Cpclatxc;on1cwpt+ISXr616o`r{960b! zdb&y?;dbwCH+gb{0RtR)ys9ZDHC0o;z92naGjCqfrAzrMR=AHH>%^Gn<*(Dx+O?S* zH)j6yQ^P@nDwD>HCE(Ol?Z}bIwzk|odm7l&Y3 zju_$M;$oIy{aWFVn;5eJL=X$`coUp$0H8gbbCIgrGT%4PM%qRfhyBTLm;AoT# zD)M9CX>q`Ytvr{c z5_sAH0EfYzkyv{bQ5Em;aX8qshv9G#5`spJ=*usuprEq5e;wf9AT*PGfBGr8UAvp< z>1rO2+oFZVi4*?syyIjJ`#ycDY}M-C`0=rRe)k$Q5X8i^9XGCO_DxUMDimx|lBQ?R z*b5g5!o!EYIH)JaY!SvVu%3%vgYZdLyaylxciSVd8-^9Z^A45*U_lmGt$bnOrJj0dn&IXPM^-Y zdNt40Rp{y}ba4^7xryA}&Du?T_DmHJ5S5#&6$m)t;eIV!nx#TlD%p1Jo;W)49zRws zSl~QkhFRh=!?ann=!~r`Z}sY|kdOv_`<5F$tNxwH#V-kety1ID&+^@b84jjm@@(~$>C2$xJVd%H;aKiWFu^nsIVxbx;DJ%{lv>E)mA>2w}NmD`iw>kL&@+o_=_;#+&zK14u)YsAJ$M`A$5g}j8JC?7{K?AP-cTCM58_! zc@mFXLK$6hGT$3oDF85#67&qn8t3`wT2kQ>_Fcp;%W(#P7Fr89aKPo`ooiUy3Jn2t z#ID;&WdI&H_K=*!`~F7pJpgC{Z|L`c(*?}B3}^{+oh!TE5&Ph2hgB7aFv-hM|W{_NQTwVF0=belHK z(Y&#Aj*g*RuC2GX=-fGv`t_?8>xnR6K*IU+MM5ES;zXlfy{abc++3ZX-=p+&4G~V9 zXfkkM)k680F;DjI&uZ385)@5-YC=?dM|ANO*U@ItlL-LdJlxf!!%YZb#xWT+@OTgQo?%4Fkub zrLogstOlKv@x%l6bu}_XwZJe8Xi5$BwY3hB(M!}B6*K@VHvrJ7k$f3p8zCqqA8^zF zfvaJpIld0a;G>@&r9z)}!LV3FWFiRwAADalS3#*lOz_K%;ok7zg5!sJCooD6R$3;W zB_Egv&T&%^{bSS8v;qP1?z=WNHfD{oetlz^taEg<|Eg6U{~y^GfSViVx8EcZ z2_u&yBZC$!P^G1relL6mcjO3ogq`I%4gs*Wz~OnA{WG{J?UhghAW$J>BhkGTtN~a< z_$_*Of|~$bUgm20&{-O%;1K1& z<|*u=Nu2VK$vGm%WEHj<_auO*2S%O6Zo|j7(1!<}7O~;TT8ZxgybJFm7=91IZ^3gW z0=_97uF`-BV4i?NLE|03XK=0n{*RDSK^_DLDRvFVgoDKaI?BbEF_<(7_wO^CH#2?v z(#@OZJd|1p4hM7Rx&;PWnX^@Fz^PNR_3JYxPPD&xu}Nxb%W2chvSeGnJmczBIZ(7< zfzyKrO)V{}euJW-RP*P*;PIHrlkJ~8@is^N3P*W(YdBix)9^H0|BX^zB=Ig@p?<4jqyO1c*C#mbPglYS~g$k$Fz72g~B>)xyr5 zEd+vU?0{asE?==CbIKI^!Gmpy%(WF#tLe}o*^nVtW;!*!fkp#=|H8N5=5x6?azuOh zu*BE5)WRZ12e*4r5u_aWh;gb3ocI8cgFl|&JvaQv9m@cGycK8j!f9RrnBrMZ2yqwm z*@mNroZo%0?|n3%1XHK`#o370Vvh^npmHz_1DabyeSKS-$*2O<>KVbt4mU1i-8aP_ zZ5xAEqM0NVsi3Q1l}idd8!V(TD(o;W_CQNpIN!wu0G$wE&~5>VYPihAtV1|bQd0{4 z9CTWOt7ZG12<8ze3^c7{6;7h zj`3|wJd2$GY+&PDEZsf_92KAsG4UKOl+^qL?ZS~3hBT7__`n=+mV$z;UunPmL-LPb#vp%WPiuy zqt3$G`v1Lx_kRYNOy9iu1AF^Be14d{{T*N5r~?P8v9s#p!f?3&FlG$@&p)NJXRGGV zSFuKK#|$S}asfa?$kCze6YR->5REtxu~5WgdOptax!CkYM(*($%KNXBLQ2RFV)r(z z0ni? z7!epA?8m|T2AV&H{Ui>@i;qAxemCy27e+_oVm>kf^guTT0CYeq&`<&8dl(h*@?{o* z_ay=sqnsSS6T#dEMKbh}!zyR{@X5py5_xZT&O+V{$ z+)6rBplCf7AHiM#E6{TlZj{7@ELO}40eeEL0RTl2#teYi zsT2Y0QLK5=GZ1*9{xWbZ;Ig zih85}BNXe4C!=i)a;_lB2D@XLQsTzn<9u2e2ie5QW{)Cjp57_~0x= zmxcJN?4?Zx6A3C5QDY$hh&kXeIMW0bd3y@D_;nQKokmigS-0M>A+BC!&Ys2e>BN?q zLU=r8)p)8Zv4 zizS%m0)>&cEc4R&lW&0zpTWO7p3j2Med7-0SWL*az~)Cdy%U3Z5KP6{6$t(e+k6pd z4W|MaUQi!E4BQ340jB}nq7ZHcD?O+Me%ge$`@l4T(MHfE(7V~3$w^q|3Tqy=WFpK5 zmE<4#<~+{D;mTBS%rhR!&&QxaC#LO55YIz)a%$$0^q@e z!p@y<7ZtGp3ov3a_nmhf8#E9#XdrTT7aRU@bgXkee04A%a8Z%|=FPk-S8`9E&T80D zbo8kI-|kAIp|fZ6_wLO;dsg<=Th^n;I=vHQU3mbq1So$*>N0o=!MS%&KWvy{_;CL6 z<)SVzNKob-v77gmW@`^iW}z!oh`$Fv{Y%pg27()K-HogwB`1B}ZJQzATKD{=2l~&& zswPIcRX)UV57;b5Hyx_nPNDV@@Etolfty>4 zhzLd?0D!?=5pI-5@NFJED=^FCOECN>6rZBe&yaR1DQ59J7p?4(tcLC@IO(7fz@iBz z%1|&1yZU0lg<=6$0`vt=T0qt#pur$G0kXiAh z)M_?5y6EoR!n{1)+_~=N-VczNsM)qH`|Gcr%}XK{Qut6CVB=GX8h8FJ9B~@l7`~LgYNE3hWp6cw`!g=$| z`gQDlq+Oh)!r<1-w%8BDQ6u(pCL01f0Z*cFPy3KYDBexl+q;tC!f+Q9BNgxo_| z3Ht&V311ELC-L+wlto56N+Mt@I1Zd*_T7)BnE(JF07*naR0Xib9mn!);DN zFJxZ9svq&;A|#rcSC(Ck-5!Sk~=ZuQ$Ecm>9*TO{qaa(TPx{Z9V2L4cd-2i?1Vj#dsA^s9`mSNQ++;f7dkZ}|-U*qx% z^p}7+3uo_&o!-Lacqa~FK4@6pJD->a-{DZGz~_O-#lS9DHVxj@kRJbc`18-41qERmyLPn>3bGFhvbVDyA?Yi`E1;KvyB95nl)Poyr%3S!TLg|| z7KO*K%{Mmr;srL4(PB3XaE8&6Y3>bz1 z?W?+;S$&PJWn^RyY8wGRU$iJ~`Et_hxfT|_VPWFLC-{6k3T4Hooq>UX5MX%V@gcHB z{mvM=AB@pFn>YrNc5wR4s8@Y18e8FL6doPK$0`&6P=Lt-_eVVTN58rF;$s90AovuY ziy-_CtIA$jN9=M#%cF1-feC@burivi5-d;0xdL2jigFXKZ$5x8H={@a0DK;Zuwf29 z8D9M-^-rQzt6Nb~#cs=7F0*v0XHbx%kB`*M#5*}TI(vH_fPw=3?%g@-)@8c631-f8 z96Hp-oGkPPoH(JFF(bQcSJ8Lh**iIztKD4@)crrFcDy^o`QUe!m8g-830S3~88Z~u zu4xY*v~1DBtbvHIaieneYQ>HnmIDTu#l3lX?ELxp7cQu_ZL{m$yXxF+l~b=?PYV_# zY}k;h*ORBGI3q*TwX1c%ezyJk*?N0dL#dl7DBEB04@g{4(5M^r5~57lL<{j zTvvkyAOZI?G+c(p3;+HWjqU%ZnqC0MN_jPx|#^?VU;m*)ISDfEI`bdi;*D zSCMiRZ0TKLhbhS3S~@g8SBQ^P*x`w8`j^?fB_IuSYY`ZQt26Pb00IDCW5FKmOTqK9 z7q$f5BN4_2D+fCcSyPdttswgUmo5-6Soxy-8=N)*EgFNz1pp#=xMA!-GoQ`>4zp&t zfAdY_>C+pI99ge-Z@W&NZ2bHz%wb<5tXT1)b?Yawv8ws=Q@y+%hK9=b@AtTVz3K4b zwq~+#LV|AKz!$S;=WO5ZxMz=(ne408V)5dlA8z~z9GbGBGWIpb)2I4?0GU!r5fRpA zvTtT4+rPi;=uvezCl~FHT7C zo;T02tl;bE8Mb!qbG4dfS*ll$pPAYD#EBNur`P{i*cZUy9(b!0L;?U{33k@_WQ1uQ zCkQ&C*hxSE{dyz~#yurifC0Za%sZcCzX-dnO=}sWXjyg?7V^hg z!U6>DLv#Wv*aUim^1-R0qb{Ph-L}xv6Wn5U(q(7If3p&5Bkuwwa0%E2T-D>_so*)n z$q!Esm+HczD;ORMOZnS~F-e8rtYIs_tFZVsKpL`tLQe&XeS@6f7>tQa%j_@#cnggi zz|sTH89)Kri=s|=@uEx&JOCWv7Z3cDh0yXsUoi~!uY^zl2HyA)|24*qb6L31 zW8=oA`}emzd$vu_o@QCF6cw?920dG`;zdS=u6_F$9*?bEZ=L;v1;*4 zB`7Fy(4fTb-K9xM&B{_Q5jJm5?bPXRa`^&Nj4=ylEf;F@nEy~)32WWtk9RENoFCBMjtNn#$)DYEHgRl z0Lc`zU5U_|yREtaiyAuWB5E4}i#$C^UA*JVs#JM@T`r~7ARq?N14PKn#B zW5wqXY!HG~_>n~pj7+gSjI66{fjqD|NZE|;Y812O9DIHpCm)wtTmx8!p1FuL{LmDj zD5!mrb_3-EC8)>8c6WRbkDT&Mw%uK@_6tZQh}ehb9ta$dlngT;&+CiWSar*mkItSg zkjq)Up7r(?E?eg6;$oH@x?@Lyzklj)zZJDEUAnl;H}#lMU_dsJPz z*p9!FjK_7t`)_dAC zdtrHgGYo@IKdmp9cO~jxawwHuZEel9gZt-TXN8a@5b$w%8{X}XP9Nb(qG_FX;ixy# z8!4fG40#LOyd&)jPRS~b9l`s#t>ngrTJaRguXhc09eC%Ha`CvOUn+}1r7XQPbhXo)&jZE_rZ%5<*B^- zTVtp#f=z>H6(e{EZvBiFjj?$iCJsjD@raD6{K35LSg;^1Cr9V)EgC-DcIi^r*|Y1F zjUQ4j4jhoroSCcD(u4_FD^}Q@IN{u=QPp&kkf8VR$q5V7jvg&ry;^?pqV3F?X&XNL z>;{4t&h)CN)wXS_q$KwFa~3%9=#f4$(xyX)D#ki_QuFc0MJXw4&z||Ap}Mnf;81@{VV7#*~yX z;Bp|c$Iv#2cEdsmq!aMjCVYd^uz_eg+LxP4^bIP&n@CuHAGOU03qWLp2Ab!uc43>@ z!P-PbVHk)du(iX~IT-#S?yZ9&3vX>MRVQf@gkA;C;c6V^p@j`X8HjVyScC7@V|8U}3veas}O&g()53gA>e$%FWJG<9$)y1+X*Gjo^ zoH(I)|NRVwqS!z6@ZowxhE%MtHW)brfD{O2I4(RcO`a@SyVgP^V$Muq25jrRJ~p%> z{tXS)_2^MhzdlE$qKu5MSax&eu_FLHeX95O&(mlikzm0B$?VyZ%9{{j*s$!gXH^OX z%j4nHDW`t@Dig0+7XJRR78abIJ*Dm2OWL)QxVZeAvh4Zus`>Ntnm6aSZY}Wk=6ied zJUsYj`oERMim=Du{>STwFZiSTzbd?r`~kREh~ibXh-K|L;=|IY_D$s0}CC*#4 zoc8qMk3L=9MezjI0&TsqUj)yRIts{p!0Q*BZ;BSi;}${F1V5g|2Yz@hH+WtrFbo5# zq3C!__u5BBRpND=i~maqJxax#QWy)sA~6^S-TLB}GYCt@gz2!fLYrVb{0-{THj|E1 zkiAWSw>c2&@iZUZ2`V8zvcP3BQi53mYCr>Mp-4pN9=uOrMG!5-{P|c|_S)LPr4w9r zcxqgz18zc{08>ew&)^qNe4UE>RYim!)*HvyVbW6kbjb8n*RFz#7gcN4$fi%vef#YU zSJ&q@HpvMIuU!_xzrns&ud0R)eW6y9g#~B$aOt5#^{UwP?Z1_XSeE+tPZ5h@DLYBdcTCaki_ z^y#_Bk1MoVvan$6?6}dudZ` zr3VpM0xJ~b)A@LRBK$icpzEs|7A|n_iHEe{t> z85#Az_~QSWLu#W&yvRtGAwwj5K4dbssED{+8a()KT2_xkKThLh_0PeZuDuw)l-240 zfB`0snE1={9k+ELb4dNw4BY%&R%ge;QeQ@?x)xeA$~JMlV@*@3tPbDqW4r} z8<}>wyYueda~Uu|?Bc>pPjB$qXI3j$%9=J!-LRohF0VuTE=`+qqoV9nQXCd6kh;2Z zfVd6IwgI^DS(8$3MpMp|G$F!`8`>#TM0f96-@9i$a-_hVs8s<0f_?j}a&jEDZL{?A zGfUsVF!1uK4Vno6bLLo|Jn3X@&Dp-);pR((tb009?k!%%+{7F|P; zrm}vfV2}hNg(Oe@-K?+%=i84dO38p1BQ>ECARr z`TM0KrzT4a6pcji%7SUsh%xx&7A}_+f+wSG405j``M-S@Z}0{cqZS%rDIY$3*txU5 zz%&jH0EWvId3(29zL5E48xEDu5_o$ZG9vNLo>GM=)3m%Knaf}FGPXMdDL}iSO@o#P zAqTwH7;zoP9ng6Rj++d(9tUP&&T(8C2-B^_zBtkrwyV(tz&FUh2-QV6mo)_3ejT?H zu%JKkBpC1%w|wAXMxa9?EZK%%|HSEy@G70!AwFK`=~+C>-?^jNu%Y18Ddm_k(l5TS za(AyKv;Y49bub&!-#~J*&efG?Fv2P*V0Z79uUl8(;J}$N!|DKEdOjHfE*M~bXME8C z;_`ldFOchj4^+?q;IJgvJIwO8$!9kR+js-#2H^P_06GpgaNzp!&(2S^KLMu9m%>QE zaF@~1^V)7ly~E;}ac%L0L8-yEwk5mupyu(mdKMlygA3K8~ea2fRTfp;H-5<;87ym*e-egsRmKIFLexchkz3jRQK=8 zBO{A$+$e0=P`GnvlmDhSmc^-4%8eTfp2q23G`H0FTR_Z_@FC>lt3Z6>4`G=_XaJ^# z;c>}F!P&0DHUBxVM9^Ql9QT%j)c}aIat#dHa3ytCGcpob838y_*!&09Q(2Dmtr&E( z#1PjWPMGL~vBpEFpzMhzyK%Z1{EW*h$tC&*1~3c*dRBEkv-)aWN8Tx8)XsS%!rIzc z0%n9lj!0B*%9MK3rU@E01c0@Rk(YyIn@Tl1IRW+_XyF0NSMGy|2`q4qR9h>JE9${$ z@qPpRYWSFmC$rF|ALfiLr+{lL?Uic zkzTK-cI_;``>v7UH(+niH$Q_@S=_y=`Sk08TYo93g#=x!;J}v(U?ISoo*3<0Dh$?c z{5cbw3i0X%6yIsiUGVL+li+!dPQFz-J#3)mPc zL-v)MP``)FFu2w)JvFGb@L7VS91s8zm?5x>z`|CT+6^Kz;zWf%#Nb(2Fagub1lKJK zmc{Yoisj3*pFGLaYUKg}Q&glUf|C>9$48Qrqs__D<>Y7u0*<{s&%uH3;7~jlm;7zr zTI%Cd4XfAWWKDd$x<`*{nEMjp!Ua{IJ|Z($AqG5pL^d{Xb*)C5!a_WLf)4G=IaLV( zU%HB3rfJ=)Kv)EPykS`#ljqD#dhvq%{Hn1MQYa`QLes6AxyhPt-Yi_RCiV2`T%nLD zD9{6NcNe<5i?Xw|hF^kM%yDqwJ35;F2JG$m0Ra|`8dVh_3~0MfcmG%+MHIn9gg`5y zr*OCr_6#cZ3Kc+64?|Qa<&h2w+u4|!?K|KhE7vj1hDX}Xo zzd*-06x&vHg78yVy@yPbBn=`y{s@NHVECf~T|tf%bB|z#>0-TnwD-mJow$Avnksxs z0f587;K7pc@P=2e_zWN3WX&3{_ug|5i8y`x+FZWe^1*|)X=xqQ>cF(L4wo;t+_J^% zv(H=y46yU^60t0vJW(7wmUI1jIa}|>&}u0xOuk`5#)uKm+}xr90v_+(Yi`&-wVHPA zlKc9;Sg=5rm1S=DVxx5F^H8?qbNR^4l%} z%VOmkyfX}s%?@NngdIC{EnBKDUNrZ1va{JGOA0(a)3||Rl0tWdit8S zjNCzc>?sZuFQwdNhBAH17c8ff>h- zE6l%`%a`@dnkj>V)F~9#*92$+vj7)<~({-?0R?WR?(O-2_<#3S~em= zzJ7hi@Zry#obI`}+z$$hU9~Fx+OeWLlEYu|?s?5Dmv$6C#S$s!=)#SW^e6~_g zS(^dmoJfz2>l~(QRx}XQ)8yc?Jr+iK&`y*bfBxC7LD8?dzgSR+lrnEq{*RP4sO+Fo z6qrS(->!<39m(wx-K+6?ti=ET%Bq>;?~qaK`py6le7fwZ)4@hGS6+qJ0=1KX%Obi% zhrE*~O-pdGEUedjO zUc4+zhYsbsyGMz|cii0W@7R$wetbf+W)G~b@Am5#vv_gpxpOj^OjmVBMo3TBEn1ZC zCI(2$1mELXF?$L}H$@}-`rlgp<$^O&O=&A7*^7xVRl(Zq7tT*Mi%52q> zEbr2lk~%8VNU6Uu^$IjStP8sx3UQ`gj4=VzPE30={k?>*=w~sV?N6+d66%vG!er1~ zI(3(PiA-OiowV*_8upLhb1eb@P*Kes)g@pfhBf8a*!7)_ocj$d{d#h6T_NDCkdP<+ z`3*_>D zc`0}I1*H@e|NmWdl3;yi^OV4DBtA`hO6rWJ<(%R-s3%X`!zVrVCbjP1iXt; z?zL$t+q*CKLUGHy?^vB@A^-p&07*naR4M(vvV-2E_Sy7@N#PqIxViuUQrFB;Ednl~ z*wevf$@O%wNo<|cg#0?8t`M+ZrMgqEp7QC_Ql*6j|=N7Gt{o}!q8pGl}7 zM4dZE^ORGXdc~Q9YX_YK`Fd$nsQ zzXPSI%S6%IbBp%eA|lf1Y2IOK`ZdM8DBJp9!1e2eKsdvM+t}Q-vbt+)8_DNKoH~_n zeh-n6nlopLwYLTeadu8!v?xC}w|ewYT_vpn8VxP_hTNObm1|X3rk4c#B$iqR(%7ja zH+v=Y_zAV{Kto4TZk}27tCZvS?UN@Z>4-?9VM9WSTC_-S)hazCq)2PDeq&j(v55pC zEG;9gtRih~?+Jx>CQULgxLQ@XeqDe5ygno2@2s)PMW=*O{0%R>uI6rw((oHdO3knBc;?Aw55c4xwM;42iz(1)?F%aq$>%eAR=Pr6z@#x2PUKB z(6LBrO=VuOU9^5G4XvqrsrC5R2)G305O5j(eT^Bot`IO0CC{6eG<&vb>D*x2u*|e@ zrw#q}l7Qnt@e*y(5`7etqcX6sFq4G2fwwtjtqQdzw@U7@I+lC}g-VyI034IWN8RXp!k z0I>G}Ie5{wkZKGR@(VfCr}dl6s$8WUuh-M8S@|4J%A`rT>(>`FXi&UCUhcMfN{af~ zGu7R@@`woe#ft^!&&#e{sg81>VhkOs0aQGm%F0UJp@VwnOzoaMy2waYU0RtPuA&_C zzLc%>b?dZ1{)TkVdlPz)^eY;rC5@g~2O1oZ9+Vs;CV%W&;?g>%y}A>Jwt=>TwsYuQ z5T#$DU+hVlNkpqDu?vOk46kACN_sJ->_GRZT@D>HDKrSdQ561no<-dQ0Fb_Bj+!Fi z*!7*uDxAv`lwSwbAp%w z%;TlBY?*%Igt?Yk3I#oTR$TS3zp8C)WkAR;8WQIu|K0NE*y=rWb*B~?+8aGZWm8t+0 zpkf%6rKL(FQupgu>UvrylQ@o+=a8bR@8>zibtj2mwvX_K#D+KLbSKFq>QqSi;q*j* z?l5KP=l(aXOIuy~@g*45$=|Q@%n!a2?-ug0|xZboAG?YVa z>eEjiw5@UiCZaG>)uZJ2GX0n!Hj{i7Q}8dO)e{k=r|Vm_k}*s!pPy@Gm1kpUWQw8IXh@jmW4$MkZd^GwM#d%twuw=da3>VRB37K*s*F459R68W=U8j z>@Jhh=ntuRYq}p*jca}yN3FXNEdI!snKcR#-3p_|%_(>qDJs=e&z`NZu~DX`vQ^6Q z@$uTmjnl;9;^)Tarz~7p4Q>BFfmN$?5{cTt!GKC4QC+!G>c@6NNt`$m#gXkZ+AgEY zzp7#66+mcH=qlMB<$P{KR}v2)&li+T@sFshrGbDm01!d%zWea&XLP1H4$~=ot_D=1PGC{3qEHsY!)s@mUekGL3;@2!+IpL)TnIn=;er8^N^a4pdTPp z!r7S<9&R;#x=0{k3JNGcpA-tx>EP(dI6J>aU$*x0(AwkFIGdv#Z*XQ=^DYUcum%rJ0^SJx=@uX755FJIUWj1Wk z-?{VZtL!AgXbUh5@>qP91@}Z8EUNHl{SGDyAr@Gq`Hblo0%G>kH4RJ9pQFU_)AET#CY;*w*>G?tcm zTy8Fq%j4zx_{e_!RjsOdPtL!O#f$TI?ku`}TU}64J-zXyNg4|a1)u;FVzJ`+bF-SK zrjea939Tq-2-RyqM~|B|R>*GzTiU&k<}D_7Ke`n`RGuHOF}7?Yu?<-|P{(f6yFaB> zCDm`=u9HfOZ$~6jT)I@5q9Q$A_n-gdA2=X?@Ia$hzg}AlckZzE_G*DZefY3GBt+-s zr49_#96w%sJ2^VCdPayXKBUj6c@kYxC{xMQf9nM$cO_8(A%M_cBegkj+VLj8$L+RN=%70AzoJdo=!##$gry9J9v%jRwX=Doa zF15^~KTS&2r0Pg+_bIG~A5g6WfQq~`t9{hy9`G9@tk)E2YuCn&9b2kMlSdP|G>)M& z_EZ#CT$s0le&*1*(gYj}iUh?yfbGsK|zIfc6l>q$m8N(FI{xCFn6v-DpeZj%F0S95GdBHsXC3WN<}T&5MN3V z5?4ZJ&zm(?)I*ZG5p0R;Kz)W#iQ2i6$>LflNo)xs;!3H37ip`yw1WqA5=k-pT39HA zLglDY|7&O58pQMG><1rc4H|fjhC)JgK0d`X%(ApgMiz0eIGBkg=`($^=b^u=zhX

    77p>7)$9%uNq%`kD}Kb{w*Y( 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 Date: Fri, 28 Mar 2025 05:48:50 -0500 Subject: [PATCH 6/8] Update CI --- .github/workflows/doc-deployment.yml | 26 ++++++++++++++++++++++++++ .github/workflows/doxygen-gh-pages.yml | 17 ----------------- 2 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/doc-deployment.yml delete mode 100644 .github/workflows/doxygen-gh-pages.yml diff --git a/.github/workflows/doc-deployment.yml b/.github/workflows/doc-deployment.yml new file mode 100644 index 0000000..a1f767f --- /dev/null +++ b/.github/workflows/doc-deployment.yml @@ -0,0 +1,26 @@ +name: doc-deployment + +on: [push, pull_request] + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v1 + with: + python-version: '3.x' + + - name: Install dependencies + run: pip install -v ford==6.1.17 + + - name: Build Documentation + run: ford docs.md + + - uses: JamesIves/github-pages-deploy-action@3.7.1 + if: github.event_name == 'push' && github.repository == 'jchristopherson/fstats' && ( startsWith( github.ref, 'refs/tags/' ) || github.ref == 'refs/heads/main' ) + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: gh-pages + FOLDER: doc + CLEAN: true \ No newline at end of file diff --git a/.github/workflows/doxygen-gh-pages.yml b/.github/workflows/doxygen-gh-pages.yml deleted file mode 100644 index 905c6d1..0000000 --- a/.github/workflows/doxygen-gh-pages.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Doxygen GitHub Pages Deploy Action - -on: - push: - branches: - - master - - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: DenverCoder1/doxygen-github-pages-action@v1.2.0 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - config_file: docs/Doxyfile From 3739c1683bc01ea8c7ab4613490f3580bd45e65b Mon Sep 17 00:00:00 2001 From: jchristopherson Date: Fri, 28 Mar 2025 07:53:52 -0500 Subject: [PATCH 7/8] Update examples --- examples/CMakeLists.txt | 152 +++++++++--------- .../{fplot_2d_arrow.f90 => arrow_example.f90} | 0 ...lot_clear_1.f90 => clear_plot_example.f90} | 3 - ..._2.f90 => colored_vector_plot_example.f90} | 2 - ...lormap.f90 => custom_colormap_example.f90} | 2 - ...clr_1.f90 => data_dependent_colors_2d.f90} | 2 - ...clr_1.f90 => data_dependent_colors_3d.f90} | 1 - ...{fplot_err_1.f90 => error_bar_example.f90} | 0 ..._2.f90 => fill_between_curves_example.f90} | 0 ...ot_fill_1.f90 => filled_curve_example.f90} | 0 examples/fplot_png_1.f90 | 69 -------- .../{fplot_2d_1.f90 => generic_2d_plot.f90} | 2 - .../{fplot_3d_1.f90 => generic_3d_plot.f90} | 5 - ..._histogram_1.f90 => histogram_example.f90} | 4 +- ...{fplot_2d_4.f90 => latex_plot_example.f90} | 3 +- ...{fplot_legend_1.f90 => legend_example.f90} | 4 +- ...plot_log_1.f90 => log_scaling_example.f90} | 7 +- ...ot_multi_1.f90 => multiplot_example_1.f90} | 4 - ...ot_multi_2.f90 => multiplot_example_2.f90} | 0 ...f90 => multiplot_save_to_file_example.f90} | 9 +- ...{fplot_2d_7.f90 => plot_label_example.f90} | 7 - .../{fplot_2d_3.f90 => png_plot_example.f90} | 3 +- ...{fplot_2d_5.f90 => png_plot_example_2.f90} | 3 +- ...lot_polar_1.f90 => polar_plot_example.f90} | 2 - ...plot_2d_6.f90 => save_to_file_example.f90} | 7 - ..._2d_8.f90 => secondary_y_axis_example.f90} | 2 - ...fplot_2d_9.f90 => square_axis_example.f90} | 2 - ...ot_surf_2.f90 => surface_plot_example.f90} | 2 - ..._surf_3.f90 => surface_plot_example_2.f90} | 2 - ....f90 => triangle_mesh_surface_example.f90} | 2 - ...d2d_1.f90 => triangulation_2d_example.f90} | 2 - ... => triangulation_2d_location_example.f90} | 2 - ...f90 => variable_point_size_2d_example.f90} | 0 ...f90 => variable_point_size_3d_example.f90} | 0 ...t_vector_1.f90 => vector_plot_example.f90} | 2 - ...rf_1.f90 => wireframe_surface_example.f90} | 2 - .../{fplot_2d_2.f90 => zero_axis_example.f90} | 2 - 37 files changed, 89 insertions(+), 222 deletions(-) rename examples/{fplot_2d_arrow.f90 => arrow_example.f90} (100%) rename examples/{fplot_clear_1.f90 => clear_plot_example.f90} (94%) rename examples/{fplot_vector_2.f90 => colored_vector_plot_example.f90} (98%) rename examples/{fplot_custom_colormap.f90 => custom_colormap_example.f90} (98%) rename examples/{fplot_2d_clr_1.f90 => data_dependent_colors_2d.f90} (96%) rename examples/{fplot_3d_clr_1.f90 => data_dependent_colors_3d.f90} (96%) rename examples/{fplot_err_1.f90 => error_bar_example.f90} (100%) rename examples/{fplot_fill_2.f90 => fill_between_curves_example.f90} (100%) rename examples/{fplot_fill_1.f90 => filled_curve_example.f90} (100%) delete mode 100644 examples/fplot_png_1.f90 rename examples/{fplot_2d_1.f90 => generic_2d_plot.f90} (98%) rename examples/{fplot_3d_1.f90 => generic_3d_plot.f90} (92%) rename examples/{fplot_histogram_1.f90 => histogram_example.f90} (84%) rename examples/{fplot_2d_4.f90 => latex_plot_example.f90} (97%) rename examples/{fplot_legend_1.f90 => legend_example.f90} (91%) rename examples/{fplot_log_1.f90 => log_scaling_example.f90} (95%) rename examples/{fplot_multi_1.f90 => multiplot_example_1.f90} (93%) rename examples/{fplot_multi_2.f90 => multiplot_example_2.f90} (100%) rename examples/{fplot_multi_3.f90 => multiplot_save_to_file_example.f90} (96%) rename examples/{fplot_2d_7.f90 => plot_label_example.f90} (88%) rename examples/{fplot_2d_3.f90 => png_plot_example.f90} (97%) rename examples/{fplot_2d_5.f90 => png_plot_example_2.f90} (97%) rename examples/{fplot_polar_1.f90 => polar_plot_example.f90} (97%) rename examples/{fplot_2d_6.f90 => save_to_file_example.f90} (86%) rename examples/{fplot_2d_8.f90 => secondary_y_axis_example.f90} (98%) rename examples/{fplot_2d_9.f90 => square_axis_example.f90} (97%) rename examples/{fplot_surf_2.f90 => surface_plot_example.f90} (98%) rename examples/{fplot_surf_3.f90 => surface_plot_example_2.f90} (98%) rename examples/{fplot_tri_surf_1.f90 => triangle_mesh_surface_example.f90} (98%) rename examples/{fplot_d2d_1.f90 => triangulation_2d_example.f90} (98%) rename examples/{fplot_d2d_2.f90 => triangulation_2d_location_example.f90} (99%) rename examples/{fplot_variable_point_size.f90 => variable_point_size_2d_example.f90} (100%) rename examples/{fplot_3d_variable_point_size.f90 => variable_point_size_3d_example.f90} (100%) rename examples/{fplot_vector_1.f90 => vector_plot_example.f90} (98%) rename examples/{fplot_surf_1.f90 => wireframe_surface_example.f90} (98%) rename examples/{fplot_2d_2.f90 => zero_axis_example.f90} (98%) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c2c2227..fa76007 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,144 +1,140 @@ # Example 1 -add_executable(fplot_2d_1 fplot_2d_1.f90) -target_link_libraries(fplot_2d_1 fplot) +add_executable(generic_2d_plot generic_2d_plot.f90) +target_link_libraries(generic_2d_plot fplot) # Example 2 -add_executable(fplot_2d_2 fplot_2d_2.f90) -target_link_libraries(fplot_2d_2 fplot) +add_executable(zero_axis_example zero_axis_example.f90) +target_link_libraries(zero_axis_example fplot) # Example 3 -add_executable(fplot_png_1 fplot_png_1.f90) -target_link_libraries(fplot_png_1 fplot) +add_executable(generic_3d_plot generic_3d_plot.f90) +target_link_libraries(generic_3d_plot fplot) # Example 4 -add_executable(fplot_3d_1 fplot_3d_1.f90) -target_link_libraries(fplot_3d_1 fplot) +add_executable(wireframe_surface_example wireframe_surface_example.f90) +target_link_libraries(wireframe_surface_example fplot) # Example 5 -add_executable(fplot_surf_1 fplot_surf_1.f90) -target_link_libraries(fplot_surf_1 fplot) +add_executable(png_plot_example png_plot_example.f90) +target_link_libraries(png_plot_example fplot) # Example 6 -add_executable(fplot_2d_3 fplot_2d_3.f90) -target_link_libraries(fplot_2d_3 fplot) +add_executable(latex_plot_example latex_plot_example.f90) +target_link_libraries(latex_plot_example fplot) # Example 7 -add_executable(fplot_2d_4 fplot_2d_4.f90) -target_link_libraries(fplot_2d_4 fplot) +add_executable(png_plot_example_2 png_plot_example_2.f90) +target_link_libraries(png_plot_example_2 fplot) # Example 8 -add_executable(fplot_2d_5 fplot_2d_5.f90) -target_link_libraries(fplot_2d_5 fplot) +add_executable(save_to_file_example save_to_file_example.f90) +target_link_libraries(save_to_file_example fplot) # Example 9 -add_executable(fplot_2d_6 fplot_2d_6.f90) -target_link_libraries(fplot_2d_6 fplot) +add_executable(plot_label_example plot_label_example.f90) +target_link_libraries(plot_label_example fplot) # Example 10 -add_executable(fplot_2d_7 fplot_2d_7.f90) -target_link_libraries(fplot_2d_7 fplot) +add_executable(secondary_y_axis_example secondary_y_axis_example.f90) +target_link_libraries(secondary_y_axis_example fplot) # Example 11 -add_executable(fplot_2d_8 fplot_2d_8.f90) -target_link_libraries(fplot_2d_8 fplot) +add_executable(surface_plot_example surface_plot_example.f90) +target_link_libraries(surface_plot_example fplot) # Example 12 -add_executable(fplot_surf_2 fplot_surf_2.f90) -target_link_libraries(fplot_surf_2 fplot) +add_executable(surface_plot_example_2 surface_plot_example_2.f90) +target_link_libraries(surface_plot_example_2 fplot) # Example 13 -add_executable(fplot_surf_3 fplot_surf_3.f90) -target_link_libraries(fplot_surf_3 fplot) +add_executable(multiplot_example_1 multiplot_example_1.f90) +target_link_libraries(multiplot_example_1 fplot) # Example 14 -add_executable(fplot_multi_1 fplot_multi_1.f90) -target_link_libraries(fplot_multi_1 fplot) +add_executable(multiplot_example_2 multiplot_example_2.f90) +target_link_libraries(multiplot_example_2 fplot) # Example 15 -add_executable(fplot_multi_2 fplot_multi_2.f90) -target_link_libraries(fplot_multi_2 fplot) +add_executable(log_scaling_example log_scaling_example.f90) +target_link_libraries(log_scaling_example fplot) # Example 16 -add_executable(fplot_log_1 fplot_log_1.f90) -target_link_libraries(fplot_log_1 fplot) +add_executable(multiplot_save_to_file_example multiplot_save_to_file_example.f90) +target_link_libraries(multiplot_save_to_file_example fplot) # Example 17 -add_executable(fplot_multi_3 fplot_multi_3.f90) -target_link_libraries(fplot_multi_3 fplot) +add_executable(error_bar_example error_bar_example.f90) +target_link_libraries(error_bar_example fplot) # Example 18 -add_executable(fplot_err_1 fplot_err_1.f90) -target_link_libraries(fplot_err_1 fplot) +add_executable(clear_plot_example clear_plot_example.f90) +target_link_libraries(clear_plot_example fplot) # Example 19 -add_executable(fplot_clear_1 fplot_clear_1.f90) -target_link_libraries(fplot_clear_1 fplot) +add_executable(triangulation_2d_example triangulation_2d_example.f90) +target_link_libraries(triangulation_2d_example fplot) # Example 20 -add_executable(fplot_d2d_1 fplot_d2d_1.f90) -target_link_libraries(fplot_d2d_1 fplot) +add_executable(triangle_mesh_surface_example triangle_mesh_surface_example.f90) +target_link_libraries(triangle_mesh_surface_example fplot) # Example 21 -add_executable(fplot_tri_surf_1 fplot_tri_surf_1.f90) -target_link_libraries(fplot_tri_surf_1 fplot) +add_executable(triangulation_2d_location_example triangulation_2d_location_example.f90) +target_link_libraries(triangulation_2d_location_example fplot) # Example 22 -add_executable(fplot_d2d_2 fplot_d2d_2.f90) -target_link_libraries(fplot_d2d_2 fplot) +add_executable(data_dependent_colors_2d data_dependent_colors_2d.f90) +target_link_libraries(data_dependent_colors_2d fplot) # Example 23 -add_executable(fplot_2d_clr_1 fplot_2d_clr_1.f90) -target_link_libraries(fplot_2d_clr_1 fplot) +add_executable(data_dependent_colors_3d data_dependent_colors_3d.f90) +target_link_libraries(data_dependent_colors_3d fplot) # Example 24 -add_executable(fplot_3d_clr_1 fplot_3d_clr_1.f90) -target_link_libraries(fplot_3d_clr_1 fplot) +add_executable(vector_plot_example vector_plot_example.f90) +target_link_libraries(vector_plot_example fplot) # Example 25 -add_executable(fplot_vector_1 fplot_vector_1.f90) -target_link_libraries(fplot_vector_1 fplot) +add_executable(colored_vector_plot_example colored_vector_plot_example.f90) +target_link_libraries(colored_vector_plot_example fplot) # Example 26 -add_executable(fplot_vector_2 fplot_vector_2.f90) -target_link_libraries(fplot_vector_2 fplot) +add_executable(polar_plot_example polar_plot_example.f90) +target_link_libraries(polar_plot_example fplot) # Example 27 -add_executable(fplot_polar_1 fplot_polar_1.f90) -target_link_libraries(fplot_polar_1 fplot) +add_executable(square_axis_example square_axis_example.f90) +target_link_libraries(square_axis_example fplot) # Example 28 -add_executable(fplot_2d_9 fplot_2d_9.f90) -target_link_libraries(fplot_2d_9 fplot) +add_executable(filled_curve_example filled_curve_example.f90) +target_link_libraries(filled_curve_example fplot) # Example 29 -add_executable(fplot_fill_1 fplot_fill_1.f90) -target_link_libraries(fplot_fill_1 fplot) +add_executable(fill_between_curves_example fill_between_curves_example.f90) +target_link_libraries(fill_between_curves_example fplot) # Example 30 -add_executable(fplot_fill_2 fplot_fill_2.f90) -target_link_libraries(fplot_fill_2 fplot) +add_executable(histogram_example histogram_example.f90) +target_link_libraries(histogram_example fplot) # Example 31 -add_executable(fplot_histogram_1 fplot_histogram_1.f90) -target_link_libraries(fplot_histogram_1 fplot) +add_executable(legend_example legend_example.f90) +target_link_libraries(legend_example fplot) # Example 32 -add_executable(fplot_legend_1 fplot_legend_1.f90) -target_link_libraries(fplot_legend_1 fplot) +add_executable(arrow_example arrow_example.f90) +target_link_libraries(arrow_example fplot) -# Example 33 - Arrows (2D) -add_executable(fplot_2d_arrow fplot_2d_arrow.f90) -target_link_libraries(fplot_2d_arrow fplot) +# Example 33 +add_executable(custom_colormap_example custom_colormap_example.f90) +target_link_libraries(custom_colormap_example fplot) +target_link_libraries(custom_colormap_example forcolormap) -# Example 34 - Custom Colormap -add_executable(fplot_custom_colormap fplot_custom_colormap.f90) -target_link_libraries(fplot_custom_colormap fplot) -target_link_libraries(fplot_custom_colormap forcolormap) +# Example 34 +add_executable(variable_point_size_2d_example variable_point_size_2d_example.f90) +target_link_libraries(variable_point_size_2d_example fplot) -# Example 35 - Variable Point Size -add_executable(fplot_variable_point_size fplot_variable_point_size.f90) -target_link_libraries(fplot_variable_point_size fplot) - -# Example 36 - 3D Variable Point Size -add_executable(fplot_3d_variable_point_size fplot_3d_variable_point_size.f90) -target_link_libraries(fplot_3d_variable_point_size fplot) \ No newline at end of file +# Example 35 +add_executable(variable_point_size_3d_example variable_point_size_3d_example.f90) +target_link_libraries(variable_point_size_3d_example fplot) \ No newline at end of file diff --git a/examples/fplot_2d_arrow.f90 b/examples/arrow_example.f90 similarity index 100% rename from examples/fplot_2d_arrow.f90 rename to examples/arrow_example.f90 diff --git a/examples/fplot_clear_1.f90 b/examples/clear_plot_example.f90 similarity index 94% rename from examples/fplot_clear_1.f90 rename to examples/clear_plot_example.f90 index 53cdfd3..61266f8 100644 --- a/examples/fplot_clear_1.f90 +++ b/examples/clear_plot_example.f90 @@ -1,5 +1,3 @@ -! fplot_clear_1.f90 - program example use iso_fortran_env use fplot_core @@ -31,7 +29,6 @@ program example ! Build the second plot call d2%set_name("|sin(x)|") call d2%define_data(x, y2) - call plt%push(d1) call plt%push(d2) call plt%draw() end program \ No newline at end of file diff --git a/examples/fplot_vector_2.f90 b/examples/colored_vector_plot_example.f90 similarity index 98% rename from examples/fplot_vector_2.f90 rename to examples/colored_vector_plot_example.f90 index 6a15f5d..ad8de45 100644 --- a/examples/fplot_vector_2.f90 +++ b/examples/colored_vector_plot_example.f90 @@ -1,5 +1,3 @@ -! fplot_vector_2.f90 - program example use iso_fortran_env use fplot_core diff --git a/examples/fplot_custom_colormap.f90 b/examples/custom_colormap_example.f90 similarity index 98% rename from examples/fplot_custom_colormap.f90 rename to examples/custom_colormap_example.f90 index 390fef1..566c0d7 100644 --- a/examples/fplot_custom_colormap.f90 +++ b/examples/custom_colormap_example.f90 @@ -1,5 +1,3 @@ -! fplot_surf_2.f90 - program example use fplot_core use iso_fortran_env diff --git a/examples/fplot_2d_clr_1.f90 b/examples/data_dependent_colors_2d.f90 similarity index 96% rename from examples/fplot_2d_clr_1.f90 rename to examples/data_dependent_colors_2d.f90 index fdcc910..baad8ba 100644 --- a/examples/fplot_2d_clr_1.f90 +++ b/examples/data_dependent_colors_2d.f90 @@ -1,5 +1,3 @@ -! fplot_2d_clr_1.f90 - program example use iso_fortran_env use fplot_core diff --git a/examples/fplot_3d_clr_1.f90 b/examples/data_dependent_colors_3d.f90 similarity index 96% rename from examples/fplot_3d_clr_1.f90 rename to examples/data_dependent_colors_3d.f90 index 7c8c9a3..74637a5 100644 --- a/examples/fplot_3d_clr_1.f90 +++ b/examples/data_dependent_colors_3d.f90 @@ -39,7 +39,6 @@ program example call d1%define_data(x, y, z, x * y) ! Set up the data set - call d1%set_line_color(CLR_BLUE) call d1%set_line_width(2.0) ! Add the data to the plot diff --git a/examples/fplot_err_1.f90 b/examples/error_bar_example.f90 similarity index 100% rename from examples/fplot_err_1.f90 rename to examples/error_bar_example.f90 diff --git a/examples/fplot_fill_2.f90 b/examples/fill_between_curves_example.f90 similarity index 100% rename from examples/fplot_fill_2.f90 rename to examples/fill_between_curves_example.f90 diff --git a/examples/fplot_fill_1.f90 b/examples/filled_curve_example.f90 similarity index 100% rename from examples/fplot_fill_1.f90 rename to examples/filled_curve_example.f90 diff --git a/examples/fplot_png_1.f90 b/examples/fplot_png_1.f90 deleted file mode 100644 index 9f86358..0000000 --- a/examples/fplot_png_1.f90 +++ /dev/null @@ -1,69 +0,0 @@ -! fplot_png_1.f90 - -program example - use, intrinsic :: iso_fortran_env - use fplot_core - implicit none - - ! Parameters - integer(int32), parameter :: n = 1000 - real(real64), parameter :: dx = 1.0d-2 - - ! Local Variables - integer(int32) :: i - real(real64), dimension(n) :: x, y1, y2 - type(plot_2d) :: plt - type(plot_data_2d) :: d1, d2 - class(plot_axis), pointer :: xAxis, yAxis - type(legend), pointer :: lgnd - - ! Initialize the plot object - call plt%initialize(GNUPLOT_TERMINAL_PNG) - - ! Set plot properties - call plt%set_draw_border(.false.) - call plt%set_show_gridlines(.false.) - - ! Define the legend location - lgnd => plt%get_legend() - call lgnd%set_draw_inside_axes(.false.) - - ! Define titles - call plt%set_title("2D Example Plot 2") - - xAxis => plt%get_x_axis() - call xAxis%set_title("X Axis") - call xAxis%set_zero_axis(.true.) - call xAxis%set_zero_axis_line_width(1.0) - - yAxis => plt%get_y_axis() - call yAxis%set_title("Y Axis") - - ! Define the data, and then add it to the plot - x(1) = 0.0d0 - do i = 2, n - x(i) = x(i-1) + dx - end do - y1 = sin(5.0d0 * x) - y2 = 2.0d0 * cos(2.0d0 * x) - - call d1%define_data(x, y1) - call d2%define_data(x, y2) - - ! Define properties for each data set - call d1%set_name("Data Set 1") - call d1%set_line_color(CLR_BLUE) - call d1%set_line_width(1.0) - - call d2%set_name("Data Set 2") - call d2%set_line_color(CLR_GREEN) - call d2%set_line_style(LINE_DASHED) - call d2%set_line_width(2.0) - - ! Add the data sets to the plot - call plt%push(d1) - call plt%push(d2) - - ! Let GNUPLOT draw the plot - call plt%draw() -end program \ No newline at end of file diff --git a/examples/fplot_2d_1.f90 b/examples/generic_2d_plot.f90 similarity index 98% rename from examples/fplot_2d_1.f90 rename to examples/generic_2d_plot.f90 index f068d87..f41170b 100644 --- a/examples/fplot_2d_1.f90 +++ b/examples/generic_2d_plot.f90 @@ -1,5 +1,3 @@ -! fplot_2d_1.f90 - program example use, intrinsic :: iso_fortran_env use fplot_core diff --git a/examples/fplot_3d_1.f90 b/examples/generic_3d_plot.f90 similarity index 92% rename from examples/fplot_3d_1.f90 rename to examples/generic_3d_plot.f90 index 8855594..fba94a2 100644 --- a/examples/fplot_3d_1.f90 +++ b/examples/generic_3d_plot.f90 @@ -1,5 +1,3 @@ -! fplot_3d_1.f90 - program example use, intrinsic :: iso_fortran_env use fplot_core @@ -36,9 +34,6 @@ program example z = 2.0d0 * t call d1%define_data(x, y, z) - - ! Set up the data set - call d1%set_line_color(CLR_BLUE) call d1%set_line_width(2.0) ! Add the data to the plot diff --git a/examples/fplot_histogram_1.f90 b/examples/histogram_example.f90 similarity index 84% rename from examples/fplot_histogram_1.f90 rename to examples/histogram_example.f90 index 87d3ac9..b190ebe 100644 --- a/examples/fplot_histogram_1.f90 +++ b/examples/histogram_example.f90 @@ -7,7 +7,7 @@ program example integer(int32), parameter :: n = 5000 integer(int32), parameter :: nbins = 12 real(real64) :: x(n), u(n), v(n) - type(plot_2d) :: plt + type(plot_bar) :: plt ! can also be plot_2d type(plot_data_histogram) :: pd1 ! Initialization @@ -22,7 +22,7 @@ program example ! Plot the data call pd1%set_bin_count(nbins) ! optiona, but must be done prior to define_data is used call pd1%define_data(x) - call pd1%set_transparency(0.2) ! optional - for illustration purposes + call pd1%set_transparency(0.5) ! optional - for illustration purposes call plt%push(pd1) call plt%draw() end program \ No newline at end of file diff --git a/examples/fplot_2d_4.f90 b/examples/latex_plot_example.f90 similarity index 97% rename from examples/fplot_2d_4.f90 rename to examples/latex_plot_example.f90 index c92c7f3..59f4e34 100644 --- a/examples/fplot_2d_4.f90 +++ b/examples/latex_plot_example.f90 @@ -1,5 +1,3 @@ -! fplot_2d_4.f90 - program example use iso_fortran_env use fplot_core @@ -34,6 +32,7 @@ program example ! Put the legend in the upper left corner of the plot leg => plt%get_legend() + call leg%set_is_visible(.true.) call leg%set_horizontal_position(LEGEND_LEFT) call leg%set_vertical_position(LEGEND_TOP) diff --git a/examples/fplot_legend_1.f90 b/examples/legend_example.f90 similarity index 91% rename from examples/fplot_legend_1.f90 rename to examples/legend_example.f90 index 0a9c39c..788845f 100644 --- a/examples/fplot_legend_1.f90 +++ b/examples/legend_example.f90 @@ -33,8 +33,8 @@ program example call leg%set_is_visible(.true.) call leg%set_is_opaque(.false.) call leg%set_draw_border(.false.) - call leg%set_horizontal_position(LEGEND_LEFT) - call leg%set_vertical_position(LEGEND_CENTER) + call leg%set_horizontal_position(LEGEND_RIGHT) + call leg%set_vertical_position(LEGEND_BOTTOM) ! Add the data to the plot call plt%push(dataset) diff --git a/examples/fplot_log_1.f90 b/examples/log_scaling_example.f90 similarity index 95% rename from examples/fplot_log_1.f90 rename to examples/log_scaling_example.f90 index eb3ecb4..8645029 100644 --- a/examples/fplot_log_1.f90 +++ b/examples/log_scaling_example.f90 @@ -1,5 +1,3 @@ -! fplot_log_1.f90 - ! This example illustrates the frequency response of the following mechanical ! system. ! @@ -56,6 +54,7 @@ program example type(plot_2d) :: plt type(plot_data_2d) :: d1, d2 class(plot_axis), pointer :: xAxis, yAxis + class(legend), pointer :: lgnd ! Generate a frequency vector from 10 Hz to 1 kHz freq = logspace(1.0d0, 3.0d0, npts) @@ -73,6 +72,10 @@ program example call plt%set_font_size(14) xAxis => plt%get_x_axis() yAxis => plt%get_y_axis() + lgnd => plt%get_legend() + + call lgnd%set_is_visible(.true.) + call lgnd%set_draw_border(.false.) call xAxis%set_title("Frequency [Hz]") call yAxis%set_title("Amplitude (X / Y)") diff --git a/examples/fplot_multi_1.f90 b/examples/multiplot_example_1.f90 similarity index 93% rename from examples/fplot_multi_1.f90 rename to examples/multiplot_example_1.f90 index 575f84b..7c1700f 100644 --- a/examples/fplot_multi_1.f90 +++ b/examples/multiplot_example_1.f90 @@ -1,5 +1,3 @@ -! fplot_multi_1.f90 - program example use iso_fortran_env use fplot_core @@ -38,12 +36,10 @@ program example call y2Axis%set_title("Y2") call d1%set_name("Data Set 1") - call d1%set_line_color(CLR_BLUE) call d1%set_line_width(2.0) call d1%define_data(x1, y1) call d2%set_name("Data Set 2") - call d2%set_line_color(CLR_GREEN) call d2%set_line_width(2.0) call d2%define_data(x2, y2) diff --git a/examples/fplot_multi_2.f90 b/examples/multiplot_example_2.f90 similarity index 100% rename from examples/fplot_multi_2.f90 rename to examples/multiplot_example_2.f90 diff --git a/examples/fplot_multi_3.f90 b/examples/multiplot_save_to_file_example.f90 similarity index 96% rename from examples/fplot_multi_3.f90 rename to examples/multiplot_save_to_file_example.f90 index 86866c7..d6568e6 100644 --- a/examples/fplot_multi_3.f90 +++ b/examples/multiplot_save_to_file_example.f90 @@ -1,5 +1,3 @@ -! fplot_multi_3.f90 - ! This example illustrates the frequency response of the following mechanical ! system. ! @@ -76,6 +74,9 @@ program example call plt%initialize() xAxis => plt%get_x_axis() yAxis => plt%get_y_axis() + lgnd => plt%get_legend() + + call lgnd%set_is_visible(.true.) call xAxis%set_title("Frequency [Hz]") call yAxis%set_title("Amplitude (X / Y)") @@ -117,10 +118,6 @@ program example call pplt%push(d3) call pplt%push(d4) - ! Don't use a legend on the phase plot - lgnd => pplt%get_legend() - call lgnd%set_is_visible(.false.) - ! Save the plot to file call mplt%set(1, 1, plt) call mplt%set(2, 1, pplt) diff --git a/examples/fplot_2d_7.f90 b/examples/plot_label_example.f90 similarity index 88% rename from examples/fplot_2d_7.f90 rename to examples/plot_label_example.f90 index c3f61cd..b326873 100644 --- a/examples/fplot_2d_7.f90 +++ b/examples/plot_label_example.f90 @@ -1,5 +1,3 @@ -! fplot_2d_7.f90 - program example use fplot_core use iso_fortran_env @@ -11,7 +9,6 @@ program example type(plot_2d) :: plt type(plot_data_2d) :: dataset class(plot_axis), pointer :: xAxis, yAxis - type(legend), pointer :: leg type(plot_label) :: lbl ! Build a data set @@ -39,10 +36,6 @@ program example yAxis => plt%get_y_axis() call yAxis%set_title("Y Axis") - ! Hide the legend - leg => plt%get_legend() - call leg%set_is_visible(.false.) - ! Add the data to the plot call plt%push(dataset) diff --git a/examples/fplot_2d_3.f90 b/examples/png_plot_example.f90 similarity index 97% rename from examples/fplot_2d_3.f90 rename to examples/png_plot_example.f90 index 2611354..853f05c 100644 --- a/examples/fplot_2d_3.f90 +++ b/examples/png_plot_example.f90 @@ -1,5 +1,3 @@ -! fplot_2d_3.f90 - program example use iso_fortran_env use fplot_core @@ -33,6 +31,7 @@ program example ! Put the legend in the upper left corner of the plot leg => plt%get_legend() + call leg%set_is_visible(.true.) call leg%set_horizontal_position(LEGEND_LEFT) call leg%set_vertical_position(LEGEND_TOP) diff --git a/examples/fplot_2d_5.f90 b/examples/png_plot_example_2.f90 similarity index 97% rename from examples/fplot_2d_5.f90 rename to examples/png_plot_example_2.f90 index a2b7764..884a990 100644 --- a/examples/fplot_2d_5.f90 +++ b/examples/png_plot_example_2.f90 @@ -1,5 +1,3 @@ -! fplot_2d_5.f90 - program example use iso_fortran_env use fplot_core @@ -34,6 +32,7 @@ program example ! Put the legend outside the axes, and remove it's border leg => plt%get_legend() + call leg%set_is_visible(.true.) call leg%set_draw_inside_axes(.false.) call leg%set_draw_border(.false.) diff --git a/examples/fplot_polar_1.f90 b/examples/polar_plot_example.f90 similarity index 97% rename from examples/fplot_polar_1.f90 rename to examples/polar_plot_example.f90 index 938542e..5be0615 100644 --- a/examples/fplot_polar_1.f90 +++ b/examples/polar_plot_example.f90 @@ -1,5 +1,3 @@ -! fplot_polar_1.f90 - program example use iso_fortran_env use fplot_core diff --git a/examples/fplot_2d_6.f90 b/examples/save_to_file_example.f90 similarity index 86% rename from examples/fplot_2d_6.f90 rename to examples/save_to_file_example.f90 index 386fa10..28b3f79 100644 --- a/examples/fplot_2d_6.f90 +++ b/examples/save_to_file_example.f90 @@ -1,5 +1,3 @@ -! fplot_2d_6.f90 - program example use fplot_core use iso_fortran_env @@ -11,7 +9,6 @@ program example type(plot_2d) :: plt type(plot_data_2d) :: dataset class(plot_axis), pointer :: xAxis, yAxis - type(legend), pointer :: leg ! Build a data set to plot x = linspace(0.0d0, 10.0d0, npts) @@ -29,10 +26,6 @@ program example yAxis => plt%get_y_axis() call yAxis%set_title("Y Axis") - ! Hide the legend - leg => plt%get_legend() - call leg%set_is_visible(.false.) - ! Add the data to the plot call plt%push(dataset) diff --git a/examples/fplot_2d_8.f90 b/examples/secondary_y_axis_example.f90 similarity index 98% rename from examples/fplot_2d_8.f90 rename to examples/secondary_y_axis_example.f90 index 99282c5..540c54b 100644 --- a/examples/fplot_2d_8.f90 +++ b/examples/secondary_y_axis_example.f90 @@ -1,5 +1,3 @@ -! fplot_2d_8.f90 - program example use fplot_core use iso_fortran_env diff --git a/examples/fplot_2d_9.f90 b/examples/square_axis_example.f90 similarity index 97% rename from examples/fplot_2d_9.f90 rename to examples/square_axis_example.f90 index c4a294e..f4774e8 100644 --- a/examples/fplot_2d_9.f90 +++ b/examples/square_axis_example.f90 @@ -1,5 +1,3 @@ -! fplot_2d_9.f90 - program example use iso_fortran_env use fplot_core diff --git a/examples/fplot_surf_2.f90 b/examples/surface_plot_example.f90 similarity index 98% rename from examples/fplot_surf_2.f90 rename to examples/surface_plot_example.f90 index 8bf9dd6..f7f7191 100644 --- a/examples/fplot_surf_2.f90 +++ b/examples/surface_plot_example.f90 @@ -1,5 +1,3 @@ -! fplot_surf_2.f90 - program example use fplot_core use iso_fortran_env diff --git a/examples/fplot_surf_3.f90 b/examples/surface_plot_example_2.f90 similarity index 98% rename from examples/fplot_surf_3.f90 rename to examples/surface_plot_example_2.f90 index 6458f51..0fa2926 100644 --- a/examples/fplot_surf_3.f90 +++ b/examples/surface_plot_example_2.f90 @@ -1,5 +1,3 @@ -! fplot_surf_3.f90 - program example use, intrinsic :: iso_fortran_env use fplot_core diff --git a/examples/fplot_tri_surf_1.f90 b/examples/triangle_mesh_surface_example.f90 similarity index 98% rename from examples/fplot_tri_surf_1.f90 rename to examples/triangle_mesh_surface_example.f90 index 8586b9c..deeb7bf 100644 --- a/examples/fplot_tri_surf_1.f90 +++ b/examples/triangle_mesh_surface_example.f90 @@ -1,5 +1,3 @@ -! fplot_tri_surf_1.f90 - program example use iso_fortran_env use fplot_core diff --git a/examples/fplot_d2d_1.f90 b/examples/triangulation_2d_example.f90 similarity index 98% rename from examples/fplot_d2d_1.f90 rename to examples/triangulation_2d_example.f90 index 0b3736d..d0745d2 100644 --- a/examples/fplot_d2d_1.f90 +++ b/examples/triangulation_2d_example.f90 @@ -1,5 +1,3 @@ -! fplot_d2d_1.f90 - program example use iso_fortran_env use fplot_core diff --git a/examples/fplot_d2d_2.f90 b/examples/triangulation_2d_location_example.f90 similarity index 99% rename from examples/fplot_d2d_2.f90 rename to examples/triangulation_2d_location_example.f90 index 0515c96..f3a292e 100644 --- a/examples/fplot_d2d_2.f90 +++ b/examples/triangulation_2d_location_example.f90 @@ -1,5 +1,3 @@ -! fplot_d2d_2.f90 - program example use fplot_core use iso_fortran_env diff --git a/examples/fplot_variable_point_size.f90 b/examples/variable_point_size_2d_example.f90 similarity index 100% rename from examples/fplot_variable_point_size.f90 rename to examples/variable_point_size_2d_example.f90 diff --git a/examples/fplot_3d_variable_point_size.f90 b/examples/variable_point_size_3d_example.f90 similarity index 100% rename from examples/fplot_3d_variable_point_size.f90 rename to examples/variable_point_size_3d_example.f90 diff --git a/examples/fplot_vector_1.f90 b/examples/vector_plot_example.f90 similarity index 98% rename from examples/fplot_vector_1.f90 rename to examples/vector_plot_example.f90 index f55a340..0609757 100644 --- a/examples/fplot_vector_1.f90 +++ b/examples/vector_plot_example.f90 @@ -1,5 +1,3 @@ -! fplot_vector_1.f90 - program example use iso_fortran_env use fplot_core diff --git a/examples/fplot_surf_1.f90 b/examples/wireframe_surface_example.f90 similarity index 98% rename from examples/fplot_surf_1.f90 rename to examples/wireframe_surface_example.f90 index 73ce543..a9169c0 100644 --- a/examples/fplot_surf_1.f90 +++ b/examples/wireframe_surface_example.f90 @@ -1,5 +1,3 @@ -! fplot_surf_1.f90 - program example use, intrinsic :: iso_fortran_env use fplot_core diff --git a/examples/fplot_2d_2.f90 b/examples/zero_axis_example.f90 similarity index 98% rename from examples/fplot_2d_2.f90 rename to examples/zero_axis_example.f90 index ac0bd88..6305999 100644 --- a/examples/fplot_2d_2.f90 +++ b/examples/zero_axis_example.f90 @@ -1,5 +1,3 @@ -! fplot_2d_2.f90 - program example use, intrinsic :: iso_fortran_env use fplot_core From 9da0d2867114da0a50952922a9a823b78a1f9a57 Mon Sep 17 00:00:00 2001 From: jchristopherson Date: Fri, 28 Mar 2025 07:59:26 -0500 Subject: [PATCH 8/8] Clean up --- src/fplot_plot_data_tri_2d.f90 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/fplot_plot_data_tri_2d.f90 b/src/fplot_plot_data_tri_2d.f90 index 55ca117..703836e 100644 --- a/src/fplot_plot_data_tri_2d.f90 +++ b/src/fplot_plot_data_tri_2d.f90 @@ -36,7 +36,7 @@ module fplot_plot_data_tri_2d contains ! ------------------------------------------------------------------------------ - module function pdt2d_get_data_cmd(this) result(x) + function pdt2d_get_data_cmd(this) result(x) !! Gets the GNUPLOT command string describing the data to plot. class(plot_data_tri_2d), intent(in) :: this !! The plot_data_tri_2d object. @@ -131,7 +131,7 @@ module function pdt2d_get_data_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module function pdt2d_get_cmd(this) result(x) + function pdt2d_get_cmd(this) result(x) !! Gets the GNUPLOT command string for the object. class(plot_data_tri_2d), intent(in) :: this !! The plot_data_tri_2d object. @@ -182,7 +182,7 @@ module function pdt2d_get_cmd(this) result(x) end function ! ------------------------------------------------------------------------------ - module subroutine pdt2d_define_data(this, tri) + subroutine pdt2d_define_data(this, tri) !! Defines the data to plot. class(plot_data_tri_2d), intent(inout) :: this !! The plot_data_tri_2d object. @@ -200,7 +200,7 @@ module subroutine pdt2d_define_data(this, tri) end subroutine ! ------------------------------------------------------------------------------ - pure module function pdt2d_get_line_width(this) result(rst) + pure function pdt2d_get_line_width(this) result(rst) !! Gets the width of the lines used to draw the triangulation. class(plot_data_tri_2d), intent(in) :: this !! The plot_data_tri_2d object. @@ -210,7 +210,7 @@ pure module function pdt2d_get_line_width(this) result(rst) end function ! -------------------- - module subroutine pdt2d_set_line_width(this, x) + subroutine pdt2d_set_line_width(this, x) !! Sets the width of the lines used to draw the triangulation. class(plot_data_tri_2d), intent(inout) :: this !! The plot_data_tri_2d object. @@ -223,7 +223,7 @@ module subroutine pdt2d_set_line_width(this, x) end if end subroutine ! ------------------------------------------------------------------------------ - pure module function pdt2d_get_line_style(this) result(rst) + pure function pdt2d_get_line_style(this) result(rst) !! Gets the line style. class(plot_data_tri_2d), intent(in) :: this !! The plot_data_tri_2d object. @@ -244,7 +244,7 @@ pure module function pdt2d_get_line_style(this) result(rst) end function ! -------------------- - module subroutine pdt2d_set_line_style(this, x) + subroutine pdt2d_set_line_style(this, x) !! Sets the line style. class(plot_data_tri_2d), intent(inout) :: this !! The plot_data_tri_2d object.

    1o9dudIwwm71r}5>%rf-~aTHlm1%2@@ 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⁡{7?*yLyK&G1aLsw;_v%UEXpB&g9@aJktkR$;VGB@z_B}xVzA6k zn(05Zzx}HY--3VC7yu4oIB0(eC?FQzy#u5MT8+)vK4d!Ar4~C5IFpALEatNc^*%0A z-wB-GP;>wbfd)Zx5lj8mf;w&^nYy`qrZjC&I=kcxheJqikj%mu#b&l_o{^sS%Y*sS z=JL{>jvz<2{#^C-BWsqFRiJu8nEyQZ>*+t7=9Z7ii>cWYb<-ugu7=8oeo)?apR+?r za01>)*A)f4{%7MS@tPN~R%;p{|Hrbh85^rNBy7F>2IdMTL5}g<6+4LaP-GWodu|Z9 z!I$YKO1)Z#4Fc;t#+*JG3M8CcYga(nvXok3!i7AbBB?)K$3igk@x{0#?8W4y9bD8J zY@kQFyZs^o$U7REC4kc%aGTL5!tE-N;AVQgJK);B;lj4r$&~zVP~hPNf&z)elN0c{ z*MKcIAcaw75K{&9m%12cTPQVKq_XK{FT3l3@!ZKj--+$27*|OeY{IXUN>4s9iI^|% zakK`}K3r1d84px(%9yV)~( z4IJ!+%LNd#w{aOe`L4k0T|FF31&_bf<*76Pk=kL(B zLK0)Wz8pa<9@l{yf0|Dj?vr?zm>}ZC3BP#dW(#dRpr>6=E$d<%cb_|SY>!_Wg*kbh za>1`TtPwMtsa6V2SKhg9;6ffy;DWIEJsakZkvJ$ZDA82C^%alG4L`q?m{a*#w)*WY zCpSW+k)G?WLc0viHCde?*gYi6f3PH|qM*Mg^8i`4e@oMnm88D`OH|jM?_*JFW!Vks`GVd023v6Fm>23JDd1x^{>}Oj$tNJjbpiRrg8$`W^Loqu=S(-2{ojTF)>p+xl z)AAt2?184{S%O@;%z{_lHyvJ9h-{@qDc{$1UuIA}_iS#;OnwGC{GZw8wK1xf!kxq* zRxh7oFx(O1PbRUFFfu9X_7!(e4?A}93k>;=BfJlFT9ETuH0Jn{G}^@`*4y=y|1U6? zWM?9ax3=FYsBu=N$u0uquUrZZnsNYuNs@J(iWN_yx=ackS&~>b+JpzS!1hqpWn%bn zr*8RVK{{uUJQFy1(>kXSS{TLnLsj#`0|f-sBmhCQyZJitr6as9ILht_#IPv+U<-y+ zui%IHDHhCZCS6=Q*5qNwLvw&ImZ$(t5!}H6%dl;?xd&njHhrqJQ=Pi`BgsIVJuba8 zRI~>qLkDzD{l>^_m8Nc3U?MZiB1JP77aGL9P#Ua2*{Y6!%fs~-;m_w8#z^~1Wn7_9 zSwLsVk7<3`ustcymEe5>7{iT@pUlZ(*U}u;I}71X&&Gyk9{^#HUm|Q~N&^*D^1Mq+ znOyX{S^kU*x?M(8o-bj$As{MXkS|$&F8?JSaSxhqqq%vz*K4hB1h@rg`p$&fuFCfG z>pAdKE@syeE`PGYZQ;2L-pU7~N=xu5cMA4<0sGk#C%26XeRYwr`h(Vk+t%HfpvjJ{`GIyTAQQUX|&*>G-U*!9RK@~ zD-M0u-ih~N_9!aJ`xs@MHuYX<_PDp$0B;FW)GpNo#t6ef3=b&QgQS%I{A>sT!P7%w zI1~$=ju_|#CX%(LM!MYsN4zG1^%~{@Y5b`C$OO5_vZh!)1fX6Zpo{p6!Jxyfg-}PC zILb)tdQe|-G`)sYq3Hx${=20C_%iU0piB5co`w{q*}1t+Dy>tL-~pr7hgB;G{}?GC z9sK);wGMC1j9)mxbBRk2ReWDGK#8QY3*;{*uCiJ*@BWn=jzeK|1}j4YyT%~KcT(a> z-o*AJ)c}v2-N*VYg}IZmEHG^amaMAxLdE_ei8U!PrDsq9N)fV%Zg|5-gAYKrQ*0(3 z38Oiyk=H`r3Enx9^zoyqF%V<|*ixPAlHP*t38M6WE;8GCoP=R@>Iwd3$GH=~Ki-Tf z2``S;_)uo~3<6%9r7DBnw5rlUl~Tuf_^55)A}A_2v>&Q6ANefdg5YuzwHX5KLibB3 z=jRroOqft$(|1GqoLtf0kUep~^}bFm5Ay3Ct;2zY%45l8&o(>T!Tl)iZ-NuK=3&Be z+vrTss@q~wOE%{I{(jI+(Q;p8d)l0;62b2f6Cbc|MO# zp0EEtU92pxtV|+5odE~^W$qZ-#6|vxAc}QPO6VSB?VEhfpuuczHDa#bP{%yFKaTbc? z>(@g05AQTF#5FOXs-*H6*GW`S$-QCxe*cHWP8I(}7xu!5X8fOjI|J2^J7omb8pXqM z=}2#q!rR|mD8rg%kCMl+Ti4b7b`k!~Oqm`JQ4*2NgHd)pol74C2)5e3ZyJbOE%#gB zT0dw|?hwQ%V%;N|Zx+8v`;KN-^1dZ!$HoT^oGfJP5 z)P6|p@SkyCvSOs9LP#^?c`_yZR|us|i79kJgUQuCrg z=elGsaj3$BSW+t*8s@>q&?CL3A zWn?>4Hm5Zrss1R~yva2BZgPXzj68Dp?~H&OkQ9AhcdaG$A>5a$^hQtvi935$5yLNQOpHbq z%*q41DTL5z5!~Ka*(z3yABC4d^8a}I?GR0uliOmPB5Mx`R1mFl;aSM@)C!ACSkeC* zU07f_b~xSYtUMwCA(2yKsfEM&#>DQO4*)16g-LZWs!cZ00IvlkdZ0iBgNYfCjvhR0 zF!d_!*6>kx(Lg9{xL12B2eMI_{euV$KJq(M2xUU%C>nci}DSwG*3 zab&(|_5oEXH^QZNFbRKUfnqhe!f<=UrH?NO!!jG~TB!l#)Paj=a46z&KwmhS4SfUq zpTM}Qdb6pf5|wCrI}h;so&x{yDp4qPIG;@U|kWWO*1+%YlG(yf1OHoN$pb)-Z_nG&8hbq3~MGcvmg9PE$c^ z$#+M!RB_G?xYR(w6R=kRlBP}SQU+VrUn!YQZh^>Jav&<0h%N&83l0b|z_odMG(-%+ zu@qZQ`QWl8jqQ74oTJqE*M?GH8Vl#C{heRH5syGJ{?VASY3@uE<>#k@MXI#3(78J$ zg$E0Lr$r@$gx2X?7oQRYCNCc=q|3gkV6*`0OwhN!vnP!?RZrh5>E)%$6Rmi$M+`W= z-7kSne75{P-Zbf90Ei`_MJj=Z$AgMd&6kl5__=HNLq(-FS+s*X6MtZ7 z8E@pDUJxn}A;AJQ{DG92Wj@Wt_iNeb9~TKi#f61$*01h-Z)o>G*#tkQ+nZ{}pkRU= z*zggZV=ByjtFj%%2om6u$LI@y^{2{z*?DBX)TQ|>#tuUA7}l;|Z~lnBa2QjO2KopA zCPJhvTc{Y&GDa2>*r2lAd(*kaGnI3pL5IC9j0%e%jI7e4V}su?uK__e|A)LVInY4z zJ*myu&jGNg&hk}lbjW~>3_|FM!BkXF`o?MB@u?=JJnd~*%8$&>yg%wNG+dqHde>KAfu{|mS2=E|iT`66`vQ}R;p-|)0 z}|WKPw^4M`-~G3PKN&OcA)9+0*yw?l2u_$Une8Uv5gD zsMg(du^WAWooqP2T#@UlHGWO7gT3UzT=9K1S=yEy_v!8h%B=3XfyPCefxv=iy}bLI z(f4(0Kk|p^AULFSJWP5kqKBB!nMLBN~Bi24V^;2E<8iC6ZU!qmwqPsb1@j&JUyWdj$9pred13(yJ>;N}B9IaUeaVo8LoM}j z5=)VFBZ@qn0(#BtZcWo-M?8+Ny*EOo&kmNuac6vx$9gXfjZCkMluy~72w{UDAR$qX z94$~FB6UCkWB`TERA&7QgEMiK$=Voe)VSPX?yFXo``Zz5&to)@4G|zB@-+(oSy>Pxk zwNU!ro0x=Cq0sP_ao9n%5+M<9L=Dnxb1v1cl#fPPVgB78$47#Jpk`ar8S0M{L;P)7 zk(jA_p`oCb+N|ln#nStt+osHMiBf=T47h3`ep^1z#pbAWchAe3)+hxgjne`@kQ`cebKx%S- zHU1PS&b7)z^l|++zYJXxe?Hht){djeHWGt@1%rM*`zc-U`J)EBc&&!Ny!MFGdJ*rn zcL9$^-qJ35Js^u{bBuYi(WJxK_La6l$bnisqFq!95*|7f1+44Voa*uMXY9Mw@|(}r zTV=ym^I<>H$oP6{Yl2}G_aWbullCiUn!Ll9{(gFTx!F#?RMoQUvR_MTf@!g0oPKo- z7eoqsD;G7n4DTI{Hs!9Yd}Z>>k#Es+2AJtX^4(??5_N;Nh|DFR<@s>CnmU?%5@V6C zLaCS$W$COwjh64L&V&GKSZy3?I_XPib*!r~8JtKQMmQ-KmbfBtG{Cvb1#QU_Q!BS_ z%zCfFlRpv!O-U@LE9Ao>&_LE?Rz6|1LAB{J_tcD#q*GbxEan$PxK_@JHltv$e? z7-_48$g%!K^Yc!rY17>9bHO-P%m(@%dqSGG#w>mAmULFe?9X!WcYdtjwQ)u0u1b)s zA79T4j2)ti&q{B_i%r?!cX2lKW0P#YrOI@^38-det@I@uvv)6}V8Ed{{)i*%rlNk_ zLhrsWm*;f;5FTpYE0SIO+5M)_bLmHx)iPr{6thc>18NSSepkifPQ>Dm_A{#tARCG| zi@=Rueebuf2+40cpHXXswPCHIh+M~K2g`@+;4P=#I zJ&Opsolc%aKb+x_tiBF>M zGEaWWoUoBU{7RXiyr@CYwcGdYNdLZ>pN&Nc+T}xMk4dYMI-0)ZJHed^SLVqv4@DXV zw#+)g&a@TfdWb)DEB|lGj>N{r6jl-jR@Q_cq-bGW65=HkO&+(V=@UiWd+?_NBs6HC zZyd94Q+48vrCf-mz;v~@(yl!WGM^D+_nBwj7!sZ1@C`#BF2hdl{3h|t)D<~nWo?n7 z%3h|46YD<n6;zg$ZyKKPoX3l(y|av;7_jh}jRUQ`Itfh~!KRh5vspmv1NS~cLGfXfoDru1 zI0VkEh0o8Vd<|w=oK0KOH+ffoaYXK2+%CJRK|(k<$rLStRGQoZ=#P_CM6r7E)QwK*Yc@c*tS@XPodDq?mc=cp4b8 zTzWgu&;t)zW{JFtEiU31Qoy9Ikp2FLk=%RwkYM2TWh5TSbc)?k7&75X5#y7;KYjWq zY7~KRie8I~uZ1-QEA$w`eV#R_NQy`hpvWjl|E=%Qf*7ZZsAL=xU!GY=Z3F%B0-7`2 z=JjS6SGhYXD$X9S_mcM2-fW!Iv$G6qH6Jdw1ic=tZGFoY3wZ>mANuLqn^CK+TuxRq zSYf{qQZq4eCbrTqYzA3CHZ$5gSe!;Ju^r3)_1Q##f-ZASOE3-Vz`VJtfr(*`9ga*&AGKmioI`r@AW+(6av3GNyt9PKH*sQ zBlhFnZMXSL&q%r5G|h1ocztIY7R;##PdSs6=T@!e-N zP54pDtJ7{h02^9#ekqfrnEZRLPTB|$cdNr+1tkY`=v5I;elKtE#Re#+b6@?Rqmhx( zQPh3&M);<+UhT_t&vTo;P3KnpP~?FdTky1?c4Q;_qdg<8WhF#r*n@Y0uoeA%s7k7H zSkjkp=+j?9!|Nxd#aUc`g3My z8a$Cn<@HFLOYgi9=R^g4Z8DRU7}OwhyVfM+r|}LcJ}}fk;eI8C zu#1VoOfK-G67`&aNV{*!p2(|w;nlWx_L47}bi=v$l(5}IC!c018E5}g+T@!}4MkXY zkrUOWC`Ur+zI-*f4EIS$pdv`8tkaiDdMzFJvy*x>YxvD;laif3-{X5L-UmDnULZ3f zh><}46%`fZ#pFqA6L;TzO$ur0e<#$+jVtXUH#IsDU-;NaWiVQD8IeI@XoL+#VOg4jhanmnsz_YQ|x zklZ%7@JQgpu?C3wgk@X!OW9FHTPz}ed3cz3-0vT1ZzPO<$>wqf4)_2lSoMpV(D>9F z{3gI2sZ%@fYKN^?;&v3i7!48FYFF=Uyb(2|A0o2ivfu8>;C9Noe7bh|cu#@x?&7}w zkx&LDFx#aGhMNfO)@MDKP1U0{zS93ZXVDWRxY zbw8QU^>8QfB9AB9l05&1XvX z_RZA~i3$n4B4wr54%v8|xS@G~)4>=>$WTQChbtLLz?)3kt9S#KV`!^9>3-R`1E zhGWk$P!|2j98uhzMz&F5@h$EPv!2aG&EE|d>EiWy?Y;e=oy@zgXS8O%-y7BXf~${^ zAULc?HuHaq7r;^Mv-yShTi(rR#Kbf2DNfYm|FQtK4z#S~Zw39TC#aMzS#Dx+1}%7e z&cN~J*;y8fJITviEw1zLWR)Sr0A~G5gO-A<1Ec4MPX5E<-fwdY1l=7d;GTTykdmMt zfCl9VsceU1W2}E2lyLl!{M8SmfV7;D!+(r3O$xG2kSW2m#(dM|R!eexc{`DiMQFoa zI)8j$)tY(kX!E~wMq20>3MW1?G<6E&v;(BWxvvgba4b!Jb$pFtg|4viCGeA>7AJ>n zV56P`?xolG*G&kkB#Q|0WLmp75;_}=<9f9H^zk*Fg{-e-VNmDquJoi#bevD~?FUWEhGV!b;@sNCo*T3Q8zfP?Hiq z>X5>}#!BfF`H+Wct^Xd5Xt2NHWf20jok~IZuB)?Adpc!)^HDsFK=!z!&T{AzEOT1j1fagI!% z*<3C~oqdpxC>CtGgHP@aTG~AOa53oQiduPLGW_XZwrVkh*-H6}tJAqA(o%Z$jxQP} z={AJU8b1`jJF3fwlT&fuwe0X(#W_WEogKD?4iddN!7Hv?Djpl6rz8!fflE}0-da#IL)s;ONHVKL3y={5n;@FpdEIz5+p-vavZS#&Tk1BnQ zq{`d~k)`QE-nAr3g7q_{%#g}Jq|?b(%LVhnwIpPMu!8ee7H1Tz_s{W5Z%yxh- z2>Y@5Di7@3U=9nC+b3+oI5mGtzmHT+xCC};&9Y8vC{)UCdTBkCU}v&sF%s$mrmwu( zK538|B@jrU!maccnGSF|LQc+3C;_m5jvIsREcS*Fr3JrQ=IHWyG~U;dnPf?&jSNzE zTzVn6{O}6qHcl;YOn(}6vW$j|Asjdq-woG|rVdu~>Ola3yV(a7FyYYu97p_hPH8@` zLq9b9!5Y^lv|f9e&L%tWI&#bmV>e$~jeOmhn~X~Y8ve=hcTio=VX`Cc50~C!f3#hm zs^@G85M^uGCU7C+T}ksF3HH$DPXyEX z)ii>iFpk|~F;?UWxcM7B+`zEEf3xF{SK6(F9@%+tT+@E}QZnWDUF9wyy8JI}g_=O= z_iSJ80HR;{*gq@b>S|Ar*RZ|WOp%DF%{%|`@l^!atF%^2^6PDa8x=ID@L+xPZo(HV zH@e;YvJX5$)3w&k)^67hz4;8+NY35H1}j%LJOA$8NOT#2Jv-UGDtuwNJ;f{5Rfh-?Z`y7|o;Rb`nD?e66b;>#p51P(GE1j*N zZpV}di6S%glZ`A~t77P|<5&v2y57aE-&0h{Fh+KLxLtznEd9_lrWaM=U{w7@6hTP2 zQubB=goE_ov>VR8HyKd)TJu+P9oldmTKH6)ihuF$*^>RZ_-Mr&l+$$)j^76bO5w1# zmLmh*d9Z4#oiY%hZf4_^AzMWRiZA&`bkr#)eS}DC{^EZ;h11RvdD(D-9+>=W0D2>E z!;)7w^Q`YGsHbnCvwpEIki|OU`haa~5x>dDNl+LJOV9#1!E8}O?=M(b!PDEMObev* ztNBtDj`Yu}d@dGS{mA?ov+~Qc7{jW&x_!-JG7&!C_f zmi7B-4JP{E1l);kU|Fb68JEubPi&LIPCpRa@4KSaK~O!7hiWTRGRGpGud1lT_GXpB zUUTBrE~k*qf(yt`jHISWF;_}%-7Jq4LGRJLp5(}&apaEALudV*;>sAR*6^0WtuD+n zWRKXejqK0TkcRd%ih$`;ium`lq|NhM)utc(Ci!v107lQRO4IHHdOf?7`!;+~{9#y{ z{K|qyRdPi1zm-0KG|#4lmisjYA)LvP;POW6yG`S^WsNwAv3F~Nwl82g6bNWXe$FgC z6sG);(WlK71_R9DY-cfzUwu{qh^Gyx-t=-Hff?g#PD83@HvHhVhsPt zhRz1l*M+fme={Bnb`i(A*bg5R_;?6kPp9ixVc?MKK8X;o%}bmcvt0cN_Um}QeouOW zKxW=GGdYfts7@W$q;$1}w2=KvDB5EKhxF9eDg7b&dbkIM>G^06EdT2l8?-T0{DqgfbLbp$KK*ccBP*$Tz1Cd4Mxx^Tm^foCO5Lh^#N99$#WH3%X95;Xe7L}m#!MVj( zBdI)Gf=a|~#r300`@HOhI+x^r(ql=+So&E4OEjZK@|(0@JL`G~+?4ZUWHFy>fVpS>yw4@%nvE98-wyz<3PAxm@8x4&R0#CNpU(iZ61cDEr$q|KMg>?w!05a z2LM0G5`fwu_zG^T>NI3rn%D0ot(E#cz89YjD%)NDb}}5Gk&6zTaUCI%H=H@U3*>CT zksXM4#+(#39=c*+@0z_Y8qVcg#b>^xaLI1&cSmh8C~5b!Q%tww`&~HxHOcN<@VzN( zaLGv;tH}?q-GO97F04;zvzV|eLSd{yO+49!iyC)XjF#jv4V zznX32!#k42P*;X*pzU;k ze?^mswIcAbg&xN|R{tdez3NA=e1b>r%!QB|ojK6>SA&XA!lzoj)bEXHq~lI;oT~_< z>nXGE_Im3~f6k!MtKY!8TXyMVGr!>)vx%Ddl0|w-WAPxrm6R>>j_I_ixkpb!qvds6 z*xIZD;9KzF{Dpkwq~G_1m#RPnzB;;a$Z+T?v?*_ycpk~48FXpZU}`9b(zg@5N!0W_ z97t82?f8QF44d~3EcVVHDPwK*$7Y;6g-CAvH-u*iDruxJPQfD;^I7QC%#Rx zfKKq-eo-@Nax!FKvjoF>Tnqs2g48}>S8^V>NJvQUzziI8_vD%lMI}>KQAw4f1RdFV zd45;G;jqSj)2d!-2PlMIt`&?|9-<>iAzfUrq+XDd^acJ zx3=NExcO3WF>$Q2hK( zL|3maHOi4@?t%6upVNK*z%5k-hxi7BV$-&myKz4k*y@nO&1IpAO}+Tw6e3yt2StK_NTR~Bo)uGC53!&DK| zR}I_d;h%NyP%niH$*Q)jP(8aYd+eVWi)o4Fek#XB;|Zz);8zo^;<};n1y_3Q>!G74 zjHo}0J2eOdkJ9iB7G!@4RaQRP_KV|t?wI?Qld1Y`PooTmq?`%in~mE5rpkgXqI6&N zuTwuXK`!RjQtMyLx6&iKMGe5i;jR=pdl~g6;CY1DxfJdcSMQXD3T>(zzO>~E_SX6W z!Vung8#SlCmg6RvQrd2yJJ~V(9EdG3ITj9xaYdPb#x&}hPB-8Dl zXx}hr4IK!Oyah~75;-^BjSnX?o9(t9+TN!V{~`u8|m+xaDi#3{_DR~K|;O9S`7FUWQJ`ZkTxS1@T_xjbL1gRQm2oIAQQ% zp6hRVIOdu*m!AgwRqyMCtLqkFohva$Qs!`{{S!QH!SKi?m0o|Va6pl4E8!7!Cd-L) z4t?Z6t;;>^X7{i%sq-coChSNp27HKD%u&83{bHF~c|)^qcvr?F4dlw-p5RZk&!bzN zUd&hNY! zq?vs888V_$B|s=``5aWZdTNcRt5=Bo=;01Wvqyz^#^CGqOJOBOG|vA0scjhx?)fWK zmqH71wAO2B*Lw|vDN^??mCCqgR|Os~KzE-S`pu|-cH`Y&LALK|L)&@OP`Ro9oC_Gx z(&;)Av(GeZ&AYaRQq5<)+Q#?eFPMf$ec1{pu^Ka+f}XpaSGWs6RjVct7>Q7=Y=zMj zy+%W~qJi6Yh4E#2nBh4fVvi;%mx<$97!Z)yZm~=WzEgpuVX`PHar}(~3h7KW;+cf> zKRYaNTePTB&)O-9#p>!1yt=g)+ua-fR)l?OJ|Yrl52iD|pE_{5)qc1ybHNMiYj%+w zV#~^0a`cs6YgDtez|_g;I|JuBTF7c^BD+4wtmIVp9p?>Hx;3OK$bND_s!pYT>2-H0 zL{R*B()!qYN;=AsI)@q7y3q z$~_^U zj7%C!Awm4c#a1lY+sEjC>*a;HoERPg6fS~-U_$nQ*Z2Z3fER~qrx zmO-hh*E`2fuh&X@LCwq@!+_dby>I4(Q}9Y)*_82J(ap$c4%1`*m?}*XY49v8)s^H& z(jjo^bEOPi+%zVZos3?@-;0C?ipQcT`yIf~BwpfL_X+#i3Y^|FQ{{sFKNi^>tyFiF z36G0GBK#b3iIb4=qi^5FH_w>1tS_$P$2AY4aK@OP`V8!@Oc;@qQFIu&8k^Svv}zIY zw=yMThU{0N@dEq*(R39sadl05aV<`P;_g=@kFXd`{@`V_ILg#sI|%`WWyq_pAYGu3d^({!^1;HN{Uvm$ zu!h;}P5>kkSlyn(U_ z+rEAWVL~L_9dYzrw{{~_NY%yy@lX4BpXM5+yRt6@zAHd_buMAtY{N?m0kr>-Otj4z&xRMVDmZzK>p3Zn z*-mp8&4V%+Yo8mbK+xt(2s#$xy03g5$ftEZy=-ZXbAND}xrsUt@-^|T9>U%lU=rps zoo6eN+Ly~>tX#G`@6sgT*42?ByEZjJdM;cpur!vY&> zFrr;a$x?XwapUWP>jNhwkp9(lkcH5<)`2oQh41yp4G^I3DN-~)GW-JoGRCQB@vSH0 zyPR>Sc+?3ewNcWP7oc8N2G^yt30txw1@bSETGxZ-g85C40i1;hmRHpomg=#hDvO8{ zMe)nu58ojAd?GV{k;XMq)vTE~G`zg}ej9U(D#{*Aa1}**JzGoG37g-~pxcKZ6ay+TsT{2Ce1Hp!}$;-f;JO`^&KXL`O~inB>cG=02s3qMB!MlnPg)U?i$ z3z-W-ZV!^l8Zp(oWjm&5i*lwbes%inEH!%`jN7Z)vMgRYEp$)Diy?UO;q&dC_y4** zK)5W)L86tV7Z1!2#$ZH?A^6Lp=6>m8p?{^24s%+M z7J}y1BZ~M!vSvpaWkO)$JJIF+%KA-aK+cpX4i08l9@?<{s;*yscu?@Q_G8U`&Bxt6 z&=JILl1)VxI{&q;_qCA}=D0+9eXo2UL*GoX1B`CMYucqq^0TA5(gD@ z?~>BhpT(sojcW}iumCUl42=$2!hQe6XbE{eR#`%pCil}48L~(mB;VRcC!r5#ghSjx z_adf`YhB#RM5#nG}EXrTC6KK3b7iR1YaY=vHGWO=G-|T|_KuiyFrM6bTCI z?{vWvfiO{_r>q`L*&2a#3QKah@X$}aua!cyFOI1~4d>(B2CWi6r7o`Bm4XNsg;U5K3+}%@edsxo!964e>Y>o=tn1Sq zpZlw{m&graDul3dK2LLPrAMWal;k*a;fyuPI+`0|sEL)_5$GXdO6maE3WjV^h1`V6 z37-j0a|~zDQI8Co`7|<_XNY*HR(cLEx=!Ua&D=WcIB3Aq(502Ma+O-drS`iH-C_Eg z-*%vU;OKzF<#aH%FkV_Pz<(@4msL^@pa3BaDO_y93?}>+S&c6h70L%`0R++tiQ-3b+SgFob$B(xQD4cZCYVJd zB_RP3*#-z~Bout6L4eY|QXD~M>uoMsO+%@$NxwpRy zlbxbdnLA)s$MeaGtN$Ir*49ZPOrRNbQ1QG?H{c2iVo!?L7n;^IK4zR(tzCg>w^0!C z#ahug0Wb#jZT}i9k0oSGHjBhd8MoCJ2tI|Q%Qh9YEL$A`?>-Z&D{^Vfg?Gy&Q>F~r z6)+;F)`kl;Ep@_ZB}}HI#%3m^gD?i(<>W4rcn)D$P@0@15KDwh61y6B;bhY&Ejh8y z;Kh;lQ3=Ac8{)pJ&AHA?BHVsYmL#xdh5+_$*a_2eiMZ`U{S3_NSWxK6L&x35V#t}9 z$++2h>t&DuqB6jH)DNXUHz;EhdQCf&fnx}&SU0Vu9&#|}F>jI8R9dg%IoYW-hX=l& zB0W?HV-I&_w&{ib!0;_(e4P$ricNclW4T2K2+bK%q~qhL1DK6=JzOB7uYb^GcrbLm zQ96CbB!aQ0J;t|r6<7=}ZaXAEHojH~_-kQd-vulB4!!G#Qk!(a9_B_-p7~JjD?;H_ z`9y-n^#w$>c4Hk*<^bd>x7X8EGQHO5=;%U?UboZX#LkXk!pPkcT`MVByLPp2?IC}@ z(HmG#cbEV+EPW{DyMVhyqQ5-kej|zi*mf~EQaH8P`idV>G#o~vkKNg=+Q2&FmqEqJ zAYo=(;oK|wst!ue(c`Cov@74_mN30JW`SXw-ns3MjbMLc8=C*TTy^NZsQ#kWDB6GA zY;Sj8YF416_<@f{2S7wVFe-0xA5TxkP5)#;pdcZp-#J7e z_>p&}%I89x;WqmeE};7Q@6O_3SF|iO4{X6b#fkNfY7%U*5V8HhlLgs|TpD5Yk z>1sQi)N*B|)+4mjIZ!fl5V1(`ghy={7~RDBT)h&w5K{24%$|_=&XL|LPBCI-*OvIs zrKRlJ5t79!!C*tQRcv0=xG4w_aid-A-v`v^8KlN_t8eeB_eP zq0!e(9Ioqzz*TPDSfCLF@G(W!kTm zA-Ru{$!EDDA`tN}x*w4@f5Pwg_@xIQuV*`>;&>og9#f`Ht&uIqAWvjTt>*wiuW*N_-Q3!~WF zUqA;Sb}+0m>>hx|yXsq7KNnWu4wfxxcRp4W5$TV{=dRZ4<}>Ie4VaMCxG_Rl{8@B^ zEb&1&2taCDVbmo%!g9JZa(UPRxAFiA1s{8YTg}{_e;(EK($}QGoex&}rZx{qopiKU zPNrdioVe<9UbSnQ>~bXAo$O+#ZlQSARg%lf)JO4HE@birPg+jOPL>Y4nY2sm!)pk$ zx_C;Zee>rFwRlDj{Sbik1E&qGmsCaf?)2BT3tzKZWzRrmSx9UiI-l^`7c8qB_C5v% z1&3ao<9}qo7|S>f+#e53#t-qws@6H_(K_}f&vJF_RMr>c<;QdkIIZ$=L1;ujZ* zDkX@5C$VUSvP2;qypMNsyxWqQ!qHw}T~%~n)nvbwzft+3mdU;Jqp4)OwCcj|zn5uD zQhup7XJbYYvJbwt?=MlU>miSru%ji5kfD(PK>JdCVoje$Kax~f$GxnB^RFX79YB`C zl~U!jrKnz~l>wUVLF@?rB&LYVjE_7IWN|?vB&VlF{XZ=LDMaGO1?h%*heXF^dpIqv z3ZU;Rk#+`@fz#8|lju$@qMV|Q>qBd(SaU|O>5$V4LwI!jovirg^=%_rp zdEtJnJu*F+AG3=&&?H>N0hnaDPI6@>-3n?YFj~kqA7qvnFa32wNRxpF=x@(rQ1t-F zcP^wgB($i&K{-)G+RA%Z`ov_Wi2Pe5^Upw{_3fpr0OSXx5I(Bu+zYonemIo;ffu#tS|qg!B}@z@)byeft18%_dlI<-S`J)0?vc zc5n<=k`7MHy>vC_D2?Q9tnz@*E|`gUdf$tEzSxb- ze)dHL*?jxhjJ4}26s4%(1g)bf){P*QI-RPmt*xu8tHkg}48+j&Cox$J4vQ(^83)9= zqyPTBLc||Gb%I?TC*=Y5<3^8*+K)ZssP6ZNNgeL#QwQ;N92$1LP|%Lyq9=QeBgq4mL&tzJB00&AtVA?N8vbq z-7lG={;AA-!{0eUTP#XJ(P`Pq4*NLsd%F&8XlCRJ623a(6`MwnPKIFrmDmLZxMXFO zs9O2vnh6w}n9KgOB3PN+;lW%AxnCZ6d)>w6CzG9SwVFcIva{B$TTT`B9HD(NnJ;~A zewrP;)dBTl$Dou?Z{iMuihViDS*(S^hffipye?pLEx@*psO)H| zth#Q=@Gn@>hDA$ogr6CNHO0Qk>VT`2U$KP7w+cf+jU?n7--vaNT;m{Rj6 zkOj}H#Je!?brHZI0aaU2YUf`o$4wypcSVyo;io0{Dm=b)Hv&pt($Jea${{giwDr#o zNDyoQop#IB23O#wtSLV&ul<&vIgvjRAjMn2fXQpv&kV#G5Ri|RxjuMTUp{5~HL{5) zEq1kEa2=$RKG4+s#Oski6ambL!R03S^YJ_CuQ*00r%HQO)?4Xu4Wq2tu6DoX`;6Az#`iY2E{v4+*8n$=AlzL#K>)b5;xs;V9Sj4j|ss9voP~H<%eAk&A0MXSs%oL z=SC1nYqo-0z^ zPtkt-1_3CD_4EuIlwWT2W;4^~D<_U%wu2}zkR8j$Kt z{F15eK9A0!Gv}~f+;AL_+upUt_zMD!VG?vl<-aMPnv_fmwXlA8uUolMC=(KF*c*%V zr7hF%C?7lr)8}_bt@c-~B7$axBGyLa|rx63A9eO`A4#}DkSs5spsAsRhd-I&< zWzn29o99>jhXxti_48-<7v6N#4gy05g=30Qtq%zkFs~zk+Yg z(o!Z@Rpe2H=UXoPO()MHdb;~*OpUk<(oOSeU=fQN!twr&Lm zY@zCE#Y3Omt)T7kk~1K6e52y|#EhZ}<2*KB8z{0_(XwS7nPxq?8`1b8&)BAt-2K+8 z?}<}K-(e}|(KsX^&4I^m>s!eY1*Fy<5gj*kcLzH$cZXO_$)D!=u;J8$Yi%HKznz{f z(g$e0JN2%rjaBc)vy+^8L}E0~08dj>7V$7jY4jI-kv;{joMz0ri!%VaHu1Fu#IOMF z@@U~OG8+Jy0OYa1kRO&c=nLFLq}u;{Y4(oT$oW~LsN)3hC?Sx0-SXbwPvKge!dsbD z44n1BpYPE2J))XcfoMcE!2pcwY^qvc^>@*A1cxPrzn#iL(1k`k+KeG32zf7rCI>$h zhevxSKLwDh?8)msu*}qMWCGQR(3x+o*Kvo=dKK&*wYnoc0ZU{nx3?AD@ zBl>IRIYwqN&!)B~&j3PvqI=i18CO&Mr>-M%sLOo-Il+-XpIBi zaH0K*m0bIHkv%1?E@mY^xB~!Yw+YXR!w>@09XN;40%%~My^2NTV@>|tliS_~J|xg> z8W+Q2zqvpj7XZj4ceeC9DlVw>7VkJhl+Cls`34>Y;2G&&ZZT|vZep2%gOLYHWc!u~ zYp*LPbuc4dKLL&!hpKelZhwdcH+sc_OXV-FrYNE844uInhJWLP)T;%^k0Xg()|4#^ zK3fc?SU~vrLFQubD0^D`VK@L=RVFEB2FLP^s&AWwGhrYj;ZS;! zZ5M#cDlX@69~`D)K8&roVcOdCXrBJ_5u3Rsf8KIIWvQm@mqQVW*`c?U#=l9~dm1b4 zU^@x2=uNd2oe5M}HL4)6Zba0?)t&$Ry?9Q$s=qVzT~^jAGHW=&^iP5Kb#$~jYm#Si zwp`1zT2;{k_u0^JK({$S4Bff$!a_qVgt*^imrwEm?>-&;k%Uwva^#p{k@=5D+v1^anHW`@NK?CCRkGlPU0>@C% z>6F=1sg17bB8XXWE{+#IMlp)aOjqD6ySjn~o=`8VKa>Bm$4DN%v*e6MV0U<`8{@CR zdB~iomd8eaYLVHmQhq|2H2grHDU2|A$SWh96>#=Z5z7blUPpC}$zcWti+wSsHeN<3 zKL8X>BT0OKrCZWI$I_DGV~^y=o^||-`VDN=e$ABb9{5fqrgVA$(`;HN)QjtqP3z=n zd@mPGJJ}$^hco1i@WO~Vs&?k;IS{rWk2 zds-c4<`*~Pp+@ch?gxHeKvLuv(J=p7xXwjZ2UsL{vWOBGz;BJP*FWhpe5ef+Y|2?9 zqIQNiE*k%n`&g5KFtD&vvMqC+3^C4!!B0EbLAfrS_$h!SY7dqH$FC!04nIZ9vO{{? zXz;}nVI9z;0*TP3Tkiy;IXQtW;S7(5jL^0@!muL;l$~=n*?B!$@;Aoy=C37835Vg~ zd~;w>YO19(U&DS)bG#P|C3F^qTxnyfZw{j-70uf$;^Rn(#CZqLC?iP)0OpIXJeTLo zW^jRjoS{V7IQFPG|H#7RU~y%a>T{Adw6LTDI!%FS^zE+s>i1vmVwBEXi`OaP@E|}4 z2-nJH;=;On$0-2~Q}sGeBW)bQV5)A1B<$Cu>$vee#`F|n zuk(ky607|75-v$9s()bAVF4zB8CqOL&jBvNQqU z#ig&+p6Cvs-A`H_>)eEIuV0vYtz!Cxw5qtD;9_>2j{_S$^{ZBk@JjRd3uzOe>0yVX zxzSY?N8E{CMxTA;HR)wFP-m3g`1XZ}Y1^J|P-qyW0`LOvGu4326=xa6KF%8Fhkn)f zSI*sOu&pTUMk;sv)){{sJ&67Q@YkF*Az7bFv{I24cC9Eu zhW~JIGUt5i<`?fFp-Cms?n_Uk5oR8&-jTFu1xxC%{@i;D|zbpMWudPl~4WXJ8M z1XWitoIY9oJOBpBz$AO$$*JU)F=X`0xEJj z)Lg{73--Z`OLNpjM=Nlc*TpcURJCjitqga|Q>79~BE7ovagL5*ov0!Pl==Z|t&qXU zZRAaC&PUyw{sIRdnCsK6m;Zn)WIK*nEi;;1a3})wYyFDlOA=JbBVR<~@IMMUNwEJ6 zZVT*9_@lS0hs=l}Y)7Zh08*&!wdk+>&hfpa{g2v9q)Cr7Hdi}D@#s^#c8i51DcsU! zt8q>0qVo$)#^wrtFaei!6OXOV&nkzPBoRsIf7Q{`e-MYLmzP=3wMEznImjo74=@#6Ck zF}Q8ut(P?AkLuxk3(see;{M`M=AX0uGJDP1&Uap-x_AB)-l_rH=G`&9o)2emAULJq zFGJS1{5XM7*fwgJ_u@896pY_X2n30*;SAnuR7aHE070sanZi?3GIjsaUoVRY@?^`J zZQIyYmD`A5*UZ?$KUO|}iWyMUKCPiZ;kg%;YQPj$nHHa-&@qcC z*n3wuUgju%oiBP&r?=uUg#frM866^q*T0Y;3xolH*xdC-)(QbYm_@>-{SKPT>wG#x z>>PU~2A8e5#9|;Vd0fCzI)Gnq^Q**Nts?d4qOxi|0>y`a`z!1KS(IhQ97I2`tVjo3 z>}K=6pU?;G$$4B7w_$mcxY~c7tEA7AvGkmNaB&GQRIUy27n&Q zQM}^w<@RJ0|DZuM-U16PbzflyW8;4Qq+!4?2h12=W7&gLE4*3Pk;8@|o&=5%%I{8{ zRP=i5OV92#g>2^1{l_!AsFBg`XcDdG{mH<#y``lk-|HDmneq!E_lw;RpHqv*p3 z)b%;u^RitiG@5PtlP9o?jAZSFAcA+c*x~@A5?1gI08rvwc#woTDB!`hl!4{YEIW=B z!L3!adM9v=+C-&t`0jPEtcUs#4s7LVlk;t{?5}x_2rr8BE?I6Q=qmjg0Bj-m?-eAs z7G=l&i$?HwukxH9_R{?**_|UpUxto5a7~D@5u%PJi6N99v5WywvqvWQaW`Bs)g`nN zkU-bj(phEI?Abwg^Xto0L4W{Sc2ek|s|0X60Ok`|!r_6|(nTRWoM}JiIItYZbEp*t zPT_=&EX(fJ8Kbi6@wPNFS%dOh?Qp(Kc@t@+EycU-AVkukFIjtv=<$fjn}S?15_U3> zeL8Lv6*rQLq_$fy>S$v|L_E*|$(B=j=kfS_fP`dOXLFqnYePO`D{k5eL^#AknYLngP;w5J27=$)8*eB`-j z+gt&)yV|$to?&_gApL8w9xS?c11AF!K_pfKm*9=n-I0zx*8Q3!kZ{W9`S@~d}giT78} zE|S@l7C^!Upksa!l`A&;qT4{AF963l5ApuQ6<#56P$xth715mJ=2|#c!umb`%+N+K z`~J&fALw?BRB~U((hx4nPreFNanWrKsZ)vTtus5pL*bxTOd~1wXdGkuQgc z2)3{*+M3T8N>U7H_YPy=+sL=@H39+%B>B+24GdmMbRuC-vc_U75mMb5d_nu~V` zoi8b+^{(xBYkZAh6ExtIoIfG#FAF46?Wvlq3q~~eabKmJ zci}wOAU~c(t9TcN6M3Kd%vVxuDn-DWx`MNAi_5pUQyZKL9@4q;s z%vyb#$z+29H*r1nl@+g*>al&-Z%AOE7j6PUo&@>GzF z0wLK73uIlMxW9W&M1_9k+a}-VUFM@)euvU9PXcaR6~Yp(Hz2SHS-tR!z`M~AvBw7w zn+>+O5Cm?UR5yFFS9K_8<+3WbELo?JL_NC=LbaLUO20w_dlHClAR?1!Dy!fIj~LOo ze`WlZfPt9rQ3r}B_PL?ZD`CWrlC~+my_;wes~tcj9Hx?Q&*`jy(lan(#v3dr3Nk(% zZ%`CR;&lIEjvx4x4kb*FdQP%HSv``j_qH#qNxWXdbNxmR577Ko-8*7ie|DjqJ2g{# zBJsuw*kqR{C2^ydv`;|%A*k$v@?F#Y$wtRgWaN6-XvJ`S9!`$BiMItfzZk6~_+$CP z!BI+T3)7^VP)wwlrLwSg^Q>_K@09SMF5F@deliY<5L*Ap(pxgDx*v!{rE+Rrvk&Q@ zT-DxgeW|n@o1C6OOnxYC|HwUmY7ryKyAxO1K{R+Fap*_U1u}ocM;^enXJGB@s(?l` z+#!XJh}*#! zgF%V!=7!-+POX$S{=tv(g1fP@@VSrGGIYXr7o}^5{%|wu?!#c@Dj{GE6;kwbQiujeZjr1;D*Uukg=#Xi^%X&aOlEvREdg zp?NJ_{C2(CZ!t_mM@`MmeUn)$P;TKo?pxinKczvrzN$g|OPiD3qvkiXwiQ2~2NV>H zS7a@E~SJ)$cV@_4OuUFC9f{qvBaxOx}*r7xK zf|&v|I8|@5VL;16fZz^#FJMHTp-X1XaCt=+-qWv^$9b!#prClrCZPUpmTbp_9Hn6(M@5=E$B4K zrH9Vt?ldML>Dj8gb0+|5qVZq+dt{-r_p6mSfU#8lwWC4aKn&-@OUAb0vHQ3lB7{Sp zcO5YC*~;?aBzEN?9EdwJD|+ny;?r~(QTMu;W^Rc+eo-u;FZCz!nZ)C>a}%-sF^YMM z!bvwt?V^@L#UCt(`tnmh-JSJ^BUAGhEylph@|FeoaR)0>@K z2nA9wEaT-MwqnQ0D&WgzP?V>es@!Sg{bYFA5Ge?lI0uUe$iJ;Z~4h zfy*x_2zI>ajPah86TL-09tvSyO@H5g40`kybG9~Dx`pGG5|mUQuAhGepcXq0<30!d z%BzLT=HxCr4z{w!J8$nDk}lT3ZEFN7@jBiYKSz$$D&bciVr$-g>`$fsGD#YP@4W9C z(?$FE0g#%XhecmtDiMjKX*4`liNadvz`|-F*HTW(v*T1F4a`HDSX(Kid(jT==i=fW0a@65% zre<1wo1jaF^ZF3BZn%>A%wQ9YU|7D_E2uthI5SIxuWoA@ri>P)YmrGyDkni2fV(%7REsDKaRXOmL#GYF}>ckn3WTcc@v3yY(nG|!;CC(8zney@ZO6#E(Df82pvZ0_jPNB{z-qRF9IVn9x zhP6s!#yHkMoOFdI_SXo##h4F83%l!AI&9iZnuL*LMm+*9**jL-WtfoP)=h={^>;SH zk9w#q35$-SdDPCp`@Vt}+N$jiYZd6sJbR{3%zmSQlPVHiUT0;r{Jvz%$ISUwm^LQE ztv0`jCBSTgF#wsq7?fV_HEQxy)BOPt%0-AhI$j&iDvmrPFS!MFL?CZukOV+}&Gx>=uy)-S*+7AT{Ia_hcqg4HFrUc1z6 zd@55?(mWO-vk1$57O54>Y7(1soRR%eTa+d(%TctS2mwO*kuI~_XLE=Tke%c4Cprgy z=vc)wCTU}B-m1v~@g3UofBL9!`xDKWE4rEGmT>)HuKJ(7#Ou4ae#z_icUVcHPtJmqcbA$42xL%4O(ZUDNIL_;3!vyjsys$z2O zjbknlSSh;7*#awqdYUtTW94tM6~rUWl+>pZcNGTVFT0LB#>DC9qPky#zTKjbHq%;l zvq!wvYiCgj0dqz%KDJ7VxT!FHN_cSrQW~IVVmyEQ`bDfN0?7XUL?vcONlnd+^&6oF zUc3hj3ybg^E}$ka0pTPQh?=-GTP5knlgOO!dNv?cbiRiXRYUizCrE!<-x>Uq6;!4hkOp z8UHP`%w+$aNoFUL;YKAV?47~<<$m2TM;Sy9@`OlpUWLbHq{Xg67>X){o+ zCvo4E2LymS5+V-FiMsO4xE@XAO(77{M9yHg3rj5lOLbsAET1)`XrYAhe0%z+*`RvD zkEqBkz~>`z37G@yD;Ao^zX! z$Z@nFByvWq#I6FucN1*s;QsgHU`9)HtXr!#8Bj^p*ZFtrdrt5|cC(r9{wI~Y{YPId zph-P_`~9%`RrJzFn&q%at`VNt+5@b!x)kurw@d6`qd9I3Eer~l_h20lDrV|pA~}8< zcae2ICJYpahuS2h_*xet#CBQrFNl4P-7;sXWsP^QWJGHwB;Nq;(J}TyjIU>Bh$vLs zZri{GJEL0Lz^9gX_9_=wQEyG>@zHL0tSG!kJ#X+?y$i1Xsib(;rwH<^kaNz)TdZR* zN7@n@blNF$30onN+ar_Rm)*TLV=INp@S%Bm16Nt)9IB1kD>-DlMLQ~nN0tr_>10H9 zVgAstZ(TF_mmEwm*xyeCTW2&By|-taC(ohZ8yT6UdP{JbhE^{bHukV3&+46UWsuz7+9 z?R?1rCv5sRd1Dh53_)PaTJJ4{{S!Ms2pZW4>dEQQ#(p{8oFhjueBpXEL=+1BhP)b7 zb{F4#H#<34>WFuJ`)dzw^LbPn#B|_={?Fl71d&QSO$}EAcbi@dGYhhb`uNBoOG$QfK2+|;cWZ$1c(wt$4q@ur zvbyxUKJO24N$`uJC42JGz+Bkw1~cVO>jm%g794jRAnNSZ*+2t-eymLWw_iN2wvzFl z?`--wQ@!|meZzEXKyj6k%c$4^rjv%&r@*Q-tT*TvGe!+uM8^1Ow?h7?!-`g$Sjf)7 zb$NGVP?SN$>r6%0nZYO+NS~V88mDoe{k5|*IT2Im)X0HftjB*~YB zk@+dk!W(fAuyb>B5{HoB3~v{+1(o z^iY)XG?RvnA15T8oN#!cfGv?Ju?uA(CX{;sR#wy6Xstf-*k+t>x+_ z97!vI-+;L0$ps=x_TF594utY;&dys6>vK~?TN^J*Y_-uUWyH9=qT=;#Rt^RcTV7YU z%W;2Hp+F1(VA|T+fF=Ei1YeA) zk@4Z?;f=(9F;Pfm;t!@EoG6w;34$Jh{yxJlsVTQ?*KJ2+Z}=o09$a)ClRVJJdUQb$ zL6pX~Z$4Lmc@4OOv?4-c4vCy$0|e)ckxu?9umc~g?g-BwZmIN(yHn==wF(9C%Tq?- zam)Jy_e%pCi7XkW%Wjn!-j~pGmI)Db?Cs{=aAGY7@FCIoZyD0EaH5C&@FlseT;5LL>`rb z)v{#g!82s4s_*{(WX}YA-yG=}I{l`lXJb$85GqNAfY;Iv4uuLx6s30mT37{{5W1?6 z9)tH=i9jG#ZhFLZk_+gDPa#BM>W+o3u0q_y*hosXmw%hzOdU8zJmuy02Xkz!ns9rr zQr|PKUW|h&YlRE!Ax>EtY>k5cTw=6uP--@j$a$Rh&(zQFKEP-emLmCQw*a zj7^^q-iu-j|HiPEpKYoANai-g(@On`{%CSzXraO#m5NpKGImsN_@0B#PSA87Q`P+- zVm4q_Tsm@wi9aHBNp5->GrUAs_PLyoJ@~CwRP{EC+)P$$L$i@5qP2x9j#vnf#&;Gq zgRPigNZ^$mD+!7S1f|U(f@0(r%>RV?qC=E0lAoUssLUpF_&?{A`fY@+ATIU;G%CEmKsx-S8A;YGt0I!odfzr<$_uXXEOf;X**|Yxhg^NuZ zDvePJ1aj;8u?uE6lLvb&V7hC7+xj-XS*oDpJUDjneIEnl*Ew)mZ#V-cjYsadSk7I| z!J?N8j}};0Hc?Ui8}9E069JJkx$VAv@?^k%wSwMet{}Gj!^iJf?uVEszYSmuyO#9OXU|16|1@}N7I&N<6r_=B?5#15KbYcPP2>DH;#Fh1*Hs1vu$nfLg^#UH^TJbUM0=A`G7!01aj zEC&)I%lJo}1;ngk>bmtT{L;It7;y`Y^7@@61b9vS!BV*VeuZ^V-Y0a$AXLSBt76=u zoH1Fh@eo)fPJ0X*P~9SJ&W8xyHX@pEDcUAVA8^X{qk6a>o4y&`aUbW1KF0HEaKKnBSoHoVE zG^eMh&9>{Kho6DnrPuYC;$JV;Q}29t8$PU`BK$tpiGp7tpb_=Ir+teWJiVV_Acq=6 z@w1KM3$uL$`RPVNq@W?H$Mvn2bl3xD#)A)$-2!n->16LKVSd?+X$mt}dzm~G|Umtn-T zBJ2)=Q(pp`YNsnZO6I+@(L!SO?MX_Dxi@weUCQKON$WX5euG92PvTFDixof*%{O<= znVqe1yH!rJISkvL;KMOXr&IYL=!AGch*Y!yL+qD>@^&-7c>^1N1OzphSJtVgtHgph zW!XhF79xqdV-idmgUeJfoj7sk%7~c`iZQbbh22KB=Q6z1qO%iV9&<|puRYo45W&!| z+?7iDo8fv7V{|ak9eFm8HiZz#W^t)dVVs2XhUbl)oSYzFF^I_S&{0Jz>A5u?aI{G^ z3NxngqR?TF$@+nS(|40>+h`fQT#~w83(M>pT0C1v@OFt&58Lb`9uW`AU8m+iU`?ph(Q@4zs!4F606x1E4w- z2>4d9XW~@@ciOUZ*0Q6F)j~R0cML9~w*v-Z5|KDT?+rf}1NC%veuV|!Hd=!H!qhKu zLgQb(BtsKR|L6r2B`{rNGP(@4a~=?~W7FU0wAFkpBgYPgp})WKk=`8rIoNfTs;Xg` z6y5J-`ZBsiSGBf0u;aZL&Q;w?RC$e`U^n) zGV$Q|XRTuP7(_jwN&aSXff8u@?#J{ zBiL8-wW8RxC>6$I4?V5dU%|bYl3)ey;=h@69n%_A+`IG!+wS=dAYP^29Q@M+PTV_X z*?qHONf?r``7QRNP6XFmvMb>5-``hso5bVh~txa`$;kR@|~qu@rsDnJ$aw#~+8mv?Bnz zYG7YmZ%!}oL}V^%&r52Wn(qWVW4nJSn8Iu|(crc0SWip3 zW8;&YbSHVIZ$1Nq`l^wL#0#K>d|yOzA=yL3Cg34JK-C53Ny>!RSz9_Te*pzbOiBWJ zB+U@r3hFc*gjBRgEtY1%2Z0?{shryK_FK=aY=xpyvAzM151l12qg!(K1Q9Y5n^Sug zA*=NwE$2%^Gt>!^x|nx0BJU-eK@)}VjA8akWgvCI-6j#=qlD*~weFI6(`0zsh5PQ| zb%w7K@OU73hC#@&Jvy zZbF-)`bU_W^rp&VP=(qUT%eCdQ=@1R#+Aa0VbjAehGT zG&H+bhJg?cK_u3L6$CBRQ@&wKTCQZIHEVxmxA+=jp#Fx|RNP}@bprvkTAEo5tGM`A z^I{i2=Ve7<#Q8lNOU>74up>w+P)u%nuWC`*+rY8u6+n024p~E1vumf%Rtd3F6@PA) zh!$O97eb^dB(yd+Ed zY3{MH`{zPo6-!!veir#- zOo~SlMeD8YVngl#j$h>W%lB~I*;kvTy@EIt$PQCPgWi&oQW8q1_+kL4k15z%h^`gsfXeqFR-h>;j8#pWpxE_r7YHcTzZjb6Td~Cr{ z`iw1@a!Avz+NX~Hz>VE|QW>C0Y_i)X2LJ_C=NnbSK(=lnW;uNU)yn{u9th;jD~S<1 zBILk&^VW{^A@C!vU>;e&C+x@|sfhlhlL`iOWZPy`0t-B|?ChBp_c^g2gVr)WG`P0) zYzKRLcN{{KcLK2f6d!nboyQbRQ?$ZZu?bxTo^xs9)@n!Ly!(VW0Ho7iv&jFv2NVzo zMH~+ft1ok&3ev*U_*M63l*%WilAu5e(P{2c~^ zjvpDr!R9lUL}>HoqPW~4*D8dICq0r%?qq@x2&gYgmMsIQ1(c3}rXh%>oArjxNI-K0 zQY(mbaJO*=r!z#`^{!klkGG&}Vcqc3r+!#at!7opM2@r$IoWDw3Zq{1{}J_-QB`(b zyPK4fmhMKRq+7ZKM39i~?(XjH79^#+y9FerySt>DZ$0CTcO3r8z#Z#ebIz-#&ajG( zOTy+yVG23k*oE_mnR4MJ=4RW(J8jonQj|PU?-s?3(vlS5$#C8=jX+SR$p`EU(XB*2mElN8A)g0GZ7GYfP!@6G6|Z zS-+8uu0eYXg-gPg;jv{ztR!M*{sodV{jDd2H{-=(U%vgdr=$`2t&5HC*>Ckpvo*i7 z!e;}Vkk_+KX6P52+{dPe*JJG3rjLGY4z#wu_fXMLL@=M}MU1-j@_0~KgRrCvWaAPC zVM$CD!RHLudXC~T$K31jZwM2T#FG)ozrsdCPvVnP z#^Jy8WKV+OB5oWM!c=DYcFeLV=-Edb4#omV8ZMuJR2Qs->4nzD*1R=iI$Ke>eG$e_ zk-Sdj;MMep76wntMt_G62215RQKfb>q_%@r7JeBbS9 zjN`lewuKaZYwO8_4ui`kPkU%?YU+a4H)ph@p5_&(54uO!51+^&kR1DUL4|M@Aq)b= zlNK7d_Q4$b58NI)Vx!iz+*y+=1D=<=qY#MPPucjf-(KH|S))fI3US&OsTV11f?ccG z3t=a*n=a-`A8oKx+6rJGby~J!a=U?1Mj2-h{O;HgU5l%q+C3(N0LLI8Rg5S zdeFqfFPhf)>Oe8WQ{>6Qc5SEEt49bLX34MF*gG~8D34#{zuT`anVeka=jEy_>UY^7;z3b<^$*A(hqP3;aC(1~~ zP3o{ntrMX3YR|v$#&2G$%}rJU(3ty*cd15%w&t?nMo}pF*@*NJihcI>And~u$)#4d z+6V1AQ^f~&JMdd;!9gJ*f19Th2jOOPGAgxNRkT%@2zy#O+7h$m`w@Gq%K@R9L z3eE^=h$GuBlfnq4<+P|jcx!R($wUtN-ne~b2g743YXA6N%$-?{YP>V^YVK4IT7E+cIi30%eHEV|QPC}Mux zFaQj0|CKVh^?b(s=&{c!nO;j!Hs%)EzwxU2-zdfBYODF|V;An%T{A%SA1{15sE5>* ziKiqY-X7R7olq4^XuHvrZOW}LD$wV@c_*lVM9lcoj^Xrxg#h=Hlc+|;Td(4&3w~=_ z(pqvYqQliWczEyn)+>#WGZ+R!w`Pr9I0a+vxzBkIt_3cg$-;6BfNnjM;qgSW-v(}5&pSSufn3tU}a{dWlrw#hd~9YrO|2KFc9TqmgEi#DJ^0Y-Sc$TOD&yHF{eiU zV}ugkH7D*o#Z(c}hYn5NQ2g+I4i(qbuSk4t7G4V@xixdJEM(wfRqYA`N9u{UWyhm? zWsRmG_3Ysbsoy=KH439WX3=;8bSE>5eUW|_j`XI!Fc`1d6Ee*@njO!@f*)^|(dUX9Tl3PKV2-xNM}%UhYM$YhSG*)nLWZVK|r7BIO=$$9(> zoyo0RpSJh%YS*qr^At*Z;~R^(ekKrr>fDjtPKre>%t| z258dU|EL|QOG>3J+x6q8jlx636t-4f6~V_S@I(oBNS+?O1OW5ALR$<1Y>u$M_KQ#m zvA1>Zzn4BD!MtD7i_98=gY=DW1)ZV|3$oLNfNa_M^yr1nz01Tr5MyK9yaxlZrKA%? zmhpy1+0pJK9(PqVFS(#$#)XE&ry#egVh7SYQhch)`}GS8*~lCb(=1%C>;a}>%H;~o zPijcv`rL%MpJpW4)OYadVbMo z#yY{fsRg25YcU{kq%PhlaT+D)Ut3g}w+>QBj#L_i<&V3j_HGiccVO$T}=pYjej z#Xzm787yNF(XWuE>jpgu`Kv0l?JQNz?Lfq^XzN2$h;My2nv;dI|6|#1qn_O0v1<1I z6YJBDm*l~jF#EjXfW~1G3%MWeA7o-blXlX2t`p|IWb_S+YDx!U+J3nPIk-v*J_JfpNxjsmY@1PaPCrq z$yl2v5enD3_ZG5n*m(J<2tSyyf$6})Ph2MVr_xX8_L0mfu$uSi}?_1R@VRqqaf(FAUnh8+;aAoEBu<^9?asqZR^2osHv%wHwc~VKu9X z#qvveg?3O7yGz$m+7nn*@MLBY`~4FN0%MCc-&thFNPuo^RqWh(#M?{Eouw#NHn(kv z!iu)+FcMS{RNN$R*&($KE;M90RQ3KEGbTNx5t01{`841VKZS+@{vv(`wW}`(8-u_O zB?M&^K^L4Iys?fGK>$Mu&|GYv|0{32QrFliG_M?w)U(!~u;@m308iU})f%te<-eRN ze4yNFYr1e?YkqgRiH>63_6z^1&{EIr>277?w!tI$!*_THUW=S|b+4L|a*Vzo#?m`3 z?djDfZA0A#P{5NrOg@*CUqU>me0^E<<7xoLDx2i3g<{ zIv}Y@Fs-~HVOo_Z5PKV$UXVZK7P=NZ@=-n5o;kW*NyhJgS^%uZRSqI4EAH4u(6Y>@ zKc$A`RBikoT83-f%&LcW8MFt&}ikI07eNDxUWP~G`!}Okv zw9mtKZyY!x7+VXDOYYKa0J9iy5+Ky zAF61OiPbCqc@bx4*e_fd98v^aF>@yM`+q*q1lMOkK=x0gJ?zn+g}+fz-7y^tmfj$k z?punLUY`Ql|Wb1-~n{)R$7U#bev zk_be6L&Oas`rR(f!dqB#O^f&FOqgkA9x0D6JPwW|w8;OX~8v+sfF%YlBTghY7 z_KW!0D3#2Q>0mquS+B-2wn=KjbzY_UFVGJW{R_)APFXMzBSc*Sl??(J8iCEvygPMC z_AQMt1vP3Yq#6TcOy1QBOScasNOGL4xqhVd1w<&6*;?&45iM)?kwh-yZhZI z3im+er$t;42b0JDYHT9W>)_=-#O0oH` zqrRc+;$MCKPk}LdPzZp$Mvgag=|me~qhiEB2>*NF=zgaLBwYdCY)rho?(=UhJcQIW zBChw$(FXsl!khQ@=HyUYLe7+K|2&co_6aG@SS%av{a#ozNkbO!UE8T5kDZns`|}(i&+3EbP|;t5jR1k5i**GLeN2P({RK^Bjug`6 z2U0V+vSaeZ?znHl8@8`-VI86LOK1xx2%W))$ilb(-BmI*;v67LEo z@Bgu*^nT%5^&a~6QZ3CI$#IbKJ6S3E4o=t!-VfshL^&#P3o<0PN_cIFGl~SzoJNu1 z_C>37j{8fq`A6^&QM(&m#J*kkMXp>jdA1T6*@%>Y?hk2W)Br`8*;0F1Q+vcl_Kj|!6zt4zG%H8 zdP3P7_E+-No- zdq%$tV`fcjkUP??Q$QfYie-xe!g`7I-8LU?8+7bZ+%$F@*IhdHKTg$5KO$f^P462- zkapgtd7P`LKfqT5XBnG;VR7bi6tR3%=Io#<+^xZF;%4chFl5T9RkUXlu{g(%)yDlT2-7FRG3 z3D4YL^Va@Ej)jr&_u+Mi9Jj#E72=a`DsTdf?Z}?Acg2Z-vYY(dT$9#!&>RH_@~{Xv zE}f~-cFc^1?|8PGvWJ+pt4ZYSrt7j(Lm`v~d*_}iAKc%YNb9Z5G}M8L@F>W@sd6W? zHYp3w0-%zHT*kCv@ivv^Nlcbx4_z7*1O#MAa^lCUXP@fpr3m*%%Y`0&0mJ+g=BJK3 zHVj(>FQ?m(Ft6a-WkDy^-X6;CU%{=F&ulwyH=&-GXi-QwD_+hX^8{z(QIsHL5MhXD zPzbq%Ev|LRRS!EEahG8@Mk@5mV##<~UdhAoy2~cpc)z2j6To(hXc}gZYhcU3sL1J< zK_uB-_ji(GP2F30RkXctGrjM;`WU=(j4hrbn&O9Ytb40@Fra?GLH3K)usI?w-}m?L zJMbY?dCa4BDwsIBJ_Q?~&*2z%2PJ(fa`>lqotwYQFJhhYDVbY0H7hE674HE7Rn!}k z4vMh!9>j9wB_?i4S_hF5Ev@PhQUwF4Q{*y)3Gc~*;p(%fG7En5qsKaKfW$m`dQW4^ z(<$cE78$yqDLmE*&}TZ{@7H%6Qy)X4C2#;4R30PC19HCsqckXTx860U5fu#X-Pi{9ZtxpVq5Al}V(HCX#*dZYM>j;#H1g-A4aX%Vx5a_a42F zKVm3e2@G|qq+H3j2$K=%10btXi3E3BATK&=gz%*r`llcGN=5ks%h-O0_=~06!)92b z9Lexg+u)lwu1kH;6t;c1*uM}Kpw!g>1a+c&Eu6NRQxb_i;C<+f{JOB)BvpaD`H2kAZ z@{KwpFHa%0F@eoZQfi^Wjm6o_K!-15iBwM2`W9unf`V$2kKrG$60G&RDy#4&H-6FP zz29AhHxVH1vu&C-C>V)Z=*KQco-)mosZmb=jm0a&>2hWg2Bw}hE z%JUnKmMD{$Wk{(5fivoxHMvKdrO5bcKIh|kAJwK;2s(V*x(YPdM*U@-E!X>v#7<8p z%Xfeb%SHo;cb$9kAtS+7krmC(+`e?smxOe6*?WQK;LG+@a6Wh)n{!u_N(+)~8DIjn zi&Xo9IsWzQA~Vm78mW7&+dw1I!|{Kzu0$Bl()5a3B;xpw9Y3n_Xt{H8QBX? z>bq~LpRLe@{N!;Riwjr2Ph0f3@64B8YPBP%DXk}?>2)h3h~zZ!w5j77 z?CuWoEIu(75yOp}{VpI6dox;sK(v4MD0suY`&{pO<#;-crI?c9!cJ0sP4MZEx8O&T zLm-sgBS*=DM{V`jJh`S<<}*vepy0QV@mv^0d?^QN=j!y9#L8@3!b%!W*P_^&_| z)7Hk1;737gr_3`(BSY`&`+m@E%Vsg`4JG|&ZhK5gox^|WtTS#V^QJekF58Tq3m^&{ zaOzk$Vs$$9xg^ULJ(2HLe_M`CScQiZ(^Nv0&gGGZ3uN#`*C7!Du>K-+FK z3{IZ9lql8|3@0ifpxphzgXC=BYIKD~J@KPJx?+kDmG-aSltI1G_USS%xj=DK1rNYo zJa!i>4=#K08Ic3)s!sxyRZ`Uh;bm;&&Nd+$w_PgqJ+as=ob_J}LfY`}S0!U$G`#WS zx2yIY76;tmlo||VVud$AY{1xVr)c0o$I`^4M8c;yvx@d<;9N++ zqjrdlML#>@s$E9!2o%Z?UqGU!E6mHew6VYuJQvjHCcryw0cB_pw)?##dk?#rU z_b`-rFJ1MYg*7fKZ~p0s4_-&K-I;nk@J@m=BRMdg&UYNM9C^eg&|sUa>NJyH6`NfZ zTf}HPLtJ%{VEP$<#&NK;^pl7d7l@6)>_xhX%CUMnE8B`KHI9e!=@gNt_u zQQoO(X$y;s54hJad;cV9*MaXS!2CM6mCK!9u#x89?;d#lxoKc65$hd0d?kQ;&5&n( zMWDiu6yNDa1{B5y#jLwf^d>u#elcp36TlARQ1w~*fB#}mtP%d~4K2qL-yfE{NvC*Q zdwo|$^Cx1OVDtmlx?S^Q~G~Zq?5NV1l90CDw(n*o0;j`O%mtWj~pG(I_q{oT9Br#%! zN2u#{;yF#$zs>ILB;txh)S$Im5#Rzs04f+fYK?1;ydxmY1t3U5GU9^}GdW^X7XnBD z(f6Et0V_fjNgobmJKg!ab4Z-DV}7ub4TehIR&X*%0?r8&nrYd7j+S(}_47)pEu&Qa zPbSaPdH{8iezt15j~_GX)-(tG%u^GIv+6DZv*@yhU{qeu@-HKQqOKsO-`D2Q3(HD7p8t4u0q2WuRQ#!ifAS0JryWc ztSq1Q5ia)Iel2Po6O%R5*@J}BgS%oe4cJB5icLer>Q~OYMYeR~2=#H>>b_ZWaclQN z-`K7ICe3Ou3lQRQSUmaVGQdd@A-lv6U$@4q_YB1V$@y2sXorzqkbmVS<9I|Yx>|b} zmrVz5D&RVRe0qk`xMBx-1)3BZ+e@R9-&ryrk4s;CIWCRN7D5Kn&qh)3<7-5u7DK*K z&LI#~4BG*j*1wDgKc9pz3oOwXu=24F+E#H(v+EH*{=B<32*gYSOr2;N?Uvg=K=)($ zMCY*RA;4e!{E+>&^I8RWi-vKRZwdOR#HV>W&cgv@E^}j@=&+35h#zA{AxdY@*x0h5 z5t{xT9kIV{>v_rkSRrKm{;{hIowCf3|BQYm zuB{M>H%YpdHKW@J7A65zfh_~I2dm?z3C zxcK9??E7>|a~+cz(24{Ha2956PUbys9Uk4N2hm?GsOr;yZaQds>mRnM>U1r%1h~|L zTHRuXfTT;{w?Uz1`e06a>4e7|oZghGFdK*%Np>_o7X4|=a%ME84h7NZ;wK$Vc8B#! z%Z)6PI!yqRSV>9A2b_q8iBW}|;y+PFMn>Sn4%1LtAJZxNmsaftXIIPA&&>xtsnoi! z;xf{US`_ab@7zi(J~?Jl5&AFllz#K@@$EYL^c?9gPNA-{7K%oyfXNY-ec^-T@}Zc# zKudH7FbW4XV)4UYeX{S3!mY3QV9Z=81JCLM^N!PvIlHc9S70;E|=#_ApuJ_KAT=C8}mETwc-^J%7 zgr*Ol{Bc^a{z8uuN?pLMyq`#~^l)_m0}0I-Ddov27c!&T^GUT2p9>FX!~2gVZW{nw zDH3kxd4wl5A9w+|Jhxt6vt8g{Xy6Q#Ol`a2S-mh2fGC@B8&ZCWZTlSC^7YGO0!UIm zqm_M?i%(5kj)-Ys2(A%HY24*=xZ~y&jZE}1z1pAjW`=#$F&!I8;q%lmI>0oYiozVf~Ctfj=HGR3Zq` zov^5R2mlHB3{C}I7GmFcP$8cdzsG41e#rvT65vO!yqi{T9b9zoCMWIT=TLV#q2~aI ze9ThxTdRt@zTc=tB={4q?_2xx2F-nH>c(R#zDJ0nH?@y`d8p9Fq;;hdvQ|{@$x)?N zeh)VkC73!}72$RJ#xf$e|OQC(XcslGCL))h{=OiX6V7e*||aaJ@xf?b#?WJs0%>mrWL=Jr<$qX zIRyGve=&kxN+2c;Jw4hQ(YoFPvOHIQAePnr1aT5ZYoWHyX`gIu2KD>vO}?R1N9!Eh zFG8+w9v*Lxop)PA{F#9P4zM8ZVE0kKWbLom10`{-MKv# z{!P9q9hXGINgRA^s?*)!dZtYl+%6m?_kYq!a9*No^h%Ny9B&r+e)U1r9Vy~_@ z4ynCh*n7MZ>g&C(y@Hrc!|P>S3dVI+)9^C9L}-#J&2Y}?kBpd znf`ueBo*t&EUnhN((+z)t-hzZ*$xQ&P%u7T3G@?~EanHq{lelC_~x{SoWK$!_#`Sm zOo1p81e`y{nPER(tV&o(%jeCI#&=z#=!AXa_!8+E;ON4E-vAmyKuE}1ma(MH1!f_i zPfx`Ncvmc6o5w4aTvlG2mj+%lyN7)&G_}fA^5_U!5X_)zj zr7x1=jJwo0->9y%7-||Hmd5y|W8l~hJW|tYg-V@0(#{>% zG&z}W=`AfERR`##a1b|Auf*t)+vW`0IdbJ&wyqm8(C-ylSeLs1F>2qR%|aV=oB4|m z&Gl?^;&jBuHs?oQE9d5(3sYhcRpxO%sC9|W2Vao<KYR5iq)C2aB zx}uHR!Y<<3gnSV1GKFF+b@;Ar(M=#Y1p@J>;svXVR%jU9)jgaGhkqg&BM2%(mk*uE zJ^8Zd5)A%uV6524xt`U~djE5bzle_EZpmc)2V=?z6hxcS*yb&8VbrcBvKAyB9Zhee zjz#;f`9+-WVd1uyI26MGE+oOIS{KiJ#17seyv2`Lp8ShGcu76V5BtoCb1J3Mc?K;I zJ!v|BL*OocaCe%*?CxQfq?4!u4DCm%P?l)w(4xs81W3-4Z^^%Sy~8k5fWs^8M{D$% z@mnJASS`CMW;Cc6b{zeE=V9te<<8r<&8T%K0|gr}oCQ2~#w#xs_ql+OKl3y&?OdlK z%YEJ720s%t2!5Emmr$ta1lt^Xz}dm36E_7X)#;Q=s8J`nmXLsxAE2FbDASfTr^)qF zc+x2EcuBo7uce2Ge5cH*`It~}$o6-={G&Ct(>hLALti-qBIgHm_~|qJfA?@!E&Ah` zrK~8dAMHbGuCxN?unjAJo(;VhVvDEj!KUHAyVk7-1XQ&;peEQ8-5^k=p7SQ%&Jh-% zW05x!uK8R@6;Qnx*YY(BlP@5`&9=tSpG8+GiR;qnfReiU1UGB!rfcdl!1x)*<%l@o zFw@{q#d#X8{^?0Q5$S3lI=ND`IAgK2VTh8vob^h7hsIs*fKC767$5M}t znU*LyLvoI@DIRPvVL)E2ZL=n7h{4775I+es4UO?ePY|i+dH2EJBH)`J85sfAc_Eq? zOV}sL9-le-!m=_HaYe|dsjn}6IuuY)0D^;-`UnUUbgD@#oO38BYDNqy#+@yw&8Z92 zLg+X&0|P+{b4`p!@4l!2ZPX2~(;}Z-##pm(`wFBU~IlWA@RTtFdpuYu z@ZRs9F2_0Gtby$K_F!r34Z;OERu`PL8%{)BJC$Ev;EM_u+sHbyhf8#TJ#iha9tR8DUz(X809fD&FYOxb}=JdhKm6k3a z_g5znu&ryI8#__W+%QmMc?XUDdlmO5!%Zx70qFnEtGoRQKpPdTV+k5*a>w5bB)-M5 zo^+QNHK@=>g@?4hH^FcGg_ku+AY{&*3d5?1N*co3A6K&5`^>$@KVs|};7WkuaM7v8Pfo7~#4;R(3()?cE9Lq& z+CiXEJM#4*TF?^3L)cF9k=kU8=p9!&FSAg^+233?Hf2EAe|Vh#QaeH+ZG!svsrncH z2BO1ZW}8~)+g`;_JLJ0rfNP~6q!fjjP=4^e%PA*`;FEwjpkdX~f96z%2|9ICf+D?~i@`R(n*keo3G z>0rgDmkRHaT|dW%H?+P{JHP~6-rCIWs+P96x;gkHMmIr!*ZA9sUb05_ec;5;*WOjt zK}ov`t2MUT(_}-JtqSxHQnm=E)^JExev3bqizmJoXur>dW;{JTrHX|h22%BLwh%6q zwT}O}9n8=8P4+f9OPZrORIT_s3nc&xn0zBBYW|Or$dKbNi}SS`^^%PD3`^hbwJ>1d;wCX-P^??F5rzXN-S+466oW{Q zGMM-RDqOwd9v_g)4PwL<3C+2UR8iJltzczBauxU%?^hm&*QelI;~YWVgn)%-g7dnZ z*dE8`LZ_5VNXx3(R`?wpnHNyDy$5L{MsAg+jPEP!7jbPd;Lhsk;cY1-FTgguj?nYC zVn#}Cr1ag~0EF1L*^{k46gig@bw&NjytfUFF&?9^GBB0+o%baTXS8}xbnYp8)Ld(3 zg$;t1QxKY%;E%B{*(1~ke`<6xyC7ex`+Lw0+SkzDHl5eJrIGoVex4w1aaA1AA4KYO zcT&6hmKEEB?2|dNX1i)*gm#!xn)e&>NE_yVJ$O=M4G7O#3cb>Nkmcv)3D23yy{#(3 z%6d2pe~;()PmKT50{EbRukY0_wnl5Yb*IhW{p9iR&Y#>%5T*4#c(%Ova?P^!v3b>` zA8QZEB!%kgQCZM5YxC(t{kVkg2g5%bzj|V>8Jp!JgChBG$`=jXs`|UobFjt-Trckb zw7Gg?dktUDFN!u0R+=}E)U>_2C;Ma2BRiLN<5Vt;|2yX_32SU%g4=Wp-(#Tm z1Y>Qud^h&TaqsgH`yNpO^WYtk*xb&EpTM%@EO9mU*s&|`G;!^lRV5v*g!kQLh#o6e=z$&RyJYR5f~QWM zSlEB6XGDddMy;9HsQSbDKGp}dyRc%KQF4kg~;KOP90$PeUvy2YhzK!>sSxP z8+NLPmse0kd#2BPF98j?#`hQ&iK|~+dS!4sxE*NFus-}0E;xydg(rO}*6n;n#8W;l z`BOE8bB?sOKXMNSdRTaQOn|nf^ZnmdN4uS?iH_rV($6IVvrszqx9nnH_8V!+>|3ez zf~(w93hrbBSkh;#ghAdFd;VI8%vjJB_%MI5`adNt;y7viK|zJY_Oc%$JIi(8Lo}_R z8ks)r86bpTX<#|KM6H@oLb_~dtvly9*BRUv**1MMKA9mfXQD!OgffEuMMACpuD`Fy zk!dJp^kqfIM3?4e_~oa0_fycjuxi^wscVL*hFr!N8for_Me(8;y@pAqEluGPLyd37 zFP`~ROp}m_mQD)fmh?3Jvd7Ys{tgH_NBSP?2H$4sle4FaT~FQ9-9?mfuNN8wEZ_=8 z+tG3>#E0BXUS*zO?Cr7hXh46!$9Zk$JKLGvEtOA3$#5hubj&LDOi06$$nfM)$vA7d zGfWUY!J=hj!EtZ$@md`zM>m_(g?&*WEimIh*RIU5^jzD@<>UcIahxB$&Pbai}{%~cuM!8eqP*) z9tHK#1s&Wjy{QNoWDYu}a_VF)PmY&kcZb1BoXZMhS(_`55Ia2{UqwK{#!4!3~r&+32Nh>1w5tZIpqh_ zpK;}5xVA2^?(~6Z8_sU>n^O-5o|dX5@9z=yCZb{su`n=4CE+_WPI@#8$T#3tHIDSFd`*{-oMBQuJjiLL$Oet_?);wm3ZAi9s zSZuR%EJTdpVwjS}V+}87&FYvKyEJ0qiK6PZFIYq1(n(7 z$S~s$sx9$}AjC+&HHNX#=`V|FFrDAjEIboSjJ6T9rzlnz4$PM&Z!+R}jBSqZ7YHn( zVhH84ZD}56OBzaulXpkt&ERWqVy#@v<*rFIV&+6~%#^_OhE2_eBs5`zRLuP`|8yR# zq!H_2tP(|bCk*PqsKJO*t^5irqLPgW6bo2eA9ECcY~4~s1MrRsQr+x$?Zx$ z%M8U-+gA;PgIkGDex>=NrBWg+5Z{{4^pDBm0dj7oE*c5DNOEXxw{ryMXbY|wb<;&u zqMUU?DPS)R2*C?j^c(n!cKSx$_|YJ@rsk`MdU~@mCO?IVY}X79LQ7v1HOY)NgHmW# zR)sVBeHJ5BHeAs^7Fg;_Rdf1EdM)3@L$A*yC#Oa5mH4;mc9lE_nf*aiaS2<5ia~?j zb8piZWaEb|+c)An*CG4ARbS;S>hIG_9Y*-g6*Lz=**4O1r$3PxklDjBn^T>=eDCe< za9YR?Dd4BK9&#}Dx&QS^_wPH}I9>Z@l6Y}SyRQAv`T>ti4yzkn;!;y4UJ3`-bB47y zN+MVTthdG`+(-nHlf@C!PDNB%L-G36Sa2l*$<>3ogbIA9Z+{)#)YRSNFh1i~Qw50c z{j_RaIeANqzW-X_=`;R4WtQvI@Oa4XEmR{#YOute^s|g!9y}u6aiL zses&>qVx7qZ|U#IHc#Y5ww!|uCZa#xgILOc8;#c7!JE18jI&2ik;#+Qp=s`%{l#dj zUg`zK%q=6(zKUABU^Ak%%FDrZI`-HSxtD+Z<$I?>4=P%jf`^Qy#d)KqL$n~a`b7Yu zOTs)eGk*9B(GJ<^io!Lxh+!a+epmN&#{;E{Y2t_oNO&*@FX6{mR2)i?sNahs3Hlkd zOnA98*iIyf2E;H;5NAw|o0;oTm$0L&V-+7M(5@?yk48EFO`mqlWxff!ue5km_Dw8m z^BVlg?Yn{F@ts9aT%|y*@AG|8xkXIa3e5yZQ*iG&(<)yJsJ%6j0o_gwbrG}26 zH$A5Pc<*h5r0DNE%xIkG_nDutl;{tX?`9=P5Kh06CAytmvhwGC@GDFI9oM$ON5RBw zPI9FR*WaOytnD$+S^2U08P7_rm%delwCTB{V#HyJ$0+QvWzNw#rT9h-zTz8f=PYSG z{ourmxs$RoHpI~BsP^7jywA@W$*}7okW0SHY4jIKb25; z@4Zq>lR<=#@(;rvTr|?e_#ZGz8mWIKC7og(A?E0wY#5Vwrg9p7`Li? z_#B15iGGkp+imtCjtBK=Gds=OLe?kl?9l#6X@C1mEqRA-eV!HIzuQLnF+>v1mreCI zg}p28E=Tdr_bKxzhv>aP#e&1s7B+aK3=*HMY74XfaZ}z(XhR*llvq$@vE45ilmZT1zPw?Q>4V||KwIJl$c&Md%+JwkXX=(h&uD@vJpFgfD?(Q;qH9|$k zos1`G(X(kYe2f9FC0Bf*g(J=y<)l&w9dzj2#m$yjR4m^-%0zv_+a8;tR;^wU4an3> zMRYOF4e%xn?&6@d4Kwaa-o>m&ivcC!?l-EhxTUWt7oecU}TW;mmAQb#33E+QfjFh@TQ#()npQu6XQH$C8= z!j;rNvo1Og>DgRmWfaJ#k`vVk)63{5KbyXP?%tn*fAGX3U`swTM^?73)%-pY_$XDG z1c64!&Sdl(9>sCdfS`YLs&<`M*y!{|Jo?=J293n<<^SAUUcT?@YMd$ z(vW}{cz#%Ek!ge2UWuE1&#Wqp9Ip1wnsqR83phF|8oE}--|}IWvJk{S z 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