From c6513651400e7648d3b1454b4ecbf1e1d64af0bc Mon Sep 17 00:00:00 2001 From: eap Date: Mon, 17 Sep 2012 10:22:02 +0000 Subject: [PATCH] 0020982: EDF 1547 SMESH: Creation of non-conformal quadratic pyramids extract SMESH_MeshPartDS.hxx from SMESH_MeshEditor_i.cxx --- src/SMESH_I/Makefile.am | 1 + src/SMESH_I/SMESH_MeshPartDS.hxx | 70 ++++++++++++++++++++++++++++++++ src/SMESH_I/SMESH_Mesh_i.cxx | 53 ++++++++++-------------- src/SMESH_I/SMESH_Mesh_i.hxx | 1 - 4 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 src/SMESH_I/SMESH_MeshPartDS.hxx diff --git a/src/SMESH_I/Makefile.am b/src/SMESH_I/Makefile.am index 2f748f7da..4f05fa7a4 100644 --- a/src/SMESH_I/Makefile.am +++ b/src/SMESH_I/Makefile.am @@ -48,6 +48,7 @@ salomeinclude_HEADERS = \ SMESH_NoteBook.hxx \ SMESH_Measurements_i.hxx \ SMESH_PreMeshInfo.hxx \ + SMESH_MeshPartDS.hxx \ SMESH.hxx # Scripts to be installed. diff --git a/src/SMESH_I/SMESH_MeshPartDS.hxx b/src/SMESH_I/SMESH_MeshPartDS.hxx new file mode 100644 index 000000000..7257b71b0 --- /dev/null +++ b/src/SMESH_I/SMESH_MeshPartDS.hxx @@ -0,0 +1,70 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// File : SMESH_MeshPartDS.hxx +// Created : Thu Sep 13 20:26:47 2012 +// Author : Edward AGAPOV (eap) + +#ifndef __SMESH_MeshPartDS_HXX__ +#define __SMESH_MeshPartDS_HXX__ + +#include "SMESHDS_Mesh.hxx" + +#include +#include CORBA_SERVER_HEADER(SMESH_Mesh) + +#include + +//============================================================================= +/*! + * \brief Class providing SMESHDS_Mesh API to SMESH_IDSource. + * It is used to export a part of mesh as a whole mesh. + */ +// Implementation is in SMESH_Mesh_i.cxx where this class was extracted from + +class SMESH_MeshPartDS : public SMESHDS_Mesh +{ +public: + SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr meshPart); + SMESH_MeshPartDS(const std::list< const SMDS_MeshElement* > & badElems ); + + virtual SMDS_NodeIteratorPtr nodesIterator (bool idInceasingOrder=false) const; + virtual SMDS_EdgeIteratorPtr edgesIterator (bool idInceasingOrder=false) const; + virtual SMDS_FaceIteratorPtr facesIterator (bool idInceasingOrder=false) const; + virtual SMDS_VolumeIteratorPtr volumesIterator (bool idInceasingOrder=false) const; + + virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type=SMDSAbs_All) const; + virtual SMDS_ElemIteratorPtr elementGeomIterator(SMDSAbs_GeometryType type) const; + virtual SMDS_ElemIteratorPtr elementEntityIterator(SMDSAbs_EntityType type) const; + +private: + TIDSortedElemSet _elements[ SMDSAbs_NbElementTypes ]; + SMESHDS_Mesh* _meshDS; + /*! + * \brief Class used to access to protected data of SMDS_MeshInfo + */ + struct TMeshInfo : public SMDS_MeshInfo + { + void Add(const SMDS_MeshElement* e) { SMDS_MeshInfo::addWithPoly( e ); } + }; +}; + +#endif diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index e0340e99a..73d801492 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -43,6 +43,7 @@ #include "SMESH_MEDMesh_i.hxx" #include "SMESH_MeshEditor.hxx" #include "SMESH_MeshEditor_i.hxx" +#include "SMESH_MeshPartDS.hxx" #include "SMESH_MesherHelper.hxx" #include "SMESH_PreMeshInfo.hxx" #include "SMESH_PythonDump.hxx" @@ -2838,37 +2839,6 @@ void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii) _impl->ExportSTL(file, isascii); } -//============================================================================= -/*! - * \brief Class providing SMESHDS_Mesh API to SMESH_IDSource. - * It is used to export a part of mesh as a whole mesh. - */ -class SMESH_MeshPartDS : public SMESHDS_Mesh -{ -public: - SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr meshPart); - - virtual SMDS_NodeIteratorPtr nodesIterator (bool idInceasingOrder=false) const; - virtual SMDS_EdgeIteratorPtr edgesIterator (bool idInceasingOrder=false) const; - virtual SMDS_FaceIteratorPtr facesIterator (bool idInceasingOrder=false) const; - virtual SMDS_VolumeIteratorPtr volumesIterator (bool idInceasingOrder=false) const; - - virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type=SMDSAbs_All) const; - virtual SMDS_ElemIteratorPtr elementGeomIterator(SMDSAbs_GeometryType type) const; - virtual SMDS_ElemIteratorPtr elementEntityIterator(SMDSAbs_EntityType type) const; - -private: - TIDSortedElemSet _elements[ SMDSAbs_NbElementTypes ]; - SMESHDS_Mesh* _meshDS; - /*! - * \brief Class used to access to protected data of SMDS_MeshInfo - */ - struct TMeshInfo : public SMDS_MeshInfo - { - void Add(const SMDS_MeshElement* e) { SMDS_MeshInfo::addWithPoly( e ); } - }; -}; - //================================================================================ /*! * \brief Export a part of mesh to a med file @@ -4901,6 +4871,27 @@ SMESH_MeshPartDS::SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr meshPart): } } // ------------------------------------------------------------------------------------- +SMESH_MeshPartDS::SMESH_MeshPartDS(const std::list< const SMDS_MeshElement* > & meshPart): + SMESHDS_Mesh( /*meshID=*/-1, /*isEmbeddedMode=*/true), _meshDS(0) +{ + TMeshInfo tmpInfo; + list< const SMDS_MeshElement* >::const_iterator partIt = meshPart.begin(); + for ( ; partIt != meshPart.end(); ++partIt ) + if ( const SMDS_MeshElement * e = *partIt ) + if ( _elements[ e->GetType() ].insert( e ).second ) + { + tmpInfo.Add( e ); + SMDS_ElemIteratorPtr nIt = e->nodesIterator(); + while ( nIt->more() ) + { + const SMDS_MeshNode * n = (const SMDS_MeshNode*) nIt->next(); + if ( _elements[ SMDSAbs_Node ].insert( n ).second ) + tmpInfo.Add( n ); + } + } + myInfo = tmpInfo; +} +// ------------------------------------------------------------------------------------- SMDS_ElemIteratorPtr SMESH_MeshPartDS::elementGeomIterator(SMDSAbs_GeometryType geomType) const { if ( _meshDS ) return _meshDS->elementGeomIterator( geomType ); diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index 3c13916a4..8963687d2 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -37,7 +37,6 @@ #include "SMESH_Hypothesis.hxx" #include "SMESH_Mesh.hxx" -//#include "SMESH_subMesh_i.hxx" #include "SMESH_subMesh.hxx" #include "SALOME_GenericObj_i.hh" -- 2.39.2