![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 /**
00002 * MOAB, a Mesh-Oriented datABase, is a software component for creating,
00003 * storing and accessing finite element mesh data.
00004 *
00005 * Copyright 2004 Sandia Corporation. Under the terms of Contract
00006 * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00007 * retains certain rights in this software.
00008 *
00009 * This library is free software; you can redistribute it and/or
00010 * modify it under the terms of the GNU Lesser General Public
00011 * License as published by the Free Software Foundation; either
00012 * version 2.1 of the License, or (at your option) any later version.
00013 *
00014 */
00015
00016 #ifndef MOAB_READER_IFACE_HPP
00017 #define MOAB_READER_IFACE_HPP
00018
00019 #include "moab/Types.hpp"
00020
00021 #include
00022
00023 namespace moab
00024 {
00025
00026 class FileOptions;
00027
00028 /**
00029 *\brief Interface for mesh reader implementations.
00030 *\version 1.00
00031 *\date 2004-4-23
00032 *\author Jason Kraftcheck
00033 */
00034 class ReaderIface
00035 {
00036 public:
00037 virtual ~ReaderIface() {}
00038
00039 /** Struct used to specify subset of file to read */
00040 struct IDTag
00041 {
00042 const char* tag_name; //!< Name of tag containing integer IDs
00043 const int* tag_values; //!< Array of integer ID values
00044 int num_tag_values; //!< Length of tag_values array
00045 };
00046
00047 struct SubsetList
00048 {
00049 /** An array of tag name and value sets specifying
00050 * the subset of the file to read. If multiple
00051 * tags are specified, the sets that match all
00052 * tags (intersection) should be read.
00053 */
00054 IDTag* tag_list;
00055 int tag_list_length; //!< Length of tag_list array
00056 int num_parts; //!< If non-zero, load 1/num_parts of the matching sets
00057 int part_number; //!< If num_parts is non-zero, load part_number-th fraction of the sets
00058 };
00059
00060 /**
00061 *\brief Load mesh from a file.
00062 *
00063 * Method all readers must provide to import a mesh.
00064 *
00065 *\param file_name The file to read.
00066 *\param file_set Optional pointer to entity set representing
00067 * file. If this is not NULL, reader may optionally
00068 * tag the pointed-to set with format-specific
00069 * meta-data.
00070 *\param subset_list An optional struct pointer specifying the tags identifying
00071 * entity sets to be read.
00072 *\param file_id_tag If specified, reader should store for each entity
00073 * it reads, a unique integer ID for this tag.
00074 *\author Jason Kraftcheck
00075 */
00076 virtual ErrorCode load_file( const char* file_name,
00077 const EntityHandle* file_set,
00078 const FileOptions& opts,
00079 const SubsetList* subset_list = 0,
00080 const Tag* file_id_tag = 0 ) = 0;
00081
00082 /**
00083 *\brief Read tag values from a file.
00084 *
00085 * Read the list if all integer tag values from the file for
00086 * a tag that is a single integer value per entity.
00087 *
00088 *\param file_name The file to read.
00089 *\param tag_name The tag for which to read values
00090 *\param tag_values_out Output: The list of tag values.
00091 *\param subset_list An array of tag name and value sets specifying
00092 * the subset of the file to read. If multiple
00093 * tags are specified, the sets that match all
00094 * tags (intersection) should be read.
00095 *\param subset_list_length The length of the 'subset_list' array.
00096 */
00097 virtual ErrorCode read_tag_values( const char* file_name,
00098 const char* tag_name,
00099 const FileOptions& opts,
00100 std::vector< int >& tag_values_out,
00101 const SubsetList* subset_list = 0 ) = 0;
00102 };
00103
00104 } // namespace moab
00105
00106 #endif