write_changed Function

private function write_changed(self, changed) result(built)

The points written as the trajectory changed: the chain made again if its colors are drawn now or no longer (its first colors, or the setting), then the points new since the last written (and the last one again: set_optional; and those whose colors came since), or all of them on a redraw (cleared, a new trajectory or data sources). False if the chain isn't built.

Arguments

Type IntentOptional Attributes Name
class(ChainArtist), intent(inout) :: self
logical, intent(out) :: changed

points written (or the chain emptied)

Return Value logical


Calls

proc~~write_changed~~CallsGraph proc~write_changed write_changed apply_style apply_style proc~write_changed->apply_style points points proc~write_changed->points proc~chain_init ChainArtist%chain_init proc~write_changed->proc~chain_init proc~chain_points_per_point chain_points_per_point proc~write_changed->proc~chain_points_per_point proc~data_changed data_changed proc~write_changed->proc~data_changed proc~detach LineChain%detach proc~write_changed->proc~detach proc~is_built LineChain%is_built proc~write_changed->proc~is_built proc~is_colored LineChain%is_colored proc~write_changed->proc~is_colored proc~reserve LineChain%reserve proc~write_changed->proc~reserve proc~uses_colors uses_colors proc~write_changed->proc~uses_colors write_points write_points proc~write_changed->write_points proc~chain_init->proc~uses_colors chain_kind chain_kind proc~chain_init->chain_kind proc~init LineChain%init proc~chain_init->proc~init proc~set_compile LineChain%set_compile proc~chain_init->proc~set_compile proc~chain_points_per_point->chain_kind 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_node_remove_child vkf_node_remove_child proc~detach->interface~vkf_node_remove_child proc~check_status check_status proc~detach->proc~check_status proc~release~2 LineChain%release proc~detach->proc~release~2 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 num_colors num_colors proc~uses_colors->num_colors 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 interface~vkf_node_delete vkf_node_delete proc~release~2->interface~vkf_node_delete 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~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_revision->proc~generation proc~data_revision->proc~revision~2

Called by

proc~~write_changed~~CalledByGraph proc~write_changed write_changed proc~chain_update ChainArtist%chain_update proc~chain_update->proc~write_changed proc~curve_update CurveArtist%curve_update proc~curve_update->proc~write_changed

Source Code

    logical function write_changed(self, changed) result(built)
        class(ChainArtist), intent(inout) :: self
        logical, intent(out) :: changed                     !! points written (or the chain emptied)
        integer :: n, i1
        logical :: redraw
        changed = .false.
        built = self%chain%is_built()
        if (.not. built) return
        n = self%points()
        if (uses_colors(self) .neqv. self%chain%is_colored()) then
            call self%chain%detach()
            call self%init_chain()
            call self%apply_style()
            self%seen_generation = -1
        end if
        changed = data_changed(self, redraw)
        if (redraw .or. .not. associated(self%traj)) then
            self%n_written = 0
            self%n_colored = 0
        end if
        if (changed) then
            i1 = max(1, min(self%n_written, n))          ! from the last point written (set_optional)
            if (self%chain%is_colored()) i1 = max(1, min(i1, self%n_colored))   ! (and colors added since)
            call self%chain%reserve(chain_points_per_point(self) * n)
            if (n >= i1) call self%write_points(i1, n)
            self%n_written = n
        end if
    end function write_changed