write_segments Subroutine

private subroutine write_segments(self)

The segments into the chain: segment i as points 2i-1 (a) and 2i (b), with their colors; uploaded, and drawn.

Arguments

Type IntentOptional Attributes Name
type(CustomLineSegments), intent(inout) :: self

Calls

proc~~write_segments~2~~CallsGraph proc~write_segments~2 write_segments proc~color_slice LineChain%color_slice proc~write_segments~2->proc~color_slice proc~color~2 ReferenceFrame%color proc~write_segments~2->proc~color~2 proc~draw LineChain%draw proc~write_segments~2->proc~draw proc~num_chunks~2 LineChain%num_chunks proc~write_segments~2->proc~num_chunks~2 proc~reserve LineChain%reserve proc~write_segments~2->proc~reserve proc~slice LineChain%slice proc~write_segments~2->proc~slice proc~split_points split_points proc~write_segments~2->proc~split_points proc~written LineChain%written proc~write_segments~2->proc~written interface~vkf_line_colors vkf_line_colors proc~color_slice->interface~vkf_line_colors proc~draw_range LineChain%draw_range proc~draw->proc~draw_range interface~vkf_compile_node vkf_compile_node proc~reserve->interface~vkf_compile_node interface~vkf_line_create vkf_line_create proc~reserve->interface~vkf_line_create interface~vkf_line_create_colored vkf_line_create_colored proc~reserve->interface~vkf_line_create_colored interface~vkf_marker_create vkf_marker_create proc~reserve->interface~vkf_marker_create interface~vkf_node_add_child vkf_node_add_child proc~reserve->interface~vkf_node_add_child interface~vkf_ribbon_create vkf_ribbon_create proc~reserve->interface~vkf_ribbon_create proc~apply_style apply_style proc~reserve->proc~apply_style proc~check_status check_status proc~reserve->proc~check_status proc~line_set_segments line_set_segments proc~reserve->proc~line_set_segments proc~move_chunks move_chunks proc~reserve->proc~move_chunks proc~line_buffer line_buffer proc~slice->proc~line_buffer interface~vkf_line_points_changed vkf_line_points_changed proc~written->interface~vkf_line_points_changed proc~written->proc~check_status proc~measure measure proc~written->proc~measure proc~update_lod update_lod proc~written->proc~update_lod proc~apply_style->proc~check_status interface~vkf_line_set_dash_mode vkf_line_set_dash_mode proc~apply_style->interface~vkf_line_set_dash_mode interface~vkf_line_set_highlight vkf_line_set_highlight proc~apply_style->interface~vkf_line_set_highlight interface~vkf_line_set_trail vkf_line_set_trail proc~apply_style->interface~vkf_line_set_trail proc~line_set_pattern line_set_pattern proc~apply_style->proc~line_set_pattern proc~line_set_style line_set_style proc~apply_style->proc~line_set_style proc~marker_set_style marker_set_style proc~apply_style->proc~marker_set_style proc~draw_range->proc~check_status interface~vkf_line_set_range vkf_line_set_range proc~draw_range->interface~vkf_line_set_range interface~vkf_line_points vkf_line_points proc~line_buffer->interface~vkf_line_points interface~vkf_line_style vkf_line_style proc~line_set_segments->interface~vkf_line_style interface~vkf_line_style_changed vkf_line_style_changed proc~line_set_segments->interface~vkf_line_style_changed proc~measure->proc~line_buffer proc~split_distances split_distances proc~measure->proc~split_distances proc~update_lod->proc~line_buffer proc~segment_distance segment_distance proc~update_lod->proc~segment_distance proc~send_lod send_lod proc~update_lod->proc~send_lod proc~line_set_pattern->interface~vkf_line_style proc~line_set_pattern->interface~vkf_line_style_changed proc~line_set_style->interface~vkf_line_style proc~line_set_style->interface~vkf_line_style_changed proc~marker_set_style->interface~vkf_line_style proc~marker_set_style->interface~vkf_line_style_changed proc~send_lod->proc~check_status interface~vkf_line_set_lod vkf_line_set_lod proc~send_lod->interface~vkf_line_set_lod proc~lod_error~2 LineChain%lod_error proc~send_lod->proc~lod_error~2

Called by

proc~~write_segments~2~~CalledByGraph proc~write_segments~2 write_segments proc~segments_late_update CustomLineSegments%segments_late_update proc~segments_late_update->proc~write_segments~2

Source Code

    subroutine write_segments(self)
        type(CustomLineSegments), intent(inout) :: self
        real(c_float), dimension(:,:,:), pointer :: p
        real(c_float), dimension(:,:), pointer :: c
        real(wp), allocatable :: x(:,:)
        real(c_float), allocatable :: colors(:,:)
        integer :: n, j, lo, hi
        n = 2 * self%n
        self%changed = .false.
        self%n_drawn = self%n
        if (n == 0) then
            call self%chain%draw(0)
            return
        end if
        allocate(x(3, n), colors(4, n))
        x(:, 1:n:2) = self%a
        x(:, 2:n:2) = self%b
        if (allocated(self%color_a)) then
            colors(:, 1:n:2) = self%color_a
            colors(:, 2:n:2) = self%color_b
        else
            colors = spread(real(self%color(), c_float), 2, n)
        end if
        call self%chain%reserve(n)
        do j = 1, self%chain%num_chunks()
            call self%chain%slice(j, 1, n, lo, hi, p)
            if (.not. associated(p)) cycle
            call split_points(x(:, lo:hi), p)
            call self%chain%color_slice(j, 1, n, lo, hi, c)
            if (associated(c)) c = colors(:, lo:hi)
        end do
        call self%chain%written(1, n)
        call self%chain%draw(n)
    end subroutine write_segments