ascii_context Derived Type

type, public, extends(plot_context) :: ascii_context


Components

Type Visibility Attributes Name Initial
integer, public :: width
integer, public :: height
real(kind=wp), public :: x_min
real(kind=wp), public :: x_max
real(kind=wp), public :: y_min
real(kind=wp), public :: y_max
logical, public :: has_rendered_arrows = .false.
logical, public :: uses_vector_arrows = .false.
logical, public :: has_triangular_arrows = .false.
character(len=1), public, allocatable :: canvas(:,:)
character(len=:), public, allocatable :: title_text
character(len=:), public, allocatable :: xlabel_text
character(len=:), public, allocatable :: ylabel_text
logical, public :: title_set = .false.
type(text_element_t), public, allocatable :: text_elements(:)
integer, public :: num_text_elements = 0
real(kind=wp), public :: current_r
real(kind=wp), public :: current_g
real(kind=wp), public :: current_b
integer, public :: plot_width = 80
integer, public :: plot_height = 24

Type-Bound Procedures

procedure, public :: line => ascii_draw_line

  • private subroutine ascii_draw_line(this, x1, y1, x2, y2)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: x1
    real(kind=wp), intent(in) :: y1
    real(kind=wp), intent(in) :: x2
    real(kind=wp), intent(in) :: y2

procedure, public :: color => ascii_set_color

  • private subroutine ascii_set_color(this, r, g, b)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: r
    real(kind=wp), intent(in) :: g
    real(kind=wp), intent(in) :: b

procedure, public :: text => ascii_draw_text

  • private subroutine ascii_draw_text(this, x, y, text)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: x
    real(kind=wp), intent(in) :: y
    character(len=*), intent(in) :: text

procedure, public :: set_line_width => ascii_set_line_width

  • private subroutine ascii_set_line_width(this, width)

    Set line width for ASCII context (no-op as ASCII uses fixed character width)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: width

procedure, public :: set_line_style => ascii_set_line_style

  • private subroutine ascii_set_line_style(this, style)

    Set line style for ASCII context (no-op as ASCII uses fixed characters)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    character(len=*), intent(in) :: style

procedure, public :: save => ascii_finalize

  • private subroutine ascii_finalize(this, filename)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    character(len=*), intent(in) :: filename

procedure, public :: set_title => ascii_set_title

  • private subroutine ascii_set_title(this, title)

    Explicitly set title for ASCII backend

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    character(len=*), intent(in) :: title

procedure, public :: draw_marker => ascii_draw_marker

  • private subroutine ascii_draw_marker(this, x, y, style)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: x
    real(kind=wp), intent(in) :: y
    character(len=*), intent(in) :: style

procedure, public :: set_marker_colors => ascii_set_marker_colors

  • private subroutine ascii_set_marker_colors(this, edge_r, edge_g, edge_b, face_r, face_g, face_b)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: edge_r
    real(kind=wp), intent(in) :: edge_g
    real(kind=wp), intent(in) :: edge_b
    real(kind=wp), intent(in) :: face_r
    real(kind=wp), intent(in) :: face_g
    real(kind=wp), intent(in) :: face_b

procedure, public :: set_marker_colors_with_alpha => ascii_set_marker_colors_with_alpha

  • private subroutine ascii_set_marker_colors_with_alpha(this, edge_r, edge_g, edge_b, edge_alpha, face_r, face_g, face_b, face_alpha)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: edge_r
    real(kind=wp), intent(in) :: edge_g
    real(kind=wp), intent(in) :: edge_b
    real(kind=wp), intent(in) :: edge_alpha
    real(kind=wp), intent(in) :: face_r
    real(kind=wp), intent(in) :: face_g
    real(kind=wp), intent(in) :: face_b
    real(kind=wp), intent(in) :: face_alpha

procedure, public :: fill_heatmap => ascii_fill_heatmap

  • private subroutine ascii_fill_heatmap(this, x_grid, y_grid, z_grid, z_min, z_max)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: x_grid(:)
    real(kind=wp), intent(in) :: y_grid(:)
    real(kind=wp), intent(in) :: z_grid(:,:)
    real(kind=wp), intent(in) :: z_min
    real(kind=wp), intent(in) :: z_max

procedure, public :: draw_arrow => ascii_draw_arrow

  • private subroutine ascii_draw_arrow(this, x, y, dx, dy, size, style)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: x
    real(kind=wp), intent(in) :: y
    real(kind=wp), intent(in) :: dx
    real(kind=wp), intent(in) :: dy
    real(kind=wp), intent(in) :: size
    character(len=*), intent(in) :: style

procedure, public :: get_ascii_output => ascii_get_output

New polymorphic methods to eliminate SELECT TYPE

  • private function ascii_get_output(this) result(output)

    Get the complete ASCII canvas as a string

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this

    Return Value character(len=:), allocatable

procedure, public :: get_width_scale => ascii_get_width_scale

  • private function ascii_get_width_scale(this) result(scale)

    Get width scaling factor for coordinate transformation

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this

    Return Value real(kind=wp)

