1 // Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 // Author : Alexey PETROV
27 #ifndef VISU_Structures_impl_HeaderFile
28 #define VISU_Structures_impl_HeaderFile
31 \file VISU_Structures_impl.hxx
32 \brief The file contains definitions for basic classes of the implementation of VISU CONVERTER package
35 #include "VISUConvertor.hxx"
36 #include "VISU_Structures.hxx"
37 #include "VISU_ConvertorDef_impl.hxx"
44 //---------------------------------------------------------------
45 //! Define an utility base class which allow to keep calculated number of cells and their size
46 struct VISU_CONVERTOR_EXPORT TSizeCounter: virtual TIsVTKDone
49 vtkIdType myNbCells; //!< Number of cells contained into corresponding sublclass
50 vtkIdType myCellsSize; //!< Size of cells contained into corresponding sublclass
54 //---------------------------------------------------------------
55 //! Define a container for VTK representation
56 class TPolyDataHolder: public virtual TSizeCounter
59 mutable PPolyData mySource;
63 //! This method allow to create corresponding VTK data set by demand (not at once)
71 //! Gets memory size used by the instance (bytes).
78 //---------------------------------------------------------------
79 //! Define a container for VTK representation
80 class VISU_CONVERTOR_EXPORT TUnstructuredGridHolder: public virtual TSizeCounter
83 TUnstructuredGridHolder();
85 //! This method allow to create corresponding VTK data set by demand (not at once)
86 const PUnstructuredGrid&
91 GetUnstructuredGridOutput();
93 //! Gets memory size used by the instance (bytes).
99 mutable PUnstructuredGrid mySource;
103 //---------------------------------------------------------------
104 //! Define an intermediate class which unifies memory size calculation
105 struct VISU_CONVERTOR_EXPORT TMemoryCheckIDMapper: public virtual TIsVTKDone,
106 public virtual TIDMapper
108 //! Gets memory size used by the instance (bytes).
115 //---------------------------------------------------------------
116 //! Define a container for VTK representation
118 This container allow to combine other VTK representation into single one.
120 class VISU_CONVERTOR_EXPORT TAppendFilterHolder: public virtual TMemoryCheckIDMapper
123 mutable PAppendFilter myFilter;
125 TAppendFilterHolder();
127 //! This method allow to create corresponding VTK filter by demand (not at once)
131 //! Reimplement the TNamedIDMapper::GetUnstructuredGridOutput
134 GetUnstructuredGridOutput();
138 This container allow to combine other VTK representation into single one.
140 //---------------------------------------------------------------
141 //! Define a container for VTK representation
143 This container allow to combine other VTK representation into single one.
145 class TAppendPolyDataHolder: public virtual TMemoryCheckIDMapper
148 mutable PAppendPolyData myFilter;
150 TAppendPolyDataHolder();
152 //! This method allow to create corresponding VTK filter by demand (not at once)
153 const PAppendPolyData&
156 //! Reimplement the TGaussPtsIDMapper::GetPolyDataOutput
163 //---------------------------------------------------------------
164 //! Define a container for VTK representation
166 This container allow to assign data to mesh and represent them into single VTK representation
168 class TMergeFilterHolder: public virtual TMemoryCheckIDMapper
171 mutable PMergeFilter myFilter;
173 TMergeFilterHolder();
175 //! This method allow to create corresponding VTK filter by demand (not at once)
179 //! Gets output of the filter as vtkDataSet
186 //---------------------------------------------------------------
187 //! Specialize TMesh to provide VTK mapping for nodes
188 struct VISU_CONVERTOR_EXPORT TMeshImpl: virtual TMesh,
191 PNamedPointCoords myNamedPointCoords; //!< Keeps intermediate representation of the nodes
192 vtkIdType myNbPoints; //!< Keeps number of the nodes
203 GetPointSet(); //!< Gets initialized corresponding VTK structure
207 //---------------------------------------------------------------
208 typedef TVector<vtkIdType> TSubMeshID;
209 typedef enum {eRemoveAll, eAddAll, eAddPart, eNone} ESubMeshStatus;
211 //! Specialize TSubProfile to provide VTK mapping
212 struct VISU_CONVERTOR_EXPORT TSubProfileImpl: virtual TSubProfile,
213 virtual TUnstructuredGridHolder
217 EGeometry myGeom; //!< Defines to what geometrical type the MED PROFILE belong to
218 std::string myName; //!< Keeps its name
220 //! Get object number of mesh cell by its VTK one
223 GetElemObjID(vtkIdType theVtkI) const;
225 //! Get cell VTK ID for corresponding object ID
228 GetElemVTKID(vtkIdType theID) const;
230 //! Return true in case if it is default profile,
231 //! i.e myName == "" (MED_NOPFL, see med.h)
236 //! Gets memory size used by the instance (bytes).
241 //! Keeps status of the structure
243 In some cases MED file does not use MED PROFILES, but at VISU creates corresponding data strucutre
244 in order to construct mesh for MED TIEMSTAMPS in uniform way.
246 ESubMeshStatus myStatus;
247 TSubMeshID mySubMeshID; //!< Keeps numbers of mesh cell which contain the MED PROFILE
251 //---------------------------------------------------------------
252 typedef std::map<vtkIdType,vtkIdType> TID2ID;
253 typedef TVector<PSubProfileImpl> TSubProfileArr;
254 typedef std::map<EGeometry,PSubProfileImpl> TGeom2SubProfile;
256 //! Specialize TProfile to provide VTK mapping for MED TIMESTAMP mesh
257 struct VISU_CONVERTOR_EXPORT TProfileImpl: virtual TProfile,
258 virtual TAppendFilterHolder
261 bool myIsAll; //!< Say, whether the MED TIMESTAMP defined on all MED ENTITY or not
263 //! Reimplement the TIDMapper::GetNodeObjID
266 GetNodeObjID(vtkIdType theID) const;
268 //! Reimplement the TIDMapper::GetNodeVTKID
271 GetNodeVTKID(vtkIdType theID) const;
273 //! Reimplement the TIDMapper::GetNodeCoord
275 vtkFloatingPointType*
276 GetNodeCoord(vtkIdType theObjID);
278 //! Reimplement the TIDMapper::GetElemObjID
281 GetElemObjID(vtkIdType theID) const;
283 //! Reimplement the TIDMapper::GetElemVTKID
286 GetElemVTKID(vtkIdType theID) const;
288 //! Reimplement the TIDMapper::GetElemCell
291 GetElemCell(vtkIdType theObjID);
293 //! Reimplement the TNamedIDMapper::GetUnstructuredGridOutput
296 GetUnstructuredGridOutput();
298 //! Gets memory size used by the instance (bytes).
303 //! Reimplement the TNamedIDMapper::GetNodeName
306 GetNodeName(vtkIdType theObjID) const;
308 //! Reimplement the TNamedIDMapper::GetElemName
311 GetElemName(vtkIdType theObjID) const;
313 TID2ID myElemObj2VTKID; //!< Keeps object to VTK numeration mapping
314 TSubProfileArr mySubProfileArr; //!< Keeps sequence of TSubProfiles as they were added into TAppendFilterHolder
315 PNamedPointCoords myNamedPointCoords; //!< Keeps reference on the same TNamedPointCoords as TMesh
316 TMeshOnEntityImpl* myMeshOnEntity; //<! Keeps backward reference to corresponding MED ENTITY mesh
318 TGeom2SubProfile myGeom2SubProfile; //!< Keeps TSubProfiles according to their geometrical type
322 //---------------------------------------------------------------
323 //! Specialize TIDMapper to provide VTK mapping for MED TIMESTAMP mesh
324 struct TUnstructuredGridIDMapperImpl: virtual TMergeFilterHolder,
325 virtual TUnstructuredGridIDMapper
327 PAppendFilterHolder myIDMapper; //!< Responsible for numbering
328 PCommonCellsFilter myCommonCellsFilter;
330 TUnstructuredGridIDMapperImpl();
332 //! Reimplement the TIDMapper::GetNodeObjID
335 GetNodeObjID(vtkIdType theID) const;
337 //! Reimplement the TIDMapper::GetNodeVTKID
340 GetNodeVTKID(vtkIdType theID) const;
342 //! Reimplement the TIDMapper::GetNodeCoord
344 vtkFloatingPointType*
345 GetNodeCoord(vtkIdType theObjID);
347 //! Reimplement the TIDMapper::GetElemObjID
350 GetElemObjID(vtkIdType theID) const;
352 //! Reimplement the TIDMapper::GetElemVTKID
355 GetElemVTKID(vtkIdType theID) const;
357 //! Reimplement the TIDMapper::GetElemCell
360 GetElemCell(vtkIdType theObjID);
362 //! Reimplement the TUnstructuredGridIDMapper::GetUnstructuredGridOutput
365 GetUnstructuredGridOutput();
367 //! Reimplement the TIDMapper::GetOutput
372 //! Gets memory size used by the instance (bytes).
378 SetReferencedMesh( const PNamedIDMapper& theNamedIDMapper );
386 TUnstructuredGridHolder mySource; //!< Keeps assigned data
389 //---------------------------------------------------------------
390 //! Specialize TIDMapper to provide VTK mapping for MED TIMESTAMP mesh
391 struct TPolyDataIDMapperImpl: virtual TMergeFilterHolder,
392 virtual TPolyDataIDMapper
394 PAppendPolyDataHolder myIDMapper; //!< Responsible for numbering
396 //! Reimplement the TIDMapper::GetNodeObjID
399 GetNodeObjID(vtkIdType theID) const;
401 //! Reimplement the TIDMapper::GetNodeVTKID
404 GetNodeVTKID(vtkIdType theID) const;
406 //! Reimplement the TIDMapper::GetNodeCoord
408 vtkFloatingPointType*
409 GetNodeCoord(vtkIdType theObjID);
411 //! Reimplement the TIDMapper::GetElemObjID
414 GetElemObjID(vtkIdType theID) const;
416 //! Reimplement the TIDMapper::GetElemVTKID
419 GetElemVTKID(vtkIdType theID) const;
421 //! Reimplement the TIDMapper::GetElemCell
424 GetElemCell(vtkIdType theObjID);
426 //! Reimplement the TPolyDataIDMapper::GetPolyDataOutput
431 //! Reimplement the TIDMapper::GetOutput
436 //! Gets memory size used by the instance (bytes).
447 TPolyDataHolder mySource; //!< Keeps assigned data
451 //---------------------------------------------------------------
452 //! Specialize TGauss to provide more detail information of the MED GAUSS entity for VTK mapping
453 struct VISU_CONVERTOR_EXPORT TGaussImpl: virtual TGauss
455 EGeometry myGeom; //!< Define, to which geometrical type the MED GAUSS entity belongs
456 std::string myName; //!< Keeps name of the MED GAUSS entity
457 vtkIdType myNbPoints; //<! Keeps number of points for the MED GAUSS entity
461 //! To define a way to implement more detail comparision of the TGaussSubMesh instances
464 LessThan(const PGaussImpl& theGauss,
465 bool& theResult) const;
469 //---------------------------------------------------------------
470 //! Specialize TGaussSubMesh to provide VTK mapping for the entity
471 struct VISU_CONVERTOR_EXPORT TGaussSubMeshImpl: virtual TGaussSubMesh,
472 virtual TPolyDataHolder
476 //! To implement the TGaussPtsIDMapper::GetObjID
479 GetObjID(vtkIdType theID) const;
481 //! To implement the TGaussPtsIDMapper::GetVTKID
484 GetVTKID(const TGaussPointID& theID) const;
488 GetElemObjID(vtkIdType theID) const;
492 GetElemVTKID(vtkIdType theID) const;
496 GetGlobalID(vtkIdType theID) const;
498 //! Gets memory size used by the instance (bytes).
503 PGaussImpl myGauss; //<! Keep reference to corresponding TGauss structure
505 //! Keeps status of the structure
507 In some cases MED file does not use MED GAUSS, but at VISU creates corresponding data strucutre
508 in order to construct mesh for MED TIEMSTAMPS in uniform way.
510 ESubMeshStatus myStatus;
513 PPointCoords myPointCoords; //!< Keeps coordinates of Gauss Points
517 //---------------------------------------------------------------
518 typedef TVector<PGaussSubMeshImpl> TGaussSubMeshArr;
519 typedef std::map<EGeometry, PGaussSubMeshImpl> TGeom2GaussSubMesh;
521 //! Specialize TGaussMesh to provide VTK mapping for the entity
522 struct VISU_CONVERTOR_EXPORT TGaussMeshImpl: virtual TGaussMesh,
523 virtual TAppendPolyDataHolder
527 //! Reimplement the TGaussPtsIDMapper::GetObjID
530 GetObjID(vtkIdType theID) const;
532 //! Reimplements the TGaussPtsIDMapper::GetVTKID
535 GetVTKID(const TGaussPointID& theID) const;
537 //! Reimplement the TGaussPtsIDMapper::GetPolyDataOutput
542 //! Gets memory size used by the instance (bytes).
547 //! Reimplement the TGaussPtsIDMapper::GetParent
552 TNamedIDMapper* myParent; //!< Refer to parent mesh
553 TGaussSubMeshArr myGaussSubMeshArr; //!< Keeps sequence of TGaussSubMesh as they were added into TAppendFilterHolder
554 TGeom2GaussSubMesh myGeom2GaussSubMesh; //!< Keeps TGaussSubMesh according to their geometrical type
558 //---------------------------------------------------------------
559 //! Specialize TGaussPtsIDMapper to provide VTK mapping for MED TIMESTAMP mesh
560 struct VISU_CONVERTOR_EXPORT TGaussPtsIDFilter: virtual TPolyDataIDMapperImpl,
561 virtual TGaussPtsIDMapper
563 PGaussPtsIDMapper myGaussPtsIDMapper;
565 //! Reimplement the TGaussPtsIDMapper::GetObjID
568 GetObjID(vtkIdType theID) const;
570 //! Reimplements the TGaussPtsIDMapper::GetVTKID
573 GetVTKID(const TGaussPointID& theID) const;
575 //! Reimplements the TGaussPtsIDMapper::GetParent
576 //! Reimplement the TGaussPtsIDMapper::GetParent
581 //! Reimplement the TNamedIDMapper::GetUnstructuredGridOutput
586 //! Reimplement the TIDMapper::GetOutput
593 //---------------------------------------------------------------
594 typedef TVector<vtkIdType> TConnect;
595 typedef TVector<TConnect> TCell2Connect;
597 //! The class is responsible for mapping of cells of defined geometrical type
598 struct VISU_CONVERTOR_EXPORT TSubMeshImpl: virtual TUnstructuredGridHolder
602 //! Reimplements the TStructured::CopyStructure
605 CopyStructure( PStructured theStructured );
607 //! To implement the TIDMapper::GetElemObjID
610 GetElemObjID(vtkIdType theID) const;
612 //! To implement the TNamedIDMapper::GetElemName
615 GetElemName(vtkIdType theObjID) const;
617 //! Gets memory size used by the instance (bytes).
623 TCell2Connect myCell2Connect; //!< Contains connectivity for the cells
627 //---------------------------------------------------------------
628 typedef std::map<EGeometry,PSubMeshImpl> TGeom2SubMesh;
629 typedef TVector<PSubMeshImpl> TSubMeshArr;
631 //! Specialize TMeshOnEntity to provide VTK mapping for the entity
632 struct VISU_CONVERTOR_EXPORT TMeshOnEntityImpl: virtual TMeshOnEntity,
633 virtual TAppendFilterHolder,
638 //! Reimplements the TStructured::CopyStructure
641 CopyStructure( PStructured theStructured );
643 //! Reimplement the TIDMapper::GetNodeVTKID
646 GetNodeVTKID(vtkIdType theID) const;
648 //! Reimplement the TIDMapper::GetNodeObjID
651 GetNodeObjID(vtkIdType theID) const;
653 //! Reimplement the TIDMapper::GetElemVTKID
656 GetElemVTKID(vtkIdType theID) const;
658 //! Reimplement the TIDMapper::GetElemObjID
661 GetElemObjID(vtkIdType theID) const;
663 //! Reimplement the TNamedIDMapper::GetNodeName
666 GetNodeName(vtkIdType theObjID) const;
668 //! Reimplement the TNamedIDMapper::GetElemName
671 GetElemName(vtkIdType theObjID) const;
673 //! Reimplement the TNamedIDMapper::GetUnstructuredGridOutput
676 GetUnstructuredGridOutput();
678 //! Gets memory size used by the instance (bytes).
683 TID2ID myElemObj2VTKID; //!< To support object to VTK number mapping
684 TSubMeshArr mySubMeshArr; //!< Keeps sequence of TSubMeshImpl as they were added into TAppendFilterHolder
685 PNamedPointCoords myNamedPointCoords; //!< Share the same instance with TMesh to implement nodal mapping
687 TGeom2SubMesh myGeom2SubMesh; //!< Keeps TSubMeshImpl according to their geometrical type
691 //---------------------------------------------------------------
692 typedef std::map<EGeometry,TSubMeshID> TGeom2SubMeshID;
694 //! Specialize TFamily to provide VTK mapping for the entity
695 struct VISU_CONVERTOR_EXPORT TFamilyImpl: virtual TFamily,
696 virtual TUnstructuredGridHolder
698 //! Reimplements the TStructured::CopyStructure
701 CopyStructure( PStructured theStructured );
703 //! Reimplement the TIDMapper::GetNodeObjID
705 GetNodeObjID(vtkIdType theID) const ;
707 //! Reimplement the TIDMapper::GetNodeVTKID
710 GetNodeVTKID(vtkIdType theID) const ;
712 //! Reimplement the TIDMapper::GetElemVTKID
715 GetElemVTKID(vtkIdType theID) const;
717 //! Reimplement the TIDMapper::GetElemObjID
720 GetElemObjID(vtkIdType theID) const;
722 //! Reimplement the TUnstructuredGridIDMapper::GetUnstructuredGridOutput
725 GetUnstructuredGridOutput();
727 //! Gets memory size used by the instance (bytes).
732 PNamedPointCoords myNamedPointCoords; //!< Share the same instance with TMesh to implement nodal mapping
733 TID2ID myElemObj2VTKID; //!< To support object to VTK number mapping
734 TSubMeshID myMeshID; //!< Keeps numbers of mesh elements that belongs to the MED FAMILY
736 TGeom2SubMeshID myGeom2SubMeshID; //!< Keeps TSubMeshID according to their geometrical type
738 TNames myGroupNames; //!< Keeps names of groups that refer to the family
742 //---------------------------------------------------------------
743 typedef std::pair<vtkIdType,vtkIdType> TNbASizeCells;
744 typedef TVector<PFamilyImpl> TFamilyArr;
746 //! Specialize TGroup to provide VTK mapping for the entity
747 struct VISU_CONVERTOR_EXPORT TGroupImpl: virtual TGroup,
748 virtual TAppendFilterHolder
750 //! Reimplements the TStructured::CopyStructure
753 CopyStructure( PStructured theStructured );
755 //! Calculate pair of values - number of cells and its size
757 GetNbASizeCells() const;
759 //! Reimplement the TIDMapper::GetElemVTKID
762 GetElemVTKID(vtkIdType theID) const;
764 //! Reimplement the TIDMapper::GetElemObjID
767 GetElemObjID(vtkIdType theID) const;
769 //! Reimplement the TIDMapper::GetNodeObjID
772 GetNodeObjID(vtkIdType theID) const;
774 //! Reimplement the TIDMapper::GetNodeVTKID
777 GetNodeVTKID(vtkIdType theID) const;
779 //! Reimplement the TUnstructuredGridIDMapper::GetUnstructuredGridOutput
782 GetUnstructuredGridOutput();
784 //! Gets memory size used by the instance (bytes).
789 TID2ID myElemObj2VTKID; //!< To support object to VTK number mapping
790 TFamilyArr myFamilyArr; //!< Keeps sequence of TFamily as they were added into TAppendFilterHolder
791 PNamedPointCoords myNamedPointCoords; //!< Share the same instance with TMesh to implement nodal mapping
795 //---------------------------------------------------------------
796 typedef TVector<TMinMax> TComp2MinMax;
797 typedef TVector<TComp2MinMax> TMetric2Comp2MinMax;
799 typedef std::map<TName,TMinMax> TGroup2MinMax;
800 typedef TVector<TGroup2MinMax> TComp2Group2MinMax;
801 typedef TVector<TComp2Group2MinMax> TMetric2Comp2Group2MinMax;
803 //! Specialize TField to provide VTK mapping for the entity
804 struct VISU_CONVERTOR_EXPORT TFieldImpl: virtual TField
808 //! To initialize the data structure
810 Init(vtkIdType theNbComp,
811 vtkIdType theDataType);
813 //! Gets type idetificator of the mesh data.
817 //! Implement the TField::GetMinMax
820 GetMinMax(vtkIdType theCompID, const TNames& theGroupNames, TGaussMetric theGaussMetric = VISU::AVERAGE_METRIC);
822 //! Implement the TField::GetAverageMinMax
825 GetAverageMinMax(vtkIdType theCompID, const TNames& theGroupNames, TGaussMetric theGaussMetric = VISU::AVERAGE_METRIC);
827 vtkIdType myDataSize; //!< Keeps size of the assigned data
828 vtkIdType myDataType; //!< Keeps type idetificator of the mesh data
829 TMetric2Comp2MinMax myMetric2Comp2MinMax; //!< Keeps min/max values for each component of the MED FIELD
830 TMetric2Comp2MinMax myMetric2Comp2AverageMinMax; //!< Keeps average by Gauss Points min/max values for each component of the MED FIELD
831 //!< If Nb of Gauss Points <=1 myAverageMinMaxArr equal myMinMaxArr
833 TMetric2Comp2Group2MinMax myMetric2Comp2Group2MinMax;
834 TMetric2Comp2Group2MinMax myMetric2Comp2Group2AverageMinMax;
838 //---------------------------------------------------------------
839 typedef std::map<EGeometry, PMeshValue> TGeom2MeshValue;
841 class TGeom2Value: public virtual TBaseStructure
843 TGeom2MeshValue myGeom2MeshValue;
846 //! Gets mesh data for defined geometrical type (constant version)
848 GetMeshValue(EGeometry theGeom) const;
850 //! Gets mesh data for defined geometrical type
852 GetMeshValue(EGeometry theGeom);
854 //! Gets container of the whole mesh data
858 //! Gets container of the whole mesh data (constant version)
859 const TGeom2MeshValue&
860 GetGeom2MeshValue() const;
862 //! Gets mesh data for the first geometry
864 GetFirstMeshValue() const;
868 //---------------------------------------------------------------
869 typedef std::map<EGeometry,vtkIdType> TGeom2NbGauss;
871 //! Specialize TValForTime to provide VTK mapping for the entity
872 struct VISU_CONVERTOR_EXPORT TValForTimeImpl: virtual TValForTime
874 PGaussPtsIDFilter myGaussPtsIDFilter; //!< Keep VTK representation for mesh and data on Gauss Points
875 PUnstructuredGridIDMapperImpl myUnstructuredGridIDMapper; //!< Keep VTK representation for ordinary mesh and data
876 TGeom2Value myGeom2Value; //!< Keep value that is assigned to the mesh
877 TGeom2NbGauss myGeom2NbGauss; //!< Keep number of Gauss Points
878 bool myIsFilled; //!< Keep the status of the TValForTime (true - already filled, false - not filled);
885 const TGeom2MeshValue&
886 GetGeom2MeshValue() const;
888 //! Get mesh data for defined geometrical type (constant version)
890 GetMeshValue(EGeometry theGeom) const;
892 //! Get mesh data for defined geometrical type
894 GetMeshValue(EGeometry theGeom);
896 //! Gets mesh data for the first geometry
898 GetFirstMeshValue() const;
900 //! Get number of Gauss Points for defined geometrical type
903 GetNbGauss(EGeometry theGeom) const;
905 //! Get maximum number of Gauss Points among all geometrical types (provided for convenience)
908 GetMaxNbGauss() const;
910 //! Gets memory size used by the instance (bytes).
917 //---------------------------------------------------------------