write_segments Subroutine

private subroutine write_segments(self, s1, s2)

Write segments s1 .. s2 into the chain (and upload the chunks written to).

Arguments

Type IntentOptional Attributes Name
type(SegmentArtist), intent(inout) :: self
integer, intent(in) :: s1

the segments

integer, intent(in) :: s2

the segments


Calls

proc~~write_segments~~CallsGraph proc~write_segments write_segments 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~line_buffer line_buffer proc~slice->proc~line_buffer proc~to_shown to_shown proc~to_shown_at->proc~to_shown proc~transformed transformed proc~to_shown_at->proc~transformed interface~vkf_line_points_changed vkf_line_points_changed proc~written->interface~vkf_line_points_changed proc~check_status check_status proc~written->proc~check_status 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~measure->proc~line_buffer proc~split_distances split_distances proc~measure->proc~split_distances 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~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~verify_data Trajectory%verify_data 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~num_points Trajectory%num_points 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

Called by

proc~~write_segments~~CalledByGraph proc~write_segments write_segments proc~segment_update SegmentArtist%segment_update proc~segment_update->proc~write_segments

Source Code

    subroutine write_segments(self, s1, s2)
        type(SegmentArtist), intent(inout) :: self
        integer, intent(in) :: s1, s2                       !! the segments
        real(c_float), dimension(:,:,:), pointer :: p
        real(wp), allocatable :: v(:,:), w(:,:)
        integer :: j, lo, hi, sa, sb, ia, ib
        do j = 1, self%chain%num_chunks()
            call self%chain%slice(j, 2 * s1 - 1, 2 * s2, lo, hi, p)   ! chunks hold whole segments
            if (.not. associated(p)) cycle
            ! segments sa .. sb: their start points (odd chain points) and end points (even)
            sa = (lo + 1) / 2
            sb = hi / 2
            ia = 1 + (sa - 1) * self%stride_
            ib = 1 + (sb - 1) * self%stride_
            allocate(v(3, sb - sa + 1), w(3, sb - sa + 1))
            call self%traj%points(ia, ib, self%start_, v, self%stride_)
            call self%traj%points(ia, ib, self%end_, w, self%stride_)
            if (self%end_relative_) w = v + w        ! (no offset: exactly the start, a segment drawn as nothing)
            call to_shown_at(self, ia, v, self%stride_)     ! (data in another frame: both ends, at their time)
            call to_shown_at(self, ia, w, self%stride_)
            call split_points(v, p(:, :, 2*sa-lo:2*sb-lo:2))
            call split_points(w, p(:, :, 2*sa-lo+1:2*sb-lo+1:2))
            deallocate(v, w)
        end do
        call self%chain%written(2 * s1 - 1, 2 * s2)
    end subroutine write_segments