procedure, public :: get_height_scale => ascii_get_height_scale

  • private function ascii_get_height_scale(this) result(scale)

    Get height scaling factor for coordinate transformation

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this

    Return Value real(kind=wp)

procedure, public :: fill_quad => ascii_fill_quad

  • private subroutine ascii_fill_quad(this, x_quad, y_quad)

    Fill quadrilateral using character mapping based on current color

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: x_quad(4)
    real(kind=wp), intent(in) :: y_quad(4)

procedure, public :: render_legend_specialized => ascii_render_legend_specialized

  • private subroutine ascii_render_legend_specialized(this, legend, legend_x, legend_y)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    type(legend_t), intent(in) :: legend
    real(kind=wp), intent(in) :: legend_x
    real(kind=wp), intent(in) :: legend_y

procedure, public :: calculate_legend_dimensions => ascii_calculate_legend_dimensions

  • private subroutine ascii_calculate_legend_dimensions(this, legend, legend_width, legend_height)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this
    type(legend_t), intent(in) :: legend
    real(kind=wp), intent(out) :: legend_width
    real(kind=wp), intent(out) :: legend_height

procedure, public :: set_legend_border_width => ascii_set_legend_border_width

  • private subroutine ascii_set_legend_border_width(this)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this

procedure, public :: calculate_legend_position_backend => ascii_calculate_legend_position

  • private subroutine ascii_calculate_legend_position(this, legend, x, y)

    Calculate ASCII-specific legend position using character coordinates

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this
    type(legend_t), intent(in) :: legend
    real(kind=wp), intent(out) :: x
    real(kind=wp), intent(out) :: y

procedure, public :: extract_rgb_data => ascii_extract_rgb_data

  • private subroutine ascii_extract_rgb_data(this, width, height, rgb_data)

    Extract RGB data from ASCII backend (not supported - dummy data)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this
    integer, intent(in) :: width
    integer, intent(in) :: height
    real(kind=real64), intent(out) :: rgb_data(width,height,3)

procedure, public :: get_png_data_backend => ascii_get_png_data

  • private subroutine ascii_get_png_data(this, width, height, png_data, status)

    Get PNG data from ASCII backend (not supported)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this
    integer, intent(in) :: width
    integer, intent(in) :: height
    integer(kind=1), intent(out), allocatable :: png_data(:)
    integer, intent(out) :: status

procedure, public :: prepare_3d_data => ascii_prepare_3d_data

  • private subroutine ascii_prepare_3d_data(this, plots)

    Prepare 3D data for ASCII backend (no-op - ASCII doesn't use 3D data)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    type(plot_data_t), intent(in) :: plots(:)

procedure, public :: render_ylabel => ascii_render_ylabel

  • private subroutine ascii_render_ylabel(this, ylabel)

    Render Y-axis label for ASCII backend (no-op - handled elsewhere)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    character(len=*), intent(in) :: ylabel

procedure, public :: draw_axes_and_labels_backend => ascii_draw_axes_and_labels

  • private subroutine ascii_draw_axes_and_labels(this, xscale, yscale, symlog_threshold, x_min, x_max, y_min, y_max, title, xlabel, ylabel, z_min, z_max, has_3d_plots)

    Draw axes and labels for ASCII backend

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    character(len=*), intent(in) :: xscale
    character(len=*), intent(in) :: yscale
    real(kind=wp), intent(in) :: symlog_threshold
    real(kind=wp), intent(in) :: x_min
    real(kind=wp), intent(in) :: x_max
    real(kind=wp), intent(in) :: y_min
    real(kind=wp), intent(in) :: y_max
    character(len=:), intent(in), optional, allocatable :: title
    character(len=:), intent(in), optional, allocatable :: xlabel
    character(len=:), intent(in), optional, allocatable :: ylabel
    real(kind=wp), intent(in), optional :: z_min
    real(kind=wp), intent(in), optional :: z_max
    logical, intent(in) :: has_3d_plots

procedure, public :: save_coordinates => ascii_save_coordinates

  • private subroutine ascii_save_coordinates(this, x_min, x_max, y_min, y_max)

    Save current coordinate system

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(in) :: this
    real(kind=wp), intent(out) :: x_min
    real(kind=wp), intent(out) :: x_max
    real(kind=wp), intent(out) :: y_min
    real(kind=wp), intent(out) :: y_max

procedure, public :: set_coordinates => ascii_set_coordinates

  • private subroutine ascii_set_coordinates(this, x_min, x_max, y_min, y_max)

    Set coordinate system

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    real(kind=wp), intent(in) :: x_min
    real(kind=wp), intent(in) :: x_max
    real(kind=wp), intent(in) :: y_min
    real(kind=wp), intent(in) :: y_max

procedure, public :: render_axes => ascii_render_axes

  • private subroutine ascii_render_axes(this, title_text, xlabel_text, ylabel_text)

    Render axes for ASCII context (stub implementation)

    Arguments

    Type IntentOptional Attributes Name
    class(ascii_context), intent(inout) :: this
    character(len=*), intent(in), optional :: title_text
    character(len=*), intent(in), optional :: xlabel_text
    character(len=*), intent(in), optional :: ylabel_text