1 // Copyright (C) 2013 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Frederic Pons (OpenCascade)
21 #ifndef __XAO_FIELD_HXX__
22 #define __XAO_FIELD_HXX__
27 #include "XAO_XaoUtils.hxx"
28 #include "XAO_Step.hxx"
32 typedef std::vector<Step*>::iterator stepIterator;
36 * A geometrical Field.
43 * @param dimension the dimension ot the field.
44 * @param nbElements the number of elements.
45 * @param nbComponents the number of components.
46 * @param name the name of the field.
48 Field(const XAO::Dimension& dimension,
49 const int& nbElements, const int& nbComponents, const std::string& name);
54 * Creates a Field of the given type.
55 * @param type the type of the field to create.
56 * @param dimension the dimension.
57 * @param nbElements the number of geometrical elements.
58 * @param nbComponents the number of components.
59 * @name the name of the field.
60 * @return the created field.
62 static Field* createField(const XAO::Type& type, const XAO::Dimension& dimension,
63 const int& nbElements, const int& nbComponents,
64 const std::string& name = std::string(""))
65 throw (XAO_Exception);
73 * Gets the Type of the field.
74 * @return the Type of the field.
76 virtual const XAO::Type getType() = 0;
79 * Gets the name of the Field.
80 * @return the name of the Field.
82 const std::string getName() const
88 * Sets the name of the Field.
89 * @param name the name to set.
91 void setName(const std::string& name)
97 * Gets the Dimension of the Field.
98 * @return the Dimension of the Field.
100 const XAO::Dimension getDimension() const
106 * Gets the number of elements of each step.
107 * @return the number of elements of each step.
109 const int countElements() const
115 * Gets the number of components.
116 * @return the number of components.
118 const int countComponents() const
120 return m_nbComponents;
124 * Gets the number of values for each step.
125 * @return the number of values for each step.
127 const int countValues() const
129 return m_nbElements * m_nbComponents;
133 * Gets the number of the steps.
134 * @return the number of steps.
136 const int countSteps() const { return m_steps.size(); }
139 * Gets the name of a component.
140 * @param index the index of the component to get.
141 * @return the name of the component for the given index.
143 const std::string getComponentName(const int& index) throw (XAO_Exception);
146 * Sets the name of a component.
147 * @param componentIndex the index of the component to set.
148 * @param name the name to set.
150 void setComponentName(const int& componentIndex, const std::string& name) throw (XAO_Exception);
153 * Sets the name of the components.
154 * @param names the names to set.
156 void setComponentsNames(const std::vector<std::string>& names) throw (XAO_Exception);
159 * Adds a new step of the same type than the field.
160 * @param number the numer of the step.
161 * @return the new create step.
163 virtual Step* addNewStep(const int& number) throw (XAO_Exception) = 0;
167 * @param step the step to remove.
168 * @return true if the step has been removed, false otherwise.
170 bool removeStep(Step* step);
173 * Verifies if the field has a step with the given step number.
174 * @param step the step number.
175 * @return true if the field has a step for the given number.
177 bool hasStep(const int& step);
180 * Returns the first step.
181 * @return an iterator on the first step.
183 stepIterator begin() { return m_steps.begin(); }
186 * Returns the last step.
187 * @return an iterator on the last step.
189 stepIterator end() { return m_steps.end(); }
192 void checkComponent(const int& component) throw (XAO_Exception);
193 void checkStepIndex(const int& step) throw (XAO_Exception);
196 /** The name of the Field. */
198 /** The dimension of the Field. */
199 XAO::Dimension m_dimension;
201 /** The number of components. */
203 /** The components of the field. */
204 std::vector<std::string> m_components;
205 /** The number of elements. */
208 /** The list of steps. */
209 std::vector<Step*> m_steps;