Merge 'master' branch into 'V9_dev' branch.

This commit is contained in:
rnv 2018-01-17 16:20:50 +03:00
commit 7a3ecab720
212 changed files with 1169 additions and 2371 deletions

1811
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@ -42,7 +42,7 @@ Nb_Segments_4 = Regular_1D_3.NumberOfSegments(12)
MEFISTO_2D_3 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_3) MEFISTO_2D_3 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_3)
SubMesh_3 = MEFISTO_2D_3.GetSubMesh() SubMesh_3 = MEFISTO_2D_3.GetSubMesh()
# check exisiting sub-mesh priority order # check existing sub-mesh priority order
[ [ SubMesh_1, SubMesh_3, SubMesh_2 ] ] = Mesh_1.GetMeshOrder() [ [ SubMesh_1, SubMesh_3, SubMesh_2 ] ] = Mesh_1.GetMeshOrder()
isDone = Mesh_1.Compute() isDone = Mesh_1.Compute()
print("Nb elements at initial order of sub-meshes:", Mesh_1.NbElements()) print("Nb elements at initial order of sub-meshes:", Mesh_1.NbElements())

View File

@ -15,7 +15,7 @@ ids = filter.GetIDs()
print("Number of faces with aspect ratio > 1.5:", len(ids)) print("Number of faces with aspect ratio > 1.5:", len(ids))
# copy the faces with aspect ratio > 1.5 to another mesh; # copy the faces with aspect ratio > 1.5 to another mesh;
# this demostrates that a filter can be used where usually a group or sub-mesh is acceptable # this demonstrates that a filter can be used where usually a group or sub-mesh is acceptable
filter.SetMesh( mesh.GetMesh() ) # - actually non necessary as mesh is set at filter creation filter.SetMesh( mesh.GetMesh() ) # - actually non necessary as mesh is set at filter creation
mesh2 = smesh.CopyMesh( filter, "AR > 1.5" ) mesh2 = smesh.CopyMesh( filter, "AR > 1.5" )
print("Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces()) print("Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces())

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -42,7 +42,10 @@ Parameters to be defined in this mode:
<li><b>Group of nodes to duplicate</b> (<em>mandatory</em>): these <li><b>Group of nodes to duplicate</b> (<em>mandatory</em>): these
nodes will be duplicated.</li> nodes will be duplicated.</li>
<li><b>Group of elements to replace nodes with new ones</b> <li><b>Group of elements to replace nodes with new ones</b>
(<em>optional</em>): the new nodes will replace the duplicated nodes within these elements.</li> (<em>optional</em>): the new nodes will replace the duplicated nodes
within these elements. \b Generate button automatically creates
these groups.
</li>
<li><b>Construct group with newly created nodes</b> option <li><b>Construct group with newly created nodes</b> option
(<em>checked by default</em>): if checked - the group with newly (<em>checked by default</em>): if checked - the group with newly
created nodes will be built.</li> created nodes will be built.</li>
@ -73,7 +76,8 @@ Parameters to be defined in this mode:
group of nodes at crack bottom which will not be duplicated.</li> group of nodes at crack bottom which will not be duplicated.</li>
<li><b>Group of elements to replace nodes with new ones</b> <li><b>Group of elements to replace nodes with new ones</b>
(<em>mandatory</em>): the new nodes will replace the nodes to (<em>mandatory</em>): the new nodes will replace the nodes to
duplicate within these elements.</li> duplicate within these elements. \b Generate button automatically
creates these groups.</li>
<li><b>Construct group with newly created elements</b> option <li><b>Construct group with newly created elements</b> option
(<em>checked by default</em>): if checked - the group of newly created (<em>checked by default</em>): if checked - the group of newly created
elements will be built.</li> elements will be built.</li>

View File

@ -1,6 +1,6 @@
/*! /*!
\page smesh_migration_page Modifing Mesh Python scripts from SALOME 6 and before \page smesh_migration_page Modifying Mesh Python scripts from SALOME 6 and before
\n In SALOME 7.2, the Python interface for %Mesh has been slightly modified to offer new functionality: \n In SALOME 7.2, the Python interface for %Mesh has been slightly modified to offer new functionality:

View File

@ -190,7 +190,7 @@ filters over-constrained faces:
\section filter_double_elements Double edges, Double faces, Double volumes \section filter_double_elements Double edges, Double faces, Double volumes
filters mesh elements basing on the same set of nodes: filters mesh elements basing on the same set of nodes:
- element type is either \a SMESH.EGDE, \a SMESH.FACE or \a SMESH.VOLUME - element type is either \a SMESH.EDGE, \a SMESH.FACE or \a SMESH.VOLUME
- functor type is either \a SMESH.FT_EqualEdges, \a - functor type is either \a SMESH.FT_EqualEdges, \a
SMESH.FT_EqualFaces or \a SMESH.FT_EqualVolumes, SMESH.FT_EqualFaces or \a SMESH.FT_EqualVolumes,
- threshold value is not required - threshold value is not required

View File

@ -128,7 +128,7 @@ module StdMeshers
}; };
/*! /*!
* Common inteface of 1D hypotheses that can be reversed * Common interface of 1D hypotheses that can be reversed
*/ */
interface Reversible1D interface Reversible1D
{ {

View File

@ -76,7 +76,7 @@ module SMESH
const long Tag_LastGroup = 16; const long Tag_LastGroup = 16;
/*! /*!
* Hypothesis definintion error * Hypothesis definition error
*/ */
struct AlgoStateError struct AlgoStateError
{ {
@ -348,7 +348,7 @@ module SMESH
raises ( SALOME::SALOME_Exception ); raises ( SALOME::SALOME_Exception );
/*! /*!
* Return errors of hypotheses definintion * Return errors of hypotheses definition
* algo_error_array is empty if everything is OK * algo_error_array is empty if everything is OK
*/ */
algo_error_array GetAlgoState( in SMESH_Mesh theMesh, algo_error_array GetAlgoState( in SMESH_Mesh theMesh,

View File

@ -31,7 +31,6 @@
module SMESH module SMESH
{ {
/* /*
* Measure component * Measure component
*/ */
@ -70,7 +69,12 @@ module SMESH
* sum of volume of 3D elements of the source * sum of volume of 3D elements of the source
*/ */
double Volume(in SMESH_IDSource source); double Volume(in SMESH_IDSource source);
/*!
* gravity center of the source
*/
PointStruct GravityCenter(in SMESH_IDSource source);
}; };
}; };
#endif #endif

View File

@ -318,7 +318,7 @@ module SMESH
* \param IDsOfElements Ids of triangles to be fused. * \param IDsOfElements Ids of triangles to be fused.
* \param theCriterion Is used to choose a neighbour to fuse with. * \param theCriterion Is used to choose a neighbour to fuse with.
* \param theMaxAngle Is a max angle between element normals at which fusion * \param theMaxAngle Is a max angle between element normals at which fusion
* is still performed; theMaxAngle is mesured in radians. * is still performed; theMaxAngle is measured in radians.
* \return \c true in case of success, FALSE otherwise. * \return \c true in case of success, FALSE otherwise.
*/ */
boolean TriToQuad (in long_array IDsOfElements, boolean TriToQuad (in long_array IDsOfElements,
@ -356,7 +356,7 @@ module SMESH
/*! /*!
* \brief Split quadrangles into triangles. * \brief Split quadrangles into triangles.
* \param theElems The faces to be splitted. * \param theElems The faces to be split.
* \param the13Diag Is used to choose a diagonal for splitting. * \param the13Diag Is used to choose a diagonal for splitting.
* \return TRUE in case of success, FALSE otherwise. * \return TRUE in case of success, FALSE otherwise.
*/ */
@ -372,7 +372,7 @@ module SMESH
/*! /*!
* Find better splitting of the given quadrangle. * Find better splitting of the given quadrangle.
* \param IDOfQuad ID of the quadrangle to be splitted. * \param IDOfQuad ID of the quadrangle to be split.
* \param Criterion A criterion to choose a diagonal for splitting. * \param Criterion A criterion to choose a diagonal for splitting.
* \return 1 if 1-3 diagonal is better, 2 if 2-4 * \return 1 if 1-3 diagonal is better, 2 if 2-4
* diagonal is better, 0 if error occurs. * diagonal is better, 0 if error occurs.

View File

@ -1279,7 +1279,7 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
} // switch(nbNodes) } // switch(nbNodes)
if ( nbNodes > 4 ) { if ( nbNodes > 4 ) {
// avaluate aspect ratio of quadranle faces // evaluate aspect ratio of quadrangle faces
AspectRatio aspect2D; AspectRatio aspect2D;
SMDS_VolumeTool::VolumeType type = SMDS_VolumeTool::GetType( nbNodes ); SMDS_VolumeTool::VolumeType type = SMDS_VolumeTool::GetType( nbNodes );
int nbFaces = SMDS_VolumeTool::NbFaces( type ); int nbFaces = SMDS_VolumeTool::NbFaces( type );
@ -1288,7 +1288,7 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
if ( SMDS_VolumeTool::NbFaceNodes( type, i ) != 4 ) if ( SMDS_VolumeTool::NbFaceNodes( type, i ) != 4 )
continue; continue;
const int* pInd = SMDS_VolumeTool::GetFaceNodesIndices( type, i, true ); const int* pInd = SMDS_VolumeTool::GetFaceNodesIndices( type, i, true );
for ( int p = 0; p < 4; ++p ) // loop on nodes of a quadranle face for ( int p = 0; p < 4; ++p ) // loop on nodes of a quadrangle face
points( p + 1 ) = P( pInd[ p ] + 1 ); points( p + 1 ) = P( pInd[ p ] + 1 );
aQuality = std::max( aQuality, aspect2D.GetValue( points )); aQuality = std::max( aQuality, aspect2D.GetValue( points ));
} }

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH Driver : implementaion of driver for reading and writing // SMESH Driver : implementation of driver for reading and writing
// File : Mesh_Reader.cxx // File : Mesh_Reader.cxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH Driver : implementaion of driver for reading and writing // SMESH Driver : implementation of driver for reading and writing
// File : Mesh_Reader.h // File : Mesh_Reader.h
// Module : SMESH // Module : SMESH
// //

View File

@ -247,7 +247,7 @@ int GmfOpenMesh(const char *FilNam, int mod, ...)
return(0); return(0);
} }
/* Open the file in the required mod and initialyse the mesh structure */ /* Open the file in the required mod and initialise the mesh structure */
if(msh->mod == GmfRead) if(msh->mod == GmfRead)
{ {

View File

@ -32,7 +32,7 @@ typedef boost::shared_ptr<DriverMED_Family> DriverMED_FamilyPtr;
namespace DriverMED namespace DriverMED
{ {
// Implemetation is in DriverMED_W_Field.cxx // Implementation is in DriverMED_W_Field.cxx
/* /*
* Returns MED element geom type (MED::EGeometrieElement) by SMDS type * Returns MED element geom type (MED::EGeometrieElement) by SMDS type

View File

@ -358,7 +358,7 @@ Driver_Mesh::Status DriverMED_W_Field::Perform()
return DRS_OK; return DRS_OK;
} }
namespace DriverMED // Implemetation of fuctions declared in DriverMED.hxx namespace DriverMED // Implementation of functions declared in DriverMED.hxx
{ {
//================================================================================ //================================================================================
/*! /*!

View File

@ -80,7 +80,7 @@ int SMESH_ExtractGeometry::RequestData(vtkInformation *vtkNotUsed(request),
vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
vtkInformation *outInfo = outputVector->GetInformationObject(0); vtkInformation *outInfo = outputVector->GetInformationObject(0);
// get the input and ouptut // get the input and output
vtkDataSet *input = vtkDataSet *input =
vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT())); vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT()));
vtkUnstructuredGrid *output = vtkUnstructuredGrid *output =

View File

@ -242,7 +242,7 @@ int SMESH_FaceOrientationFilter::RequestData(
vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
vtkInformation *outInfo = outputVector->GetInformationObject(0); vtkInformation *outInfo = outputVector->GetInformationObject(0);
// get the input and ouptut // get the input and output
vtkDataSet *input = vtkDataSet::SafeDownCast( vtkDataSet *input = vtkDataSet::SafeDownCast(
inInfo->Get(vtkDataObject::DATA_OBJECT())); inInfo->Get(vtkDataObject::DATA_OBJECT()));
vtkPolyData *output = vtkPolyData::SafeDownCast( vtkPolyData *output = vtkPolyData::SafeDownCast(

View File

@ -557,7 +557,8 @@ int SMESH_ScalarBarActor::RenderOpaqueGeometry(vtkViewport *viewport)
} }
//polygons & cell colors //polygons & cell colors
unsigned char *rgba, *rgb; unsigned char *rgb;
const unsigned char *rgba;
vtkIdType ptIds[4], dcCount=0; vtkIdType ptIds[4], dcCount=0;
for ( i = 0; i < numColors; i++ ) for ( i = 0; i < numColors; i++ )
{ {

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDSAbs_ElementType.hxx // File : SMDSAbs_ElementType.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -17,7 +17,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// Module : SMESH // Module : SMESH
// File : SMDS_BallElement.cxx // File : SMDS_BallElement.cxx
// Author : Edward AGAPOV (eap) // Author : Edward AGAPOV (eap)

View File

@ -17,7 +17,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_BallElement.hxx // File : SMDS_BallElement.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_EdgePosition.cxx // File : SMDS_EdgePosition.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_EdgePosition.hxx // File : SMDS_EdgePosition.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshElement.hxx // File : SMDS_MeshElement.hxx
// Module : SMESH // Module : SMESH
// Created: 12.01.05 18:02:52 // Created: 12.01.05 18:02:52

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifndef _SMDS_FaceOfNodes_HeaderFile #ifndef _SMDS_FaceOfNodes_HeaderFile
#define _SMDS_FaceOfNodes_HeaderFile #define _SMDS_FaceOfNodes_HeaderFile

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_FacePosition.cxx // File : SMDS_FacePosition.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_FacePosition.hxx // File : SMDS_FacePosition.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifndef _SMDS_Iterator_HeaderFile #ifndef _SMDS_Iterator_HeaderFile
#define _SMDS_Iterator_HeaderFile #define _SMDS_Iterator_HeaderFile

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#include "SMESH_SMDS.hxx" #include "SMESH_SMDS.hxx"

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_IteratorOnIterators.hxx // File : SMDS_IteratorOnIterators.hxx
// Author : Edward AGAPOV (eap) // Author : Edward AGAPOV (eap)
// //
@ -32,7 +32,7 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/// SMDS_Iterator iterating over all elements provided by other iterators /// SMDS_Iterator iterating over all elements provided by other iterators
/// ///
/// Other iterators must implement SMDS_Iterator iterface and /// Other iterators must implement SMDS_Iterator interface and
/// must be provided within a stl-like container /// must be provided within a stl-like container
/// BE CAREFUL: iterator pointed value is static_cast'ed to VALUE /// BE CAREFUL: iterator pointed value is static_cast'ed to VALUE
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_Mesh.hxx // File : SMDS_Mesh.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -17,7 +17,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_Mesh0DElement.cxx // File : SMDS_Mesh0DElement.cxx
// Module : SMESH // Module : SMESH
// //

View File

@ -17,7 +17,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_Mesh0DElement.hxx // File : SMDS_Mesh0DElement.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -17,7 +17,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshEdge.hxx // File : SMDS_MeshEdge.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshElement.hxx // File : SMDS_MeshElement.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshElementIDFactory.cxx // File : SMDS_MeshElementIDFactory.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshElementIDFactory.hxx // File : SMDS_MeshElementIDFactory.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#include "SMDS_MeshFace.hxx" #include "SMDS_MeshFace.hxx"

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshFace.hxx // File : SMDS_MeshFace.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshGroup.cxx // File : SMDS_MeshGroup.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshGroup.hxx // File : SMDS_MeshGroup.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshIDFactory.cxx // File : SMDS_MeshIDFactory.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshIDFactory.hxx // File : SMDS_MeshIDFactory.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshNode.hxx // File : SMDS_MeshNode.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshObject.cxx // File : SMDS_MeshObject.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshObject.hxx // File : SMDS_MeshObject.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshVolume.cxx // File : SMDS_MeshVolume.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshVolume.hxx // File : SMDS_MeshVolume.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifndef _SMDS_PolygonalFaceOfNodes_HeaderFile #ifndef _SMDS_PolygonalFaceOfNodes_HeaderFile
#define _SMDS_PolygonalFaceOfNodes_HeaderFile #define _SMDS_PolygonalFaceOfNodes_HeaderFile

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_PolyhedralVolumeOfNodes.hxx // File : SMDS_PolyhedralVolumeOfNodes.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_Position.cxx // File : SMDS_Position.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_Position.hxx // File : SMDS_Position.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File: SMDS_QuadraticEdge.cxx // File: SMDS_QuadraticEdge.cxx
// Created: 16.01.06 16:25:42 // Created: 16.01.06 16:25:42
// Author: Sergey KUUL // Author: Sergey KUUL

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_QuadraticEdge.hxx // File : SMDS_QuadraticEdge.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File: SMDS_QuadraticFaceOfNodes.cxx // File: SMDS_QuadraticFaceOfNodes.cxx
// Created: 16.01.06 17:12:58 // Created: 16.01.06 17:12:58
// Author: Sergey KUUL // Author: Sergey KUUL

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_QuadraticVolumeOfNodes.hxx // File : SMDS_QuadraticVolumeOfNodes.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File: SMDS_QuadraticVolumeOfNodes.cxx // File: SMDS_QuadraticVolumeOfNodes.cxx
// Created: 17.01.06 09:46:11 // Created: 17.01.06 09:46:11
// Author: Sergey KUUL // Author: Sergey KUUL

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_QuadraticVolumeOfNodes.hxx // File : SMDS_QuadraticVolumeOfNodes.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_SetIterator.hxx // File : SMDS_SetIterator.hxx
// Created : Feb 27 2006 // Created : Feb 27 2006
// Author : Edward AGAPOV (eap) // Author : Edward AGAPOV (eap)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_SpacePosition.cxx // File : SMDS_SpacePosition.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_SpacePosition.hxx // File : SMDS_SpacePosition.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -17,7 +17,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_StdIterator.hxx // File : SMDS_StdIterator.hxx
// Created : Fri Feb 5 11:03:46 2010 // Created : Fri Feb 5 11:03:46 2010
// Author : Edward AGAPOV (eap) // Author : Edward AGAPOV (eap)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_TypeOfPosition.hxx // File : SMDS_TypeOfPosition.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_VertexPosition.cxx // File : SMDS_VertexPosition.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_VertexPosition.hxx // File : SMDS_VertexPosition.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_VolumeOfFaces.cxx // File : SMDS_VolumeOfFaces.cxx
// Author : Jean-Michel BOULCOURT // Author : Jean-Michel BOULCOURT
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_VolumeOfFaces.hxx // File : SMDS_VolumeOfFaces.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// //
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4786) #pragma warning(disable:4786)

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_MeshVolume.hxx // File : SMDS_MeshVolume.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -1683,7 +1683,7 @@ double SMDS_VolumeTool::MaxLinearSize2() const
//================================================================================ //================================================================================
/*! /*!
* \brief fast check that only one volume is build on the face nodes * \brief Fast quickly check that only one volume is built on the face nodes
* This check is valid for conformal meshes only * This check is valid for conformal meshes only
*/ */
//================================================================================ //================================================================================
@ -1731,7 +1731,7 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex, const SMDS_MeshElement** otherV
//================================================================================ //================================================================================
/*! /*!
* \brief Thorough check that only one volume is build on the face nodes * \brief Thorough check that only one volume is built on the face nodes
*/ */
//================================================================================ //================================================================================

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_VolumeTool.hxx // File : SMDS_VolumeTool.hxx
// Module : SMESH // Module : SMESH
// Created : Tue Jul 13 11:27:17 2004 // Created : Tue Jul 13 11:27:17 2004

View File

@ -17,7 +17,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMDS : implementaion of Salome mesh data structure // SMESH SMDS : implementation of Salome mesh data structure
// File : SMDS_VtkEdge.hxx // File : SMDS_VtkEdge.hxx
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Algo.cxx // File : SMESH_Algo.cxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Algo.hxx // File : SMESH_Algo.hxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH
@ -69,7 +69,7 @@ typedef std::map< SMESH_subMesh*, std::vector<int> >::iterator MapShapeNbElemsIt
* Methods of the class are grouped into several parts: * Methods of the class are grouped into several parts:
* - main lifecycle methods, like Compute() * - main lifecycle methods, like Compute()
* - methods describing features of the algorithm, like NeedShape() * - methods describing features of the algorithm, like NeedShape()
* - methods related to dependencies between sub-meshes imposed by the algorith * - methods related to dependencies between sub-meshes imposed by the algorithm
* - static utilities, like EdgeLength() * - static utilities, like EdgeLength()
*/ */
// ================================================================================== // ==================================================================================

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Gen.cxx // File : SMESH_Gen.cxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Gen.hxx // File : SMESH_Gen.hxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Group.cxx // File : SMESH_Group.cxx
// Author : Michael Sazonov (OCC) // Author : Michael Sazonov (OCC)
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Group.hxx // File : SMESH_Group.hxx
// Author : Michael Sazonov (OCC) // Author : Michael Sazonov (OCC)
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_HypoFilter.cxx // File : SMESH_HypoFilter.cxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_HypoFilter.hxx // File : SMESH_HypoFilter.hxx
// Module : SMESH // Module : SMESH
// //

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Hypothesis.cxx // File : SMESH_Hypothesis.cxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_Hypothesis.hxx // File : SMESH_Hypothesis.hxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH

View File

@ -694,7 +694,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
} }
} }
// check concurent hypotheses on ancestors // check concurrent hypotheses on ancestors
if (ret < SMESH_Hypothesis::HYP_CONCURENT && !isGlobalHyp ) if (ret < SMESH_Hypothesis::HYP_CONCURENT && !isGlobalHyp )
{ {
SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false); SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
@ -764,7 +764,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
if (ret2 > ret) // more severe if (ret2 > ret) // more severe
ret = ret2; ret = ret2;
// check concurent hypotheses on ancestors // check concurrent hypotheses on ancestors
if (ret < SMESH_Hypothesis::HYP_CONCURENT && !IsMainShape( aSubShape ) ) if (ret < SMESH_Hypothesis::HYP_CONCURENT && !IsMainShape( aSubShape ) )
{ {
SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false); SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);

View File

@ -93,6 +93,7 @@
#include <sstream> #include <sstream>
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple.hpp>
#include <boost/container/flat_set.hpp>
#include <Standard_Failure.hxx> #include <Standard_Failure.hxx>
#include <Standard_ErrorHandler.hxx> #include <Standard_ErrorHandler.hxx>
@ -1279,7 +1280,7 @@ int SMESH_MeshEditor::Reorient2D (TIDSortedElemSet & theFaces,
} }
if ( otherFace && otherFace != theFace) if ( otherFace && otherFace != theFace)
{ {
// link must be reverse in otherFace if orientation ot otherFace // link must be reverse in otherFace if orientation to otherFace
// is same as that of theFace // is same as that of theFace
if ( abs(nodeInd2-nodeInd1) == 1 ? nodeInd2 > nodeInd1 : nodeInd1 > nodeInd2 ) if ( abs(nodeInd2-nodeInd1) == 1 ? nodeInd2 > nodeInd1 : nodeInd1 > nodeInd2 )
{ {
@ -1501,7 +1502,7 @@ bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet & theElems,
//======================================================================= //=======================================================================
/*! /*!
* \brief Split each of given quadrangles into 4 triangles. * \brief Split each of given quadrangles into 4 triangles.
* \param theElems - The faces to be splitted. If empty all faces are split. * \param theElems - The faces to be split. If empty all faces are split.
*/ */
//======================================================================= //=======================================================================
@ -4570,11 +4571,7 @@ void SMESH_MeshEditor::sweepElement(const SMDS_MeshElement* elem,
std::swap( itNN[0], itNN[1] ); std::swap( itNN[0], itNN[1] );
std::swap( prevNod[0], prevNod[1] ); std::swap( prevNod[0], prevNod[1] );
std::swap( nextNod[0], nextNod[1] ); std::swap( nextNod[0], nextNod[1] );
#if defined(__APPLE__)
std::swap( isSingleNode[0], isSingleNode[1] ); std::swap( isSingleNode[0], isSingleNode[1] );
#else
isSingleNode.swap( isSingleNode[0], isSingleNode[1] );
#endif
if ( nbSame > 0 ) if ( nbSame > 0 )
sames[0] = 1 - sames[0]; sames[0] = 1 - sames[0];
iNotSameNode = 1 - iNotSameNode; iNotSameNode = 1 - iNotSameNode;
@ -6145,7 +6142,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet theElements[2],
makeEdgePathPoints(aPrms, aTrackEdge,(aN1->GetID()==startNid), LPP); makeEdgePathPoints(aPrms, aTrackEdge,(aN1->GetID()==startNid), LPP);
LLPPs.push_back(LPP); LLPPs.push_back(LPP);
UsedNums.Add(k); UsedNums.Add(k);
// update startN for search following egde // update startN for search following edge
if( aN1->GetID() == startNid ) startNid = aN2->GetID(); if( aN1->GetID() == startNid ) startNid = aN2->GetID();
else startNid = aN1->GetID(); else startNid = aN1->GetID();
break; break;
@ -6444,7 +6441,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet theElements[2],
makeEdgePathPoints(aPrms, aTrackEdge, aN1isOK, LPP); makeEdgePathPoints(aPrms, aTrackEdge, aN1isOK, LPP);
LLPPs.push_back(LPP); LLPPs.push_back(LPP);
UsedNums.Add(k); UsedNums.Add(k);
// update startN for search following egde // update startN for search following edge
if ( aN1isOK ) aVprev = aV2; if ( aN1isOK ) aVprev = aV2;
else aVprev = aV1; else aVprev = aV1;
break; break;
@ -7982,33 +7979,29 @@ void SMESH_MeshEditor::FindEqualElements(TIDSortedElemSet & theElements,
typedef map< SortableElement, int > TMapOfNodeSet; typedef map< SortableElement, int > TMapOfNodeSet;
typedef list<int> TGroupOfElems; typedef list<int> TGroupOfElems;
if ( theElements.empty() ) SMDS_ElemIteratorPtr elemIt;
{ // get all elements in the mesh if ( theElements.empty() ) elemIt = GetMeshDS()->elementsIterator();
SMDS_ElemIteratorPtr eIt = GetMeshDS()->elementsIterator(); else elemIt = elemSetIterator( theElements );
while ( eIt->more() )
theElements.insert( theElements.end(), eIt->next() );
}
vector< TGroupOfElems > arrayOfGroups; vector< TGroupOfElems > arrayOfGroups;
TGroupOfElems groupOfElems; TGroupOfElems groupOfElems;
TMapOfNodeSet mapOfNodeSet; TMapOfNodeSet mapOfNodeSet;
TIDSortedElemSet::iterator elemIt = theElements.begin(); for ( int iGroup = 0; elemIt->more(); )
for ( int i = 0; elemIt != theElements.end(); ++elemIt )
{ {
const SMDS_MeshElement* curElem = *elemIt; const SMDS_MeshElement* curElem = elemIt->next();
SortableElement SE(curElem); SortableElement SE(curElem);
// check uniqueness // check uniqueness
pair< TMapOfNodeSet::iterator, bool> pp = mapOfNodeSet.insert(make_pair(SE, i)); pair< TMapOfNodeSet::iterator, bool> pp = mapOfNodeSet.insert(make_pair(SE, iGroup));
if ( !pp.second ) { // one more coincident elem if ( !pp.second ) { // one more coincident elem
TMapOfNodeSet::iterator& itSE = pp.first; TMapOfNodeSet::iterator& itSE = pp.first;
int ind = (*itSE).second; int iG = itSE->second;
arrayOfGroups[ind].push_back( curElem->GetID() ); arrayOfGroups[ iG ].push_back( curElem->GetID() );
} }
else { else {
arrayOfGroups.push_back( groupOfElems ); arrayOfGroups.push_back( groupOfElems );
arrayOfGroups.back().push_back( curElem->GetID() ); arrayOfGroups.back().push_back( curElem->GetID() );
i++; iGroup++;
} }
} }
@ -10599,6 +10592,559 @@ SMESH_MeshEditor::FindMatchingNodes(set<const SMDS_MeshElement*>& theSide1,
return SEW_OK; return SEW_OK;
} }
namespace // automatically find theAffectedElems for DoubleNodes()
{
bool isOut( const SMDS_MeshNode* n, const gp_XYZ& norm, const SMDS_MeshElement* elem );
//--------------------------------------------------------------------------------
// Nodes shared by adjacent FissureBorder's.
// 1 node if FissureBorder separates faces
// 2 nodes if FissureBorder separates volumes
struct SubBorder
{
const SMDS_MeshNode* _nodes[2];
int _nbNodes;
SubBorder( const SMDS_MeshNode* n1, const SMDS_MeshNode* n2 = 0 )
{
_nodes[0] = n1;
_nodes[1] = n2;
_nbNodes = bool( n1 ) + bool( n2 );
if ( _nbNodes == 2 && n1 > n2 )
std::swap( _nodes[0], _nodes[1] );
}
bool operator<( const SubBorder& other ) const
{
for ( int i = 0; i < _nbNodes; ++i )
{
if ( _nodes[i] < other._nodes[i] ) return true;
if ( _nodes[i] > other._nodes[i] ) return false;
}
return false;
}
};
//--------------------------------------------------------------------------------
// Map a SubBorder to all FissureBorder it bounds
struct FissureBorder;
typedef std::map< SubBorder, std::vector< FissureBorder* > > TBorderLinks;
typedef TBorderLinks::iterator TMappedSub;
//--------------------------------------------------------------------------------
/*!
* \brief Element border (volume facet or face edge) at a fissure
*/
struct FissureBorder
{
std::vector< const SMDS_MeshNode* > _nodes; // border nodes
const SMDS_MeshElement* _elems[2]; // volume or face adjacent to fissure
std::vector< TMappedSub > _mappedSubs; // Sub() in TBorderLinks map
std::vector< const SMDS_MeshNode* > _sortedNodes; // to compare FissureBorder's
FissureBorder( FissureBorder && from ) // move constructor
{
std::swap( _nodes, from._nodes );
std::swap( _sortedNodes, from._sortedNodes );
_elems[0] = from._elems[0];
_elems[1] = from._elems[1];
}
FissureBorder( const SMDS_MeshElement* elemToDuplicate,
std::vector< const SMDS_MeshElement* > & adjElems)
: _nodes( elemToDuplicate->NbCornerNodes() )
{
for ( size_t i = 0; i < _nodes.size(); ++i )
_nodes[i] = elemToDuplicate->GetNode( i );
SMDSAbs_ElementType type = SMDSAbs_ElementType( elemToDuplicate->GetType() + 1 );
findAdjacent( type, adjElems );
}
FissureBorder( const SMDS_MeshNode** nodes,
const size_t nbNodes,
const SMDSAbs_ElementType adjElemsType,
std::vector< const SMDS_MeshElement* > & adjElems)
: _nodes( nodes, nodes + nbNodes )
{
findAdjacent( adjElemsType, adjElems );
}
void findAdjacent( const SMDSAbs_ElementType adjElemsType,
std::vector< const SMDS_MeshElement* > & adjElems)
{
_elems[0] = _elems[1] = 0;
adjElems.clear();
if ( SMDS_Mesh::GetElementsByNodes( _nodes, adjElems, adjElemsType ))
for ( size_t i = 0; i < adjElems.size() && i < 2; ++i )
_elems[i] = adjElems[i];
}
bool operator<( const FissureBorder& other ) const
{
return GetSortedNodes() < other.GetSortedNodes();
}
const std::vector< const SMDS_MeshNode* >& GetSortedNodes() const
{
if ( _sortedNodes.empty() && !_nodes.empty() )
{
FissureBorder* me = const_cast<FissureBorder*>( this );
me->_sortedNodes = me->_nodes;
std::sort( me->_sortedNodes.begin(), me->_sortedNodes.end() );
}
return _sortedNodes;
}
size_t NbSub() const
{
return _nodes.size();
}
SubBorder Sub(size_t i) const
{
return SubBorder( _nodes[i], NbSub() > 2 ? _nodes[ (i+1)%NbSub() ] : 0 );
}
void AddSelfTo( TBorderLinks& borderLinks )
{
_mappedSubs.resize( NbSub() );
for ( size_t i = 0; i < NbSub(); ++i )
{
TBorderLinks::iterator s2b =
borderLinks.insert( std::make_pair( Sub(i), TBorderLinks::mapped_type() )).first;
s2b->second.push_back( this );
_mappedSubs[ i ] = s2b;
}
}
void Clear()
{
_nodes.clear();
}
const SMDS_MeshElement* GetMarkedElem() const
{
if ( _nodes.empty() ) return 0; // cleared
if ( _elems[0] && _elems[0]->isMarked() ) return _elems[0];
if ( _elems[1] && _elems[1]->isMarked() ) return _elems[1];
return 0;
}
gp_XYZ GetNorm() const // normal to the border
{
gp_XYZ norm;
if ( _nodes.size() == 2 )
{
gp_XYZ avgNorm( 0,0,0 ); // sum of normals of adjacent faces
if ( SMESH_MeshAlgos::FaceNormal( _elems[0], norm ))
avgNorm += norm;
if ( SMESH_MeshAlgos::FaceNormal( _elems[1], norm ))
avgNorm += norm;
gp_XYZ bordDir( SMESH_NodeXYZ( _nodes[0] ) - SMESH_NodeXYZ( _nodes[1] ));
norm = bordDir ^ avgNorm;
}
else
{
SMESH_NodeXYZ p0( _nodes[0] );
SMESH_NodeXYZ p1( _nodes[1] );
SMESH_NodeXYZ p2( _nodes[2] );
norm = ( p0 - p1 ) ^ ( p2 - p1 );
}
if ( isOut( _nodes[0], norm, GetMarkedElem() ))
norm.Reverse();
return norm;
}
void ChooseSide() // mark an _elem located at positive side of fissure
{
_elems[0]->setIsMarked( true );
gp_XYZ norm = GetNorm();
double maxX = norm.Coord(1);
if ( Abs( maxX ) < Abs( norm.Coord(2)) ) maxX = norm.Coord(2);
if ( Abs( maxX ) < Abs( norm.Coord(3)) ) maxX = norm.Coord(3);
if ( maxX < 0 )
{
_elems[0]->setIsMarked( false );
_elems[1]->setIsMarked( true );
}
}
}; // struct FissureBorder
//--------------------------------------------------------------------------------
/*!
* \brief Classifier of elements at fissure edge
*/
class FissureNormal
{
std::vector< gp_XYZ > _normals;
bool _bothIn;
public:
void Add( const SMDS_MeshNode* n, const FissureBorder& bord )
{
_bothIn = false;
_normals.reserve(2);
_normals.push_back( bord.GetNorm() );
if ( _normals.size() == 2 )
_bothIn = !isOut( n, _normals[0], bord.GetMarkedElem() );
}
bool IsIn( const SMDS_MeshNode* n, const SMDS_MeshElement* elem ) const
{
bool isIn = false;
switch ( _normals.size() ) {
case 1:
{
isIn = !isOut( n, _normals[0], elem );
break;
}
case 2:
{
bool in1 = !isOut( n, _normals[0], elem );
bool in2 = !isOut( n, _normals[1], elem );
isIn = _bothIn ? ( in1 && in2 ) : ( in1 || in2 );
}
}
return isIn;
}
};
//================================================================================
/*!
* \brief Classify an element by a plane passing through a node
*/
//================================================================================
bool isOut( const SMDS_MeshNode* n, const gp_XYZ& norm, const SMDS_MeshElement* elem )
{
SMESH_NodeXYZ p = n;
double sumDot = 0;
for ( int i = 0, nb = elem->NbCornerNodes(); i < nb; ++i )
{
SMESH_NodeXYZ pi = elem->GetNode( i );
sumDot += norm * ( pi - p );
}
return sumDot < -1e-100;
}
//================================================================================
/*!
* \brief Find FissureBorder's by nodes to duplicate
*/
//================================================================================
void findFissureBorders( const TIDSortedElemSet& theNodes,
std::vector< FissureBorder > & theFissureBorders )
{
TIDSortedElemSet::const_iterator nIt = theNodes.begin();
const SMDS_MeshNode* n = dynamic_cast< const SMDS_MeshNode*>( *nIt );
if ( !n ) return;
SMDSAbs_ElementType elemType = SMDSAbs_Volume;
if ( n->NbInverseElements( elemType ) == 0 )
{
elemType = SMDSAbs_Face;
if ( n->NbInverseElements( elemType ) == 0 )
return;
}
// unmark elements touching the fissure
for ( ; nIt != theNodes.end(); ++nIt )
SMESH_MeshAlgos::MarkElems( cast2Node(*nIt)->GetInverseElementIterator(), false );
// loop on elements touching the fissure to get their borders belonging to the fissure
std::set< FissureBorder > fissureBorders;
std::vector< const SMDS_MeshElement* > adjElems;
std::vector< const SMDS_MeshNode* > nodes;
SMDS_VolumeTool volTool;
for ( nIt = theNodes.begin(); nIt != theNodes.end(); ++nIt )
{
SMDS_ElemIteratorPtr invIt = cast2Node(*nIt)->GetInverseElementIterator( elemType );
while ( invIt->more() )
{
const SMDS_MeshElement* eInv = invIt->next();
if ( eInv->isMarked() ) continue;
eInv->setIsMarked( true );
if ( elemType == SMDSAbs_Volume )
{
volTool.Set( eInv );
int iQuad = eInv->IsQuadratic() ? 2 : 1;
for ( int iF = 0, nbF = volTool.NbFaces(); iF < nbF; ++iF )
{
const SMDS_MeshNode** nn = volTool.GetFaceNodes( iF );
int nbN = volTool.NbFaceNodes( iF ) / iQuad;
nodes.clear();
bool allOnFissure = true;
for ( int iN = 0; iN < nbN && allOnFissure; iN += iQuad )
if (( allOnFissure = theNodes.count( nn[ iN ])))
nodes.push_back( nn[ iN ]);
if ( allOnFissure )
fissureBorders.insert( std::move( FissureBorder( &nodes[0], nodes.size(),
elemType, adjElems )));
}
}
else // elemType == SMDSAbs_Face
{
const SMDS_MeshNode* nn[2] = { eInv->GetNode( eInv->NbCornerNodes()-1 ), 0 };
bool onFissure0 = theNodes.count( nn[0] ), onFissure1;
for ( int iN = 0, nbN = eInv->NbCornerNodes(); iN < nbN; ++iN )
{
nn[1] = eInv->GetNode( iN );
onFissure1 = theNodes.count( nn[1] );
if ( onFissure0 && onFissure1 )
fissureBorders.insert( std::move( FissureBorder( nn, 2, elemType, adjElems )));
nn[0] = nn[1];
onFissure0 = onFissure1;
}
}
}
}
theFissureBorders.reserve( theFissureBorders.size() + fissureBorders.size());
std::set< FissureBorder >::iterator bord = fissureBorders.begin();
for ( ; bord != fissureBorders.end(); ++bord )
{
theFissureBorders.push_back( std::move( const_cast<FissureBorder&>( *bord ) ));
}
return;
} // findFissureBorders()
//================================================================================
/*!
* \brief Find elements on one side of a fissure defined by elements or nodes to duplicate
* \param [in] theElemsOrNodes - elements or nodes to duplicate
* \param [in] theNodesNot - nodes not to duplicate
* \param [out] theAffectedElems - the found elements
*/
//================================================================================
void findAffectedElems( const TIDSortedElemSet& theElemsOrNodes,
TIDSortedElemSet& theAffectedElems)
{
if ( theElemsOrNodes.empty() ) return;
// find FissureBorder's
std::vector< FissureBorder > fissure;
std::vector< const SMDS_MeshElement* > elemsByFacet;
TIDSortedElemSet::const_iterator elIt = theElemsOrNodes.begin();
if ( (*elIt)->GetType() == SMDSAbs_Node )
{
findFissureBorders( theElemsOrNodes, fissure );
}
else
{
fissure.reserve( theElemsOrNodes.size() );
for ( ; elIt != theElemsOrNodes.end(); ++elIt )
fissure.push_back( std::move( FissureBorder( *elIt, elemsByFacet )));
}
if ( fissure.empty() )
return;
// fill borderLinks
TBorderLinks borderLinks;
for ( size_t i = 0; i < fissure.size(); ++i )
{
fissure[i].AddSelfTo( borderLinks );
}
// get theAffectedElems
// unmark elements having nodes on the fissure, theAffectedElems elements will be marked
for ( size_t i = 0; i < fissure.size(); ++i )
for ( size_t j = 0; j < fissure[i]._nodes.size(); ++j )
{
SMESH_MeshAlgos::MarkElemNodes( fissure[i]._nodes[j]->GetInverseElementIterator(),
false, /*markElem=*/true );
}
std::vector<const SMDS_MeshNode *> facetNodes;
std::map< const SMDS_MeshNode*, FissureNormal > fissEdgeNodes2Norm;
boost::container::flat_set< const SMDS_MeshNode* > fissureNodes;
// choose a side of fissure
fissure[0].ChooseSide();
theAffectedElems.insert( fissure[0].GetMarkedElem() );
size_t nbCheckedBorders = 0;
while ( nbCheckedBorders < fissure.size() )
{
// find a FissureBorder to treat
FissureBorder* bord = 0;
for ( size_t i = 0; i < fissure.size() && !bord; ++i )
if ( fissure[i].GetMarkedElem() )
bord = & fissure[i];
for ( size_t i = 0; i < fissure.size() && !bord; ++i )
if ( fissure[i].NbSub() > 0 && fissure[i]._elems[0] )
{
bord = & fissure[i];
bord->ChooseSide();
theAffectedElems.insert( bord->GetMarkedElem() );
}
if ( !bord ) return;
++nbCheckedBorders;
// treat FissureBorder's linked to bord
fissureNodes.clear();
fissureNodes.insert( bord->_nodes.begin(), bord->_nodes.end() );
for ( size_t i = 0; i < bord->NbSub(); ++i )
{
TBorderLinks::iterator l2b = bord->_mappedSubs[ i ];
if ( l2b == borderLinks.end() || l2b->second.empty() ) continue;
std::vector< FissureBorder* >& linkedBorders = l2b->second;
const SubBorder& sb = l2b->first;
const SMDS_MeshElement* bordElem = bord->GetMarkedElem();
if ( linkedBorders.size() == 1 ) // fissure edge reached, fill fissEdgeNodes2Norm
{
for ( int j = 0; j < sb._nbNodes; ++j )
fissEdgeNodes2Norm[ sb._nodes[j] ].Add( sb._nodes[j], *bord );
continue;
}
// add to theAffectedElems elems sharing nodes of a SubBorder and a node of bordElem
// until an elem adjacent to a neighbour FissureBorder is found
facetNodes.clear();
facetNodes.insert( facetNodes.end(), sb._nodes, sb._nodes + sb._nbNodes );
facetNodes.resize( sb._nbNodes + 1 );
while ( bordElem )
{
// check if bordElem is adjacent to a neighbour FissureBorder
for ( size_t j = 0; j < linkedBorders.size(); ++j )
{
FissureBorder* bord2 = linkedBorders[j];
if ( bord2 == bord ) continue;
if ( bordElem == bord2->_elems[0] || bordElem == bord2->_elems[1] )
bordElem = 0;
else
fissureNodes.insert( bord2->_nodes.begin(), bord2->_nodes.end() );
}
if ( !bordElem )
break;
// find the next bordElem
const SMDS_MeshElement* nextBordElem = 0;
for ( int iN = 0, nbN = bordElem->NbCornerNodes(); iN < nbN && !nextBordElem; ++iN )
{
const SMDS_MeshNode* n = bordElem->GetNode( iN );
if ( fissureNodes.count( n )) continue;
facetNodes[ sb._nbNodes ] = n;
elemsByFacet.clear();
if ( SMDS_Mesh::GetElementsByNodes( facetNodes, elemsByFacet ) > 1 )
{
for ( size_t iE = 0; iE < elemsByFacet.size(); ++iE )
if ( elemsByFacet[ iE ] != bordElem &&
!elemsByFacet[ iE ]->isMarked() )
{
theAffectedElems.insert( elemsByFacet[ iE ]);
elemsByFacet[ iE ]->setIsMarked( true );
if ( elemsByFacet[ iE ]->GetType() == bordElem->GetType() )
nextBordElem = elemsByFacet[ iE ];
}
}
}
bordElem = nextBordElem;
} // while ( bordElem )
linkedBorders.clear(); // not to treat this link any more
} // loop on SubBorder's of a FissureBorder
bord->Clear();
} // loop on FissureBorder's
// add elements sharing only one node of the fissure, except those sharing fissure edge nodes
// mark nodes of theAffectedElems
SMESH_MeshAlgos::MarkElemNodes( theAffectedElems.begin(), theAffectedElems.end(), true );
// unmark nodes of the fissure
elIt = theElemsOrNodes.begin();
if ( (*elIt)->GetType() == SMDSAbs_Node )
SMESH_MeshAlgos::MarkElems( elIt, theElemsOrNodes.end(), false );
else
SMESH_MeshAlgos::MarkElemNodes( elIt, theElemsOrNodes.end(), false );
std::vector< gp_XYZ > normVec;
// loop on nodes of the fissure, add elements having marked nodes
for ( elIt = theElemsOrNodes.begin(); elIt != theElemsOrNodes.end(); ++elIt )
{
const SMDS_MeshElement* e = (*elIt);
if ( e->GetType() != SMDSAbs_Node )
e->setIsMarked( true ); // avoid adding a fissure element
for ( int iN = 0, nbN = e->NbCornerNodes(); iN < nbN; ++iN )
{
const SMDS_MeshNode* n = e->GetNode( iN );
if ( fissEdgeNodes2Norm.count( n ))
continue;
SMDS_ElemIteratorPtr invIt = n->GetInverseElementIterator();
while ( invIt->more() )
{
const SMDS_MeshElement* eInv = invIt->next();
if ( eInv->isMarked() ) continue;
eInv->setIsMarked( true );
SMDS_ElemIteratorPtr nIt = eInv->nodesIterator();
while( nIt->more() )
if ( nIt->next()->isMarked())
{
theAffectedElems.insert( eInv );
SMESH_MeshAlgos::MarkElems( eInv->nodesIterator(), true );
n->setIsMarked( false );
break;
}
}
}
}
// add elements on the fissure edge
std::map< const SMDS_MeshNode*, FissureNormal >::iterator n2N;
for ( n2N = fissEdgeNodes2Norm.begin(); n2N != fissEdgeNodes2Norm.end(); ++n2N )
{
const SMDS_MeshNode* edgeNode = n2N->first;
const FissureNormal & normals = n2N->second;
SMDS_ElemIteratorPtr invIt = edgeNode->GetInverseElementIterator();
while ( invIt->more() )
{
const SMDS_MeshElement* eInv = invIt->next();
if ( eInv->isMarked() ) continue;
eInv->setIsMarked( true );
// classify eInv using normals
bool toAdd = normals.IsIn( edgeNode, eInv );
if ( toAdd ) // check if all nodes lie on the fissure edge
{
bool notOnEdge = false;
for ( int iN = 0, nbN = eInv->NbCornerNodes(); iN < nbN && !notOnEdge; ++iN )
notOnEdge = !fissEdgeNodes2Norm.count( eInv->GetNode( iN ));
toAdd = notOnEdge;
}
if ( toAdd )
{
theAffectedElems.insert( eInv );
}
}
}
return;
} // findAffectedElems()
} // namespace
//================================================================================ //================================================================================
/*! /*!
* \brief Create elements equal (on same nodes) to given ones * \brief Create elements equal (on same nodes) to given ones
@ -10616,7 +11162,6 @@ void SMESH_MeshEditor::DoubleElements( const TIDSortedElemSet& theElements )
SMDSAbs_ElementType type = SMDSAbs_All; SMDSAbs_ElementType type = SMDSAbs_All;
SMDS_ElemIteratorPtr elemIt; SMDS_ElemIteratorPtr elemIt;
vector< const SMDS_MeshElement* > allElems;
if ( theElements.empty() ) if ( theElements.empty() )
{ {
if ( mesh->NbNodes() == 0 ) if ( mesh->NbNodes() == 0 )
@ -10632,12 +11177,7 @@ void SMESH_MeshEditor::DoubleElements( const TIDSortedElemSet& theElements )
type = types[i]; type = types[i];
break; break;
} }
// put all elements in the vector <allElems>
allElems.reserve( mesh->GetMeshInfo().NbElements( type ));
elemIt = mesh->elementsIterator( type ); elemIt = mesh->elementsIterator( type );
while ( elemIt->more() )
allElems.push_back( elemIt->next());
elemIt = elemSetIterator( allElems );
} }
else else
{ {
@ -10645,6 +11185,9 @@ void SMESH_MeshEditor::DoubleElements( const TIDSortedElemSet& theElements )
elemIt = elemSetIterator( theElements ); elemIt = elemSetIterator( theElements );
} }
// un-mark all elements to avoid duplicating just created elements
SMESH_MeshAlgos::MarkElems( mesh->elementsIterator( type ), false );
// duplicate elements // duplicate elements
ElemFeatures elemType; ElemFeatures elemType;
@ -10653,13 +11196,14 @@ void SMESH_MeshEditor::DoubleElements( const TIDSortedElemSet& theElements )
while ( elemIt->more() ) while ( elemIt->more() )
{ {
const SMDS_MeshElement* elem = elemIt->next(); const SMDS_MeshElement* elem = elemIt->next();
if ( elem->GetType() != type ) if ( elem->GetType() != type || elem->isMarked() )
continue; continue;
elemType.Init( elem, /*basicOnly=*/false ); elemType.Init( elem, /*basicOnly=*/false );
nodes.assign( elem->begin_nodes(), elem->end_nodes() ); nodes.assign( elem->begin_nodes(), elem->end_nodes() );
AddElement( nodes, elemType ); if ( const SMDS_MeshElement* newElem = AddElement( nodes, elemType ))
newElem->setIsMarked( true );
} }
} }
@ -10679,8 +11223,7 @@ bool SMESH_MeshEditor::DoubleNodes( const TIDSortedElemSet& theElems,
const TIDSortedElemSet& theNodesNot, const TIDSortedElemSet& theNodesNot,
const TIDSortedElemSet& theAffectedElems ) const TIDSortedElemSet& theAffectedElems )
{ {
myLastCreatedElems.Clear(); ClearLastCreated();
myLastCreatedNodes.Clear();
if ( theElems.size() == 0 ) if ( theElems.size() == 0 )
return false; return false;
@ -10725,8 +11268,8 @@ bool SMESH_MeshEditor::doubleNodes(SMESHDS_Mesh* theMeshDS,
for ( ; elemItr != theElems.end(); ++elemItr ) for ( ; elemItr != theElems.end(); ++elemItr )
{ {
const SMDS_MeshElement* anElem = *elemItr; const SMDS_MeshElement* anElem = *elemItr;
if (!anElem) // if (!anElem)
continue; // continue;
// duplicate nodes to duplicate element // duplicate nodes to duplicate element
bool isDuplicate = false; bool isDuplicate = false;
@ -10780,8 +11323,7 @@ bool SMESH_MeshEditor::doubleNodes(SMESHDS_Mesh* theMeshDS,
bool SMESH_MeshEditor::DoubleNodes( const std::list< int >& theListOfNodes, bool SMESH_MeshEditor::DoubleNodes( const std::list< int >& theListOfNodes,
const std::list< int >& theListOfModifiedElems ) const std::list< int >& theListOfModifiedElems )
{ {
myLastCreatedElems.Clear(); ClearLastCreated();
myLastCreatedNodes.Clear();
if ( theListOfNodes.size() == 0 ) if ( theListOfNodes.size() == 0 )
return false; return false;
@ -10797,8 +11339,7 @@ bool SMESH_MeshEditor::DoubleNodes( const std::list< int >& theListOfNodes,
std::list< int >::const_iterator aNodeIter; std::list< int >::const_iterator aNodeIter;
for ( aNodeIter = theListOfNodes.begin(); aNodeIter != theListOfNodes.end(); ++aNodeIter ) for ( aNodeIter = theListOfNodes.begin(); aNodeIter != theListOfNodes.end(); ++aNodeIter )
{ {
int aCurr = *aNodeIter; const SMDS_MeshNode* aNode = aMeshDS->FindNode( *aNodeIter );
SMDS_MeshNode* aNode = (SMDS_MeshNode*)aMeshDS->FindNode( aCurr );
if ( !aNode ) if ( !aNode )
continue; continue;
@ -10813,49 +11354,28 @@ bool SMESH_MeshEditor::DoubleNodes( const std::list< int >& theListOfNodes,
} }
} }
// Create map of new nodes for modified elements // Change nodes of elements
std::map< SMDS_MeshElement*, vector<const SMDS_MeshNode*> > anElemToNodes; std::vector<const SMDS_MeshNode*> aNodeArr;
std::list< int >::const_iterator anElemIter; std::list< int >::const_iterator anElemIter;
for ( anElemIter = theListOfModifiedElems.begin(); for ( anElemIter = theListOfModifiedElems.begin();
anElemIter != theListOfModifiedElems.end(); ++anElemIter ) anElemIter != theListOfModifiedElems.end();
anElemIter++ )
{ {
int aCurr = *anElemIter; const SMDS_MeshElement* anElem = aMeshDS->FindElement( *anElemIter );
SMDS_MeshElement* anElem = (SMDS_MeshElement*)aMeshDS->FindElement( aCurr );
if ( !anElem ) if ( !anElem )
continue; continue;
vector<const SMDS_MeshNode*> aNodeArr( anElem->NbNodes() ); aNodeArr.assign( anElem->begin_nodes(), anElem->end_nodes() );
for( size_t i = 0; i < aNodeArr.size(); ++i )
SMDS_ElemIteratorPtr anIter = anElem->nodesIterator();
int ind = 0;
while ( anIter->more() )
{ {
SMDS_MeshNode* aCurrNode = (SMDS_MeshNode*)anIter->next(); std::map< const SMDS_MeshNode*, const SMDS_MeshNode* >::iterator n2n =
if ( aCurr && anOldNodeToNewNode.find( aCurrNode ) != anOldNodeToNewNode.end() ) anOldNodeToNewNode.find( aNodeArr[ i ]);
{ if ( n2n != anOldNodeToNewNode.end() )
const SMDS_MeshNode* aNewNode = anOldNodeToNewNode[ aCurrNode ]; aNodeArr[ i ] = n2n->second;
aNodeArr[ ind++ ] = aNewNode;
}
else
aNodeArr[ ind++ ] = aCurrNode;
}
anElemToNodes[ anElem ] = aNodeArr;
}
// Change nodes of elements
std::map< SMDS_MeshElement*, vector<const SMDS_MeshNode*> >::iterator
anElemToNodesIter = anElemToNodes.begin();
for ( ; anElemToNodesIter != anElemToNodes.end(); ++anElemToNodesIter )
{
const SMDS_MeshElement* anElem = anElemToNodesIter->first;
vector<const SMDS_MeshNode*> aNodeArr = anElemToNodesIter->second;
if ( anElem )
{
aMeshDS->ChangeElementNodes( anElem, &aNodeArr[ 0 ], anElem->NbNodes() );
} }
aMeshDS->ChangeElementNodes( anElem, &aNodeArr[ 0 ], aNodeArr.size() );
} }
return true; return true;
@ -10877,8 +11397,8 @@ namespace {
{ {
gp_XYZ centerXYZ (0, 0, 0); gp_XYZ centerXYZ (0, 0, 0);
SMDS_ElemIteratorPtr aNodeItr = theElem->nodesIterator(); SMDS_ElemIteratorPtr aNodeItr = theElem->nodesIterator();
while (aNodeItr->more()) while ( aNodeItr->more() )
centerXYZ += SMESH_TNodeXYZ(cast2Node( aNodeItr->next())); centerXYZ += SMESH_NodeXYZ( aNodeItr->next() );
gp_Pnt aPnt = centerXYZ / theElem->NbNodes(); gp_Pnt aPnt = centerXYZ / theElem->NbNodes();
theClassifier.Perform(aPnt, theTol); theClassifier.Perform(aPnt, theTol);
@ -10933,9 +11453,9 @@ namespace {
(select elements with a gravity center on the side given by faces normals). (select elements with a gravity center on the side given by faces normals).
This mode (null shape) is faster, but works only when theElems are faces, with coherents orientations. This mode (null shape) is faster, but works only when theElems are faces, with coherents orientations.
The replicated nodes should be associated to affected elements. The replicated nodes should be associated to affected elements.
\return groups of affected elements \return true
\sa DoubleNodeElemGroupsInRegion() \sa DoubleNodeElemGroupsInRegion()
*/ */
//================================================================================ //================================================================================
bool SMESH_MeshEditor::AffectedElemGroupsInRegion( const TIDSortedElemSet& theElems, bool SMESH_MeshEditor::AffectedElemGroupsInRegion( const TIDSortedElemSet& theElems,
@ -10945,94 +11465,7 @@ bool SMESH_MeshEditor::AffectedElemGroupsInRegion( const TIDSortedElemSet& theEl
{ {
if ( theShape.IsNull() ) if ( theShape.IsNull() )
{ {
std::set<const SMDS_MeshNode*> alreadyCheckedNodes; findAffectedElems( theElems, theAffectedElems );
std::set<const SMDS_MeshElement*> alreadyCheckedElems;
std::set<const SMDS_MeshElement*> edgesToCheck;
alreadyCheckedNodes.clear();
alreadyCheckedElems.clear();
edgesToCheck.clear();
// --- iterates on elements to be replicated and get elements by back references from their nodes
TIDSortedElemSet::const_iterator elemItr = theElems.begin();
for ( ; elemItr != theElems.end(); ++elemItr )
{
SMDS_MeshElement* anElem = (SMDS_MeshElement*)*elemItr;
if (!anElem || (anElem->GetType() != SMDSAbs_Face))
continue;
gp_XYZ normal;
SMESH_MeshAlgos::FaceNormal( anElem, normal, /*normalized=*/true );
std::set<const SMDS_MeshNode*> nodesElem;
nodesElem.clear();
SMDS_ElemIteratorPtr nodeItr = anElem->nodesIterator();
while ( nodeItr->more() )
{
const SMDS_MeshNode* aNode = cast2Node(nodeItr->next());
nodesElem.insert(aNode);
}
std::set<const SMDS_MeshNode*>::iterator nodit = nodesElem.begin();
for (; nodit != nodesElem.end(); nodit++)
{
const SMDS_MeshNode* aNode = *nodit;
if ( !aNode || theNodesNot.find(aNode) != theNodesNot.end() )
continue;
if (alreadyCheckedNodes.find(aNode) != alreadyCheckedNodes.end())
continue;
alreadyCheckedNodes.insert(aNode);
SMDS_ElemIteratorPtr backElemItr = aNode->GetInverseElementIterator();
while ( backElemItr->more() )
{
const SMDS_MeshElement* curElem = backElemItr->next();
if (alreadyCheckedElems.find(curElem) != alreadyCheckedElems.end())
continue;
if (theElems.find(curElem) != theElems.end())
continue;
alreadyCheckedElems.insert(curElem);
double x=0, y=0, z=0;
int nb = 0;
SMDS_ElemIteratorPtr nodeItr2 = curElem->nodesIterator();
while ( nodeItr2->more() )
{
const SMDS_MeshNode* anotherNode = cast2Node(nodeItr2->next());
x += anotherNode->X();
y += anotherNode->Y();
z += anotherNode->Z();
nb++;
}
gp_XYZ p;
p.SetCoord( x/nb -aNode->X(),
y/nb -aNode->Y(),
z/nb -aNode->Z() );
if (normal*p > 0)
{
theAffectedElems.insert( curElem );
}
else if (curElem->GetType() == SMDSAbs_Edge)
edgesToCheck.insert(curElem);
}
}
}
// --- add also edges lying on the set of faces (all nodes in alreadyCheckedNodes)
std::set<const SMDS_MeshElement*>::iterator eit = edgesToCheck.begin();
for( ; eit != edgesToCheck.end(); eit++)
{
bool onside = true;
const SMDS_MeshElement* anEdge = *eit;
SMDS_ElemIteratorPtr nodeItr = anEdge->nodesIterator();
while ( nodeItr->more() )
{
const SMDS_MeshNode* aNode = cast2Node(nodeItr->next());
if (alreadyCheckedNodes.find(aNode) == alreadyCheckedNodes.end())
{
onside = false;
break;
}
}
if (onside)
{
theAffectedElems.insert(anEdge);
}
}
} }
else else
{ {
@ -11053,9 +11486,7 @@ bool SMESH_MeshEditor::AffectedElemGroupsInRegion( const TIDSortedElemSet& theEl
TIDSortedElemSet::const_iterator elemItr = theElems.begin(); TIDSortedElemSet::const_iterator elemItr = theElems.begin();
for ( ; elemItr != theElems.end(); ++elemItr ) for ( ; elemItr != theElems.end(); ++elemItr )
{ {
SMDS_MeshElement* anElem = (SMDS_MeshElement*)*elemItr; SMDS_MeshElement* anElem = (SMDS_MeshElement*)*elemItr;
if (!anElem)
continue;
SMDS_ElemIteratorPtr nodeItr = anElem->nodesIterator(); SMDS_ElemIteratorPtr nodeItr = anElem->nodesIterator();
while ( nodeItr->more() ) while ( nodeItr->more() )
{ {
@ -11067,9 +11498,9 @@ bool SMESH_MeshEditor::AffectedElemGroupsInRegion( const TIDSortedElemSet& theEl
{ {
const SMDS_MeshElement* curElem = backElemItr->next(); const SMDS_MeshElement* curElem = backElemItr->next();
if ( curElem && theElems.find(curElem) == theElems.end() && if ( curElem && theElems.find(curElem) == theElems.end() &&
( bsc3d.get() ? ( bsc3d.get() ?
isInside( curElem, *bsc3d, aTol ) : isInside( curElem, *bsc3d, aTol ) :
isInside( curElem, *aFaceClassifier, aTol ))) isInside( curElem, *aFaceClassifier, aTol )))
theAffectedElems.insert( curElem ); theAffectedElems.insert( curElem );
} }
} }

View File

@ -199,7 +199,7 @@ public:
const bool the13Diag); const bool the13Diag);
/*! /*!
* \brief Split each of given quadrangles into 4 triangles. * \brief Split each of given quadrangles into 4 triangles.
* \param theElems - The faces to be splitted. If empty all faces are split. * \param theElems - The faces to be split. If empty all faces are split.
*/ */
void QuadTo4Tri (TIDSortedElemSet & theElems); void QuadTo4Tri (TIDSortedElemSet & theElems);
@ -542,7 +542,7 @@ public:
// of the side 2. If nb of links in the free border and // of the side 2. If nb of links in the free border and
// between theSide2FirstNode and theSide2LastNode are different, // between theSide2FirstNode and theSide2LastNode are different,
// additional nodes are inserted on a link provided that no // additional nodes are inserted on a link provided that no
// volume elements share the splitted link. // volume elements share the split link.
// The side 2 is a free border if theSide2IsFreeBorder == true. // The side 2 is a free border if theSide2IsFreeBorder == true.
// Sewing is performed between the given first, second and last // Sewing is performed between the given first, second and last
// nodes on the sides. // nodes on the sides.

View File

@ -2963,7 +2963,7 @@ bool SMESH_MesherHelper::IsDistorted2D( SMESH_subMesh* faceSM,
* \brief Find out elements orientation on a geometrical face * \brief Find out elements orientation on a geometrical face
* \param theFace - The face correctly oriented in the shape being meshed * \param theFace - The face correctly oriented in the shape being meshed
* \retval bool - true if the face normal and the normal of first element * \retval bool - true if the face normal and the normal of first element
* in the correspoding submesh point in different directions * in the corresponding submesh point in different directions
*/ */
//================================================================================ //================================================================================
@ -4378,7 +4378,7 @@ namespace { // Structures used by FixQuadraticElements()
vector< TChain> & resultChains, vector< TChain> & resultChains,
SMDS_TypeOfPosition pos ) SMDS_TypeOfPosition pos )
{ {
// put links in the set and evalute number of result chains by number of boundary links // put links in the set and evaluate number of result chains by number of boundary links
TLinkSet linkSet; TLinkSet linkSet;
size_t nbBndLinks = 0; size_t nbBndLinks = 0;
for ( TChain::iterator lnk = allLinks.begin(); lnk != allLinks.end(); ++lnk ) { for ( TChain::iterator lnk = allLinks.begin(); lnk != allLinks.end(); ++lnk ) {

View File

@ -2481,7 +2481,7 @@ bool SMESH_Pattern::Apply (const TopoDS_Face& theFace,
// If there are several wires, define the order of edges of inner wires: // If there are several wires, define the order of edges of inner wires:
// compute UV of inner edge-points using 2 methods: the one for in-face points // compute UV of inner edge-points using 2 methods: the one for in-face points
// and the one for on-edge points and then choose the best edge order // and the one for on-edge points and then choose the best edge order
// by the best correspondance of the 2 results // by the best correspondence of the 2 results
if ( nbWires > 1 ) if ( nbWires > 1 )
{ {
// compute UV of inner edge-points using the method for in-face points // compute UV of inner edge-points using the method for in-face points

View File

@ -20,7 +20,7 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// SMESH SMESH : implementaion of SMESH idl descriptions // SMESH SMESH : implementation of SMESH idl descriptions
// File : SMESH_subMesh.cxx // File : SMESH_subMesh.cxx
// Author : Paul RASCLE, EDF // Author : Paul RASCLE, EDF
// Module : SMESH // Module : SMESH

Some files were not shown because too many files have changed in this diff Show More