open_file Subroutine

private subroutine open_file(self, file_action, guess_format)

Open file, once initialized.

Arguments

Type IntentOptional AttributesName
class(file_stl_object), intent(inout) :: self

File STL.

character(len=*), intent(in) :: file_action

File action, "read" or "write".

logical, intent(in), optional :: guess_format

Sentinel to try to guess format directly from file.


Source Code


Source Code

   subroutine open_file(self, file_action, guess_format)
   !< Open file, once initialized.
   class(file_stl_object), intent(inout)        :: self          !< File STL.
   character(*),           intent(in)           :: file_action   !< File action, "read" or "write".
   logical,                intent(in), optional :: guess_format  !< Sentinel to try to guess format directly from file.
   logical                                      :: guess_format_ !< Sentinel to try to guess format directly from file, local var.
   logical                                      :: file_exist    !< Sentinel to check if file exist.
   character(5)                                 :: ascii_header  !< Ascii header sentinel.

   if (allocated(self%file_name)) then
      select case(trim(adjustl(file_action)))
      case('read')
         guess_format_ = .false. ; if (present(guess_format)) guess_format_ = guess_format
         inquire(file=self%file_name, exist=file_exist)
         if (file_exist) then
            if (guess_format_) then
               open(newunit=self%file_unit, file=self%file_name, form='formatted')
               read(self%file_unit, '(A)') ascii_header
               close(self%file_unit)
               if (ascii_header=='solid') then
                  self%is_ascii = .true.
               else
                  self%is_ascii = .false.
               endif
            endif
            if (self%is_ascii) then
               open(newunit=self%file_unit, file=self%file_name,                  form='formatted')
            else
               open(newunit=self%file_unit, file=self%file_name, access='stream', form='unformatted')
            endif
            self%is_open = .true.
         else
            write(stderr, '(A)') 'error: file "'//self%file_name//'" does not exist, impossible to open file!'
         endif
      case('write')
         if (self%is_ascii) then
            open(newunit=self%file_unit, file=self%file_name,                  form='formatted')
         else
            open(newunit=self%file_unit, file=self%file_name, access='stream', form='unformatted')
         endif
         self%is_open = .true.
      case default
         write(stderr, '(A)') 'error: file action "'//trim(adjustl(file_action))//'" unknown!'
      endselect
   else
      write(stderr, '(A)') 'error: file name has not be initialized, impossible to open file!'
   endif
   endsubroutine open_file


aabb_assign_aabb aabb_node_assign_aabb_node aabb_tree_assign_aabb_tree add_facets add_facets add_vertex_occurrence allocate_facets analize bmax bmin build_connectivity check_normal check_vertices_occurrencies cli_parse cli_parse cli_parse cli_parse cli_parse cli_parse close_file closest_point closest_point compute_bb_from_facets compute_metrix compute_metrix compute_normal compute_normals compute_octants compute_octants compute_volume create_aabb_tree destroy destroy destroy destroy destroy distance distance distance distance distance distance_from_facets distance_from_facets do_ray_intersect do_ray_intersect do_ray_intersect edge_connection_in_other_ref facet_assign_facet file_stl_assign_file_stl first_child_node first_node flip_edge has_facets has_facets initialize initialize initialize initialize initialize is_allocated is_inside is_point_inside_polyhedron_ri is_point_inside_polyhedron_sa load_facets_number_from_file load_from_file load_from_file_ascii load_from_file_binary load_header_from_file make_normal_consistent mirror_by_matrix mirror_by_matrix mirror_by_normal mirror_by_normal nodes_number nodes_number_at_level open_file parent_node ray_intersections_number ray_intersections_number ray_intersections_number resize resize reverse_normal reverse_normals rotate_by_axis_angle rotate_by_axis_angle rotate_by_matrix rotate_by_matrix sanitize_normals save_facets_into_file_stl save_facets_into_file_stl save_geometry_tecplot_ascii save_geometry_tecplot_ascii save_geometry_tecplot_ascii save_header_into_file save_into_file save_into_file_ascii save_into_file_binary save_into_file_stl save_trailer_into_file solid_angle statistics tetrahedron_volume translate translate update_connectivity update_extents update_extents vertex vertex_global_id