segment_update Subroutine

private subroutine segment_update(self, t)

Write the segments added (all of them on a redraw), and draw them all or, in trace mode, those at the points passed at time t.

Type Bound

SegmentArtist

Arguments

Type IntentOptional Attributes Name
class(SegmentArtist), intent(inout) :: self
real(kind=wp), intent(in) :: t

the current time


Calls

proc~~segment_update~~CallsGraph proc~segment_update SegmentArtist%segment_update num_times num_times proc~segment_update->num_times proc~data_changed data_changed proc~segment_update->proc~data_changed proc~draw_range LineChain%draw_range proc~segment_update->proc~draw_range proc~is_built LineChain%is_built proc~segment_update->proc~is_built proc~reserve LineChain%reserve proc~segment_update->proc~reserve proc~segment_count segment_count proc~segment_update->proc~segment_count proc~trace_range trace_range proc~segment_update->proc~trace_range proc~write_segments write_segments proc~segment_update->proc~write_segments proc~generation Trajectory%generation proc~data_changed->proc~generation proc~motion_changed motion_changed proc~data_changed->proc~motion_changed proc~revision~2 Trajectory%revision proc~data_changed->proc~revision~2 interface~vkf_line_set_range vkf_line_set_range proc~draw_range->interface~vkf_line_set_range proc~check_status check_status proc~draw_range->proc~check_status 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~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~source_points source_points proc~segment_count->proc~source_points proc~decreasing_times decreasing_times proc~trace_range->proc~decreasing_times points points proc~write_segments->points proc~num_chunks~2 LineChain%num_chunks proc~write_segments->proc~num_chunks~2 proc~slice LineChain%slice proc~write_segments->proc~slice proc~split_points split_points proc~write_segments->proc~split_points proc~to_shown_at to_shown_at proc~write_segments->proc~to_shown_at proc~written LineChain%written proc~write_segments->proc~written 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 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~motion_key ReferenceFrame%motion_key proc~motion_changed->proc~motion_key proc~same_pointer same_pointer proc~motion_changed->proc~same_pointer proc~transformed transformed proc~motion_changed->proc~transformed proc~line_buffer line_buffer proc~slice->proc~line_buffer proc~num_points Trajectory%num_points proc~source_points->proc~num_points proc~verify_data Trajectory%verify_data proc~source_points->proc~verify_data proc~to_shown to_shown proc~to_shown_at->proc~to_shown proc~to_shown_at->proc~transformed proc~written->proc~check_status interface~vkf_line_points_changed vkf_line_points_changed proc~written->interface~vkf_line_points_changed proc~measure measure proc~written->proc~measure proc~update_lod update_lod proc~written->proc~update_lod interface~vkf_line_points vkf_line_points proc~line_buffer->interface~vkf_line_points 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~measure->proc~line_buffer proc~split_distances split_distances proc~measure->proc~split_distances proc~motion_key->proc~motion_key proc~data_revision TrajectoryFollower%data_revision proc~motion_key->proc~data_revision proc~motion_stamp TrajectoryFollower%motion_stamp proc~motion_key->proc~motion_stamp proc~data_to_shown data_to_shown proc~to_shown->proc~data_to_shown proc~moves moves proc~to_shown->proc~moves 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~data_revision->proc~generation proc~data_revision->proc~revision~2 proc~rigid_inverse rigid_inverse proc~data_to_shown->proc~rigid_inverse proc~world_matrix_at ReferenceFrame%world_matrix_at proc~data_to_shown->proc~world_matrix_at proc~moves->proc~moves proc~is_following ReferenceFrame%is_following proc~moves->proc~is_following proc~num_parents ReferenceFrame%num_parents proc~moves->proc~num_parents proc~parent ReferenceFrame%parent proc~moves->proc~parent 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 proc~num_trajectories TrajectoryFollower%num_trajectories proc~is_following->proc~num_trajectories proc~world_matrix_at->proc~world_matrix_at proc~local_matrix_at ReferenceFrame%local_matrix_at proc~world_matrix_at->proc~local_matrix_at proc~followed_pose followed_pose proc~local_matrix_at->proc~followed_pose proc~frame_matrix frame_matrix proc~local_matrix_at->proc~frame_matrix proc~followed_pose->proc~rigid_inverse proc~followed_pose->proc~world_matrix_at proc~quat_from_matrix quat_from_matrix proc~followed_pose->proc~quat_from_matrix proc~quat_multiply quat_multiply proc~followed_pose->proc~quat_multiply proc~quat_normalize quat_normalize proc~followed_pose->proc~quat_normalize proc~state_at TrajectoryFollower%state_at proc~followed_pose->proc~state_at proc~quat_to_matrix quat_to_matrix proc~frame_matrix->proc~quat_to_matrix proc~chosen_trajectory chosen_trajectory proc~state_at->proc~chosen_trajectory proc~data_valid TrajectoryFollower%data_valid proc~state_at->proc~data_valid proc~interpolate_attitude interpolate_attitude proc~state_at->proc~interpolate_attitude proc~interpolate_position interpolate_position proc~state_at->proc~interpolate_position proc~time_index Trajectory%time_index proc~state_at->proc~time_index proc~wrapped_time wrapped_time proc~state_at->proc~wrapped_time proc~time_distance Trajectory%time_distance proc~chosen_trajectory->proc~time_distance proc~data_valid->proc~verify_data proc~attitude~3 Trajectory%attitude proc~interpolate_attitude->proc~attitude~3 proc~num_attitudes Trajectory%num_attitudes proc~interpolate_attitude->proc~num_attitudes proc~quat_slerp quat_slerp proc~interpolate_attitude->proc~quat_slerp proc~interpolate_position->proc~num_points proc~point_between Trajectory%point_between proc~interpolate_position->proc~point_between proc~point~2 Trajectory%point proc~interpolate_position->proc~point~2 proc~time_index->proc~time_distance proc~time_range~3 Trajectory%time_range proc~wrapped_time->proc~time_range~3 proc~point_between->proc~num_points proc~point_between->proc~point~2 proc~time_fraction Trajectory%time_fraction proc~point_between->proc~time_fraction

Source Code

    subroutine segment_update(self, t)
        class(SegmentArtist), intent(inout) :: self
        real(wp), intent(in) :: t                           !! the current time
        integer :: m, s1, s2, i1, i2
        logical :: changed, redraw
        if (.not. self%chain%is_built()) return
        m = segment_count(self)

        changed = data_changed(self, redraw)
        if (redraw .or. .not. associated(self%traj)) self%n_written = 0
        if (changed) then
            s1 = max(1, min(self%n_written, m))          ! from the last segment written (set_optional)
            call self%chain%reserve(2 * m)
            if (m >= s1) call write_segments(self, s1, m)
            self%n_written = m
        end if

        self%n_drawn = self%n_written
        self%first_drawn_ = 1
        if (self%trace .and. associated(self%traj)) then  ! the segments at the points passed (times up to t)
            call trace_range(self%traj, t, self%traj%num_times(), i1, i2)
            s1 = (i1 - 1 + self%stride_ - 1) / self%stride_ + 1
            s2 = 0
            if (i2 >= 1) s2 = min(self%n_written, (i2 - 1) / self%stride_ + 1)
            self%first_drawn_ = s1
            self%n_drawn = max(0, s2 - s1 + 1)
        end if
        call self%chain%draw_range(2 * self%first_drawn_ - 1, 2 * (self%first_drawn_ + self%n_drawn - 1))
    end subroutine segment_update