mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-26 11:10:34 +05:00
parent
66ec81f68d
commit
650885c135
@ -14,10 +14,13 @@ smesh = smeshBuilder.New()
|
|||||||
|
|
||||||
# create a sphere
|
# create a sphere
|
||||||
sphere = geompy.MakeSphereR( 50 )
|
sphere = geompy.MakeSphereR( 50 )
|
||||||
geompy.addToStudy( sphere, "sphere" )
|
|
||||||
|
# cut the sphere by a box
|
||||||
|
box = geompy.MakeBoxDXDYDZ( 100, 100, 100 )
|
||||||
|
partition = geompy.MakePartition([ sphere ], [ box ], theName="partition")
|
||||||
|
|
||||||
# create a mesh and assign a "Body Fitting" algo
|
# create a mesh and assign a "Body Fitting" algo
|
||||||
mesh = smesh.Mesh( sphere )
|
mesh = smesh.Mesh( partition )
|
||||||
cartAlgo = mesh.BodyFitted()
|
cartAlgo = mesh.BodyFitted()
|
||||||
|
|
||||||
# define a cartesian grid using Coordinates
|
# define a cartesian grid using Coordinates
|
||||||
@ -38,7 +41,27 @@ mesh.Compute()
|
|||||||
print("nb hexahedra",mesh.NbHexas())
|
print("nb hexahedra",mesh.NbHexas())
|
||||||
print("nb tetrahedra",mesh.NbTetras())
|
print("nb tetrahedra",mesh.NbTetras())
|
||||||
print("nb polyhedra",mesh.NbPolyhedrons())
|
print("nb polyhedra",mesh.NbPolyhedrons())
|
||||||
|
print("nb faces",mesh.NbFaces())
|
||||||
|
print()
|
||||||
|
|
||||||
|
# activate creation of faces
|
||||||
|
cartHyp.SetToCreateFaces( True )
|
||||||
|
|
||||||
|
mesh.Compute()
|
||||||
|
print("nb hexahedra",mesh.NbHexas())
|
||||||
|
print("nb tetrahedra",mesh.NbTetras())
|
||||||
|
print("nb polyhedra",mesh.NbPolyhedrons())
|
||||||
|
print("nb faces",mesh.NbFaces())
|
||||||
|
print()
|
||||||
|
|
||||||
|
# enable consideration of shared faces
|
||||||
|
cartHyp.SetToConsiderInternalFaces( True )
|
||||||
|
mesh.Compute()
|
||||||
|
print("nb hexahedra",mesh.NbHexas())
|
||||||
|
print("nb tetrahedra",mesh.NbTetras())
|
||||||
|
print("nb polyhedra",mesh.NbPolyhedrons())
|
||||||
|
print("nb faces",mesh.NbFaces())
|
||||||
|
print()
|
||||||
|
|
||||||
# define the grid by setting different spacing in 2 sub-ranges of geometry
|
# define the grid by setting different spacing in 2 sub-ranges of geometry
|
||||||
spaceFuns = ["5","10+10*t"]
|
spaceFuns = ["5","10+10*t"]
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 58 KiB |
@ -52,6 +52,9 @@ This dialog allows to define
|
|||||||
.. centered::
|
.. centered::
|
||||||
Implement Edges switched off to the left and on to the right
|
Implement Edges switched off to the left and on to the right
|
||||||
|
|
||||||
|
* **Create Faces** check-box activates creation on mesh faces.
|
||||||
|
* **Consider Shared and Internal Faces** check-box activates treatment of faces shared by solids and internal. By default the algorithm considers only outer boundaries of the geometry.
|
||||||
|
* **Apply Threshold to Shared / Internal Faces** check-box activates application of **Threshold** to cells cut by shared and internal faces, that can cause appearance of holes inside the mesh.
|
||||||
* **Definition mode** allows choosing how Cartesian structured grid is defined. Location of nodes along each grid axis is defined individually:
|
* **Definition mode** allows choosing how Cartesian structured grid is defined. Location of nodes along each grid axis is defined individually:
|
||||||
|
|
||||||
* You can specify the **Coordinates** of grid nodes. **Insert** button inserts a node at **Step** distance (negative or positive) from the selected node. **Delete** button removes the selected node. Double click on a coordinate in the list enables its edition. **Note** that node coordinates are measured along directions of axes that can differ from the directions of the Global Coordinate System.
|
* You can specify the **Coordinates** of grid nodes. **Insert** button inserts a node at **Step** distance (negative or positive) from the selected node. **Delete** button removes the selected node. Double click on a coordinate in the list enables its edition. **Note** that node coordinates are measured along directions of axes that can differ from the directions of the Global Coordinate System.
|
||||||
|
@ -1037,7 +1037,7 @@ module StdMeshers
|
|||||||
boolean GetFixedPoint(out SMESH::PointStruct p);
|
boolean GetFixedPoint(out SMESH::PointStruct p);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Enables implementation of geometrical edges into the mesh. If this feature
|
* Enable implementation of geometrical edges into the mesh. If this feature
|
||||||
* is disabled, sharp edges of the shape are lost ("smoothed") in the mesh if
|
* is disabled, sharp edges of the shape are lost ("smoothed") in the mesh if
|
||||||
* they don't coincide with the grid lines
|
* they don't coincide with the grid lines
|
||||||
*/
|
*/
|
||||||
@ -1045,17 +1045,35 @@ module StdMeshers
|
|||||||
boolean GetToAddEdges();
|
boolean GetToAddEdges();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Returns axes at which a number of generated hexahedra is maximal
|
* Enable treatment of geom faces, either shared by solids or internal.
|
||||||
|
*/
|
||||||
|
void SetToConsiderInternalFaces(in boolean toTreat);
|
||||||
|
boolean GetToConsiderInternalFaces();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Enable applying size threshold to grid cells cut by internal geom faces.
|
||||||
|
*/
|
||||||
|
void SetToUseThresholdForInternalFaces(in boolean toUse);
|
||||||
|
boolean GetToUseThresholdForInternalFaces();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Enable creation of mesh faces.
|
||||||
|
*/
|
||||||
|
void SetToCreateFaces(in boolean toCreate);
|
||||||
|
boolean GetToCreateFaces();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Return axes at which a number of generated hexahedra is maximal
|
||||||
*/
|
*/
|
||||||
void ComputeOptimalAxesDirs(in GEOM::GEOM_Object shape,
|
void ComputeOptimalAxesDirs(in GEOM::GEOM_Object shape,
|
||||||
in boolean isOrthogonal,
|
in boolean isOrthogonal,
|
||||||
out SMESH::DirStruct x,
|
out SMESH::DirStruct x,
|
||||||
out SMESH::DirStruct y,
|
out SMESH::DirStruct y,
|
||||||
out SMESH::DirStruct z )
|
out SMESH::DirStruct z )
|
||||||
raises (SALOME::SALOME_Exception);
|
raises (SALOME::SALOME_Exception);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Computes node coordinates by spacing functions
|
* \brief Compute node coordinates by spacing functions
|
||||||
* \param x0 - lower coordinate
|
* \param x0 - lower coordinate
|
||||||
* \param x1 - upper coordinate
|
* \param x1 - upper coordinate
|
||||||
* \param spaceFuns - space functions
|
* \param spaceFuns - space functions
|
||||||
|
@ -224,7 +224,6 @@
|
|||||||
<hypothesis type ="CartesianParameters3D"
|
<hypothesis type ="CartesianParameters3D"
|
||||||
label-id ="Body Fitting Parameters"
|
label-id ="Body Fitting Parameters"
|
||||||
icon-id ="mesh_hypo_length.png"
|
icon-id ="mesh_hypo_length.png"
|
||||||
context ="GLOBAL"
|
|
||||||
dim ="3"/>
|
dim ="3"/>
|
||||||
|
|
||||||
</hypotheses>
|
</hypotheses>
|
||||||
@ -570,7 +569,6 @@
|
|||||||
support-submeshes="false"
|
support-submeshes="false"
|
||||||
output ="HEXA"
|
output ="HEXA"
|
||||||
need-hyp ="true"
|
need-hyp ="true"
|
||||||
context ="GLOBAL"
|
|
||||||
dim ="3">
|
dim ="3">
|
||||||
<python-wrap>
|
<python-wrap>
|
||||||
<algo>Cartesian_3D=BodyFitted()</algo>
|
<algo>Cartesian_3D=BodyFitted()</algo>
|
||||||
|
@ -4262,6 +4262,7 @@ private:
|
|||||||
bool isOutOfFace (const gp_Pnt& p);
|
bool isOutOfFace (const gp_Pnt& p);
|
||||||
bool isOutOfEdge (const gp_Pnt& p);
|
bool isOutOfEdge (const gp_Pnt& p);
|
||||||
bool isOutOfVertex(const gp_Pnt& p);
|
bool isOutOfVertex(const gp_Pnt& p);
|
||||||
|
bool isOutOfNone (const gp_Pnt& p) { return true; }
|
||||||
bool isBox (const TopoDS_Shape& s);
|
bool isBox (const TopoDS_Shape& s);
|
||||||
|
|
||||||
bool (Classifier::* myIsOutFun)(const gp_Pnt& p);
|
bool (Classifier::* myIsOutFun)(const gp_Pnt& p);
|
||||||
@ -4583,7 +4584,7 @@ bool ElementsOnShape::IsSatisfy (const SMDS_MeshNode* node,
|
|||||||
{
|
{
|
||||||
isNodeOut = false;
|
isNodeOut = false;
|
||||||
if ( okShape )
|
if ( okShape )
|
||||||
*okShape = myWorkClassifiers[i]->Shape();
|
*okShape = myClassifiers[i].Shape();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4621,17 +4622,27 @@ void ElementsOnShape::Classifier::Init( const TopoDS_Shape& theShape,
|
|||||||
{
|
{
|
||||||
Standard_Real u1,u2,v1,v2;
|
Standard_Real u1,u2,v1,v2;
|
||||||
Handle(Geom_Surface) surf = BRep_Tool::Surface( TopoDS::Face( theShape ));
|
Handle(Geom_Surface) surf = BRep_Tool::Surface( TopoDS::Face( theShape ));
|
||||||
surf->Bounds( u1,u2,v1,v2 );
|
if ( surf.IsNull() )
|
||||||
myProjFace.Init(surf, u1,u2, v1,v2, myTol );
|
myIsOutFun = & ElementsOnShape::Classifier::isOutOfNone;
|
||||||
myIsOutFun = & ElementsOnShape::Classifier::isOutOfFace;
|
else
|
||||||
|
{
|
||||||
|
surf->Bounds( u1,u2,v1,v2 );
|
||||||
|
myProjFace.Init(surf, u1,u2, v1,v2, myTol );
|
||||||
|
myIsOutFun = & ElementsOnShape::Classifier::isOutOfFace;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TopAbs_EDGE:
|
case TopAbs_EDGE:
|
||||||
{
|
{
|
||||||
Standard_Real u1, u2;
|
Standard_Real u1, u2;
|
||||||
Handle(Geom_Curve) curve = BRep_Tool::Curve( TopoDS::Edge( theShape ), u1, u2);
|
Handle(Geom_Curve) curve = BRep_Tool::Curve( TopoDS::Edge( theShape ), u1, u2);
|
||||||
myProjEdge.Init(curve, u1, u2);
|
if ( curve.IsNull() )
|
||||||
myIsOutFun = & ElementsOnShape::Classifier::isOutOfEdge;
|
myIsOutFun = & ElementsOnShape::Classifier::isOutOfNone;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myProjEdge.Init(curve, u1, u2);
|
||||||
|
myIsOutFun = & ElementsOnShape::Classifier::isOutOfEdge;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TopAbs_VERTEX:
|
case TopAbs_VERTEX:
|
||||||
|
@ -161,8 +161,7 @@ SMESH_MeshEditor::ElemFeatures::Init( const SMDS_MeshElement* elem, bool basicOn
|
|||||||
myIsQuad = elem->IsQuadratic();
|
myIsQuad = elem->IsQuadratic();
|
||||||
if ( myType == SMDSAbs_Volume && !basicOnly )
|
if ( myType == SMDSAbs_Volume && !basicOnly )
|
||||||
{
|
{
|
||||||
vector<int> quant = static_cast<const SMDS_MeshVolume* >( elem )->GetQuantities();
|
myPolyhedQuantities = static_cast<const SMDS_MeshVolume* >( elem )->GetQuantities();
|
||||||
myPolyhedQuantities.swap( quant );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,9 +115,12 @@ void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * elem)
|
|||||||
(LOCALIZED("add element in subshape already belonging to a subshape"));
|
(LOCALIZED("add element in subshape already belonging to a subshape"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++myNbElements;
|
||||||
|
}
|
||||||
|
|
||||||
elem->setShapeID( myIndex );
|
elem->setShapeID( myIndex );
|
||||||
myNbElements++;
|
|
||||||
|
|
||||||
// remember element with smallest ID to optimize iteration on them
|
// remember element with smallest ID to optimize iteration on them
|
||||||
add( elem );
|
add( elem );
|
||||||
@ -178,8 +181,11 @@ void SMESHDS_SubMesh::AddNode(const SMDS_MeshNode * N)
|
|||||||
(LOCALIZED("a node being in sub-mesh is added to another sub-mesh"));
|
(LOCALIZED("a node being in sub-mesh is added to another sub-mesh"));
|
||||||
return; // already in
|
return; // already in
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++myNbNodes;
|
||||||
|
}
|
||||||
N->setShapeID( myIndex );
|
N->setShapeID( myIndex );
|
||||||
myNbNodes++;
|
|
||||||
|
|
||||||
// remember node with smallest ID to optimize iteration on them
|
// remember node with smallest ID to optimize iteration on them
|
||||||
add( N );
|
add( N );
|
||||||
|
@ -813,8 +813,8 @@ HypothesesSet::HypothesesSet( const QString& theSetName,
|
|||||||
: myUseCommonSize( useCommonSize ),
|
: myUseCommonSize( useCommonSize ),
|
||||||
myQuadDominated( isQuadDominated ),
|
myQuadDominated( isQuadDominated ),
|
||||||
myHypoSetName( theSetName ),
|
myHypoSetName( theSetName ),
|
||||||
myHypoList { mainHypos, altHypos, intHypos },
|
myHypoList { mainHypos, altHypos, intHypos },
|
||||||
myAlgoList { mainAlgos, altAlgos, intAlgos },
|
myAlgoList { mainAlgos, altAlgos, intAlgos },
|
||||||
myIsAlgo( false ),
|
myIsAlgo( false ),
|
||||||
myIsCustom( false ),
|
myIsCustom( false ),
|
||||||
myIndex( 0 )
|
myIndex( 0 )
|
||||||
|
@ -64,7 +64,10 @@ StdMeshers_CartesianParameters3D::StdMeshers_CartesianParameters3D(int h
|
|||||||
SMESH_Gen * gen)
|
SMESH_Gen * gen)
|
||||||
: SMESH_Hypothesis(hypId, gen),
|
: SMESH_Hypothesis(hypId, gen),
|
||||||
_sizeThreshold( 4.0 ), // default according to the customer specification
|
_sizeThreshold( 4.0 ), // default according to the customer specification
|
||||||
_toAddEdges( false )
|
_toAddEdges( false ),
|
||||||
|
_toConsiderInternalFaces( false ),
|
||||||
|
_toUseThresholdForInternalFaces( false ),
|
||||||
|
_toCreateFaces( false )
|
||||||
{
|
{
|
||||||
_name = "CartesianParameters3D"; // used by "Cartesian_3D"
|
_name = "CartesianParameters3D"; // used by "Cartesian_3D"
|
||||||
_param_algo_dim = 3; // 3D
|
_param_algo_dim = 3; // 3D
|
||||||
@ -739,6 +742,48 @@ bool StdMeshers_CartesianParameters3D::GetToAddEdges() const
|
|||||||
return _toAddEdges;
|
return _toAddEdges;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SetToConsiderInternalFaces
|
||||||
|
//purpose : Enables treatment of geom faces either shared by solids or internal
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void StdMeshers_CartesianParameters3D::SetToConsiderInternalFaces(bool toTreat)
|
||||||
|
{
|
||||||
|
if ( _toConsiderInternalFaces != toTreat )
|
||||||
|
{
|
||||||
|
_toConsiderInternalFaces = toTreat;
|
||||||
|
NotifySubMeshesHypothesisModification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SetToUseThresholdForInternalFaces
|
||||||
|
//purpose : Enables applying size threshold to grid cells cut by internal geom faces.
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void StdMeshers_CartesianParameters3D::SetToUseThresholdForInternalFaces(bool toUse)
|
||||||
|
{
|
||||||
|
if ( _toUseThresholdForInternalFaces != toUse )
|
||||||
|
{
|
||||||
|
_toUseThresholdForInternalFaces = toUse;
|
||||||
|
NotifySubMeshesHypothesisModification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SetToCreateFaces
|
||||||
|
//purpose : Enables creation of mesh faces.
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void StdMeshers_CartesianParameters3D::SetToCreateFaces(bool toCreate)
|
||||||
|
{
|
||||||
|
if ( _toCreateFaces != toCreate )
|
||||||
|
{
|
||||||
|
_toCreateFaces = toCreate;
|
||||||
|
NotifySubMeshesHypothesisModification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : IsDefined
|
//function : IsDefined
|
||||||
//purpose : Return true if parameters are well defined
|
//purpose : Return true if parameters are well defined
|
||||||
@ -786,6 +831,10 @@ std::ostream & StdMeshers_CartesianParameters3D::SaveTo(std::ostream & save)
|
|||||||
for ( int i = 0; i < 3; ++i )
|
for ( int i = 0; i < 3; ++i )
|
||||||
save << _fixedPoint[i] << " ";
|
save << _fixedPoint[i] << " ";
|
||||||
|
|
||||||
|
save << " " << _toConsiderInternalFaces
|
||||||
|
<< " " << _toUseThresholdForInternalFaces
|
||||||
|
<< " " << _toCreateFaces;
|
||||||
|
|
||||||
return save;
|
return save;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -844,6 +893,12 @@ std::istream & StdMeshers_CartesianParameters3D::LoadFrom(std::istream & load)
|
|||||||
for ( int i = 0; i < 3 && ok ; ++i )
|
for ( int i = 0; i < 3 && ok ; ++i )
|
||||||
ok = static_cast<bool>( load >> _fixedPoint[i]);
|
ok = static_cast<bool>( load >> _fixedPoint[i]);
|
||||||
|
|
||||||
|
if ( load >> _toConsiderInternalFaces )
|
||||||
|
{
|
||||||
|
load >> _toUseThresholdForInternalFaces;
|
||||||
|
load >> _toCreateFaces;
|
||||||
|
}
|
||||||
|
|
||||||
return load;
|
return load;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,6 +139,25 @@ public:
|
|||||||
void SetToAddEdges(bool toAdd);
|
void SetToAddEdges(bool toAdd);
|
||||||
bool GetToAddEdges() const;
|
bool GetToAddEdges() const;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Enables treatment of geom faces either shared by solids or internal.
|
||||||
|
*/
|
||||||
|
void SetToConsiderInternalFaces(bool toTreat);
|
||||||
|
bool GetToConsiderInternalFaces() const { return _toConsiderInternalFaces; }
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Enables applying size threshold to grid cells cut by internal geom faces.
|
||||||
|
*/
|
||||||
|
void SetToUseThresholdForInternalFaces(bool toUse);
|
||||||
|
bool GetToUseThresholdForInternalFaces() const { return _toUseThresholdForInternalFaces; }
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Enables creation of mesh faces.
|
||||||
|
*/
|
||||||
|
void SetToCreateFaces(bool toCreate);
|
||||||
|
bool GetToCreateFaces() const { return _toCreateFaces; }
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Return true if parameters are well defined
|
* \brief Return true if parameters are well defined
|
||||||
*/
|
*/
|
||||||
@ -171,6 +190,9 @@ public:
|
|||||||
|
|
||||||
double _sizeThreshold;
|
double _sizeThreshold;
|
||||||
bool _toAddEdges;
|
bool _toAddEdges;
|
||||||
|
bool _toConsiderInternalFaces;
|
||||||
|
bool _toUseThresholdForInternalFaces;
|
||||||
|
bool _toCreateFaces;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -204,8 +204,8 @@ namespace StdMeshersGUI
|
|||||||
axisTabLayout->setSpacing( SPACING );
|
axisTabLayout->setSpacing( SPACING );
|
||||||
|
|
||||||
axisTabLayout->addWidget( modeBox , 0, 0, 1, 3 );
|
axisTabLayout->addWidget( modeBox , 0, 0, 1, 3 );
|
||||||
axisTabLayout->addWidget( myInsertBtn , 1, 0, 1, 2 );
|
axisTabLayout->addWidget( myInsertBtn, 1, 0, 1, 2 );
|
||||||
axisTabLayout->addWidget( myDeleteBtn , 2, 0, 1, 2 );
|
axisTabLayout->addWidget( myDeleteBtn, 2, 0, 1, 2 );
|
||||||
axisTabLayout->addWidget( myStepLabel, 3, 0 );
|
axisTabLayout->addWidget( myStepLabel, 3, 0 );
|
||||||
axisTabLayout->addWidget( myStepSpin , 3, 1 );
|
axisTabLayout->addWidget( myStepSpin , 3, 1 );
|
||||||
axisTabLayout->addWidget( csFrame , 1, 2, 4, 1 );
|
axisTabLayout->addWidget( csFrame , 1, 2, 4, 1 );
|
||||||
@ -821,6 +821,15 @@ QFrame* StdMeshersGUI_CartesianParamCreator::buildFrame()
|
|||||||
myAddEdges = new QCheckBox( tr("ADD_EDGES"), GroupC1 );
|
myAddEdges = new QCheckBox( tr("ADD_EDGES"), GroupC1 );
|
||||||
argGroupLayout->addWidget( myAddEdges, row, 0, 1, 2 );
|
argGroupLayout->addWidget( myAddEdges, row, 0, 1, 2 );
|
||||||
row++;
|
row++;
|
||||||
|
myCreateFaces = new QCheckBox( tr("CREATE_FACES"), GroupC1 );
|
||||||
|
argGroupLayout->addWidget( myCreateFaces, row, 0, 1, 2 );
|
||||||
|
row++;
|
||||||
|
myConsiderInternalFaces = new QCheckBox( tr("CONSIDER_INTERNAL_FACES"), GroupC1 );
|
||||||
|
argGroupLayout->addWidget( myConsiderInternalFaces, row, 0, 1, 2 );
|
||||||
|
row++;
|
||||||
|
myUseThresholdForInternalFaces = new QCheckBox( tr("USE_THRESHOLD_FOR_INTERNAL_FACES"), GroupC1 );
|
||||||
|
argGroupLayout->addWidget( myUseThresholdForInternalFaces, row, 0, 1, 2 );
|
||||||
|
row++;
|
||||||
|
|
||||||
// 3) Grid definition
|
// 3) Grid definition
|
||||||
QTabWidget* tabWdg = new QTabWidget( fr );
|
QTabWidget* tabWdg = new QTabWidget( fr );
|
||||||
@ -924,6 +933,8 @@ QFrame* StdMeshersGUI_CartesianParamCreator::buildFrame()
|
|||||||
connect( myOrthogonalChk, SIGNAL( toggled(bool)), SLOT( onOrthogonalAxes(bool)));
|
connect( myOrthogonalChk, SIGNAL( toggled(bool)), SLOT( onOrthogonalAxes(bool)));
|
||||||
connect( optimBtn, SIGNAL( clicked(bool)), SLOT( onOptimalAxes(bool)));
|
connect( optimBtn, SIGNAL( clicked(bool)), SLOT( onOptimalAxes(bool)));
|
||||||
connect( resetBtn, SIGNAL( clicked(bool)), SLOT( onResetAxes(bool)));
|
connect( resetBtn, SIGNAL( clicked(bool)), SLOT( onResetAxes(bool)));
|
||||||
|
connect( myConsiderInternalFaces, SIGNAL( toggled(bool)),
|
||||||
|
myUseThresholdForInternalFaces, SLOT( setEnabled(bool)));
|
||||||
for ( int i = 0; i < 3; ++i )
|
for ( int i = 0; i < 3; ++i )
|
||||||
{
|
{
|
||||||
connect( myXDirSpin[i], SIGNAL(valueChanged (const QString&)),
|
connect( myXDirSpin[i], SIGNAL(valueChanged (const QString&)),
|
||||||
@ -999,6 +1010,9 @@ void StdMeshersGUI_CartesianParamCreator::retrieveParams() const
|
|||||||
myThreshold->setText( varName );
|
myThreshold->setText( varName );
|
||||||
|
|
||||||
myAddEdges->setChecked( h->GetToAddEdges() );
|
myAddEdges->setChecked( h->GetToAddEdges() );
|
||||||
|
myCreateFaces->setChecked( h->GetToCreateFaces() );
|
||||||
|
myConsiderInternalFaces->setChecked( h->GetToConsiderInternalFaces() );
|
||||||
|
myUseThresholdForInternalFaces->setChecked( h->GetToUseThresholdForInternalFaces() );
|
||||||
|
|
||||||
// grid definition
|
// grid definition
|
||||||
for ( int ax = 0; ax < 3; ++ax )
|
for ( int ax = 0; ax < 3; ++ax )
|
||||||
@ -1086,6 +1100,9 @@ QString StdMeshersGUI_CartesianParamCreator::storeParams() const
|
|||||||
h->SetVarParameter( myThreshold->text().toLatin1().constData(), "SetSizeThreshold" );
|
h->SetVarParameter( myThreshold->text().toLatin1().constData(), "SetSizeThreshold" );
|
||||||
h->SetSizeThreshold( myThreshold->text().toDouble() );
|
h->SetSizeThreshold( myThreshold->text().toDouble() );
|
||||||
h->SetToAddEdges( myAddEdges->isChecked() );
|
h->SetToAddEdges( myAddEdges->isChecked() );
|
||||||
|
h->SetToCreateFaces( myCreateFaces->isChecked() );
|
||||||
|
h->SetToConsiderInternalFaces( myConsiderInternalFaces->isChecked() );
|
||||||
|
h->SetToUseThresholdForInternalFaces( myUseThresholdForInternalFaces->isChecked() );
|
||||||
|
|
||||||
// grid
|
// grid
|
||||||
for ( int ax = 0; ax < 3; ++ax )
|
for ( int ax = 0; ax < 3; ++ax )
|
||||||
|
@ -152,6 +152,9 @@ private:
|
|||||||
QLineEdit* myName;
|
QLineEdit* myName;
|
||||||
SMESHGUI_SpinBox* myThreshold;
|
SMESHGUI_SpinBox* myThreshold;
|
||||||
QCheckBox* myAddEdges;
|
QCheckBox* myAddEdges;
|
||||||
|
QCheckBox* myCreateFaces;
|
||||||
|
QCheckBox* myConsiderInternalFaces;
|
||||||
|
QCheckBox* myUseThresholdForInternalFaces;
|
||||||
|
|
||||||
StdMeshersGUI::GridAxisTab* myAxisTabs[3];
|
StdMeshersGUI::GridAxisTab* myAxisTabs[3];
|
||||||
QGroupBox* myFixedPointGrp;
|
QGroupBox* myFixedPointGrp;
|
||||||
|
@ -580,6 +580,18 @@ this one for this mesh/sub-mesh.</translation>
|
|||||||
<source>ADD_EDGES</source>
|
<source>ADD_EDGES</source>
|
||||||
<translation>Implement Edges</translation>
|
<translation>Implement Edges</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>CREATE_FACES</source>
|
||||||
|
<translation>Create Faces</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>CONSIDER_INTERNAL_FACES</source>
|
||||||
|
<translation>Consider Shared and Internal Faces</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>USE_THRESHOLD_FOR_INTERNAL_FACES</source>
|
||||||
|
<translation>Apply Threshold to Shared / Internal Faces</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>AXIS_X</source>
|
<source>AXIS_X</source>
|
||||||
<translation>Axis X</translation>
|
<translation>Axis X</translation>
|
||||||
|
@ -240,6 +240,14 @@ void StdMeshers_CartesianParameters3D_i::SetAxesDirs(const SMESH::DirStruct& xDi
|
|||||||
coords[6] = zDir.PS.x;
|
coords[6] = zDir.PS.x;
|
||||||
coords[7] = zDir.PS.y;
|
coords[7] = zDir.PS.y;
|
||||||
coords[8] = zDir.PS.z;
|
coords[8] = zDir.PS.z;
|
||||||
|
|
||||||
|
const double* oldCoords = GetImpl()->GetAxisDirs();
|
||||||
|
bool isSame = true;
|
||||||
|
for ( int i = 0; i < 9 && isSame; ++i )
|
||||||
|
isSame = ( oldCoords[i] == coords[i] );
|
||||||
|
if ( isSame )
|
||||||
|
return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this->GetImpl()->SetAxisDirs(coords);
|
this->GetImpl()->SetAxisDirs(coords);
|
||||||
|
|
||||||
@ -283,6 +291,11 @@ void StdMeshers_CartesianParameters3D_i::GetAxesDirs(SMESH::DirStruct& xDir,
|
|||||||
void StdMeshers_CartesianParameters3D_i::SetFixedPoint(const SMESH::PointStruct& ps,
|
void StdMeshers_CartesianParameters3D_i::SetFixedPoint(const SMESH::PointStruct& ps,
|
||||||
CORBA::Boolean toUnset)
|
CORBA::Boolean toUnset)
|
||||||
{
|
{
|
||||||
|
SMESH::PointStruct oldPS;
|
||||||
|
GetFixedPoint( oldPS );
|
||||||
|
if ( oldPS.x == ps.x && oldPS.y == ps.y && oldPS.z == ps.z )
|
||||||
|
return;
|
||||||
|
|
||||||
double p[3] = { ps.x, ps.y, ps.z };
|
double p[3] = { ps.x, ps.y, ps.z };
|
||||||
GetImpl()->SetFixedPoint( p, toUnset );
|
GetImpl()->SetFixedPoint( p, toUnset );
|
||||||
|
|
||||||
@ -335,6 +348,76 @@ CORBA::Boolean StdMeshers_CartesianParameters3D_i::GetToAddEdges()
|
|||||||
return GetImpl()->GetToAddEdges();
|
return GetImpl()->GetToAddEdges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SetToConsiderInternalFaces
|
||||||
|
//purpose : Enables treatment of geom faces, either shared by solids or internal.
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void StdMeshers_CartesianParameters3D_i::SetToConsiderInternalFaces(CORBA::Boolean toTreat)
|
||||||
|
{
|
||||||
|
if ( GetToConsiderInternalFaces() == toTreat )
|
||||||
|
return;
|
||||||
|
GetImpl()->SetToConsiderInternalFaces( toTreat );
|
||||||
|
SMESH::TPythonDump() << _this() << ".SetToConsiderInternalFaces( " << toTreat << " )";
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : GetToConsiderInternalFaces
|
||||||
|
//purpose : Return true if treatment of internal geom faces is enabled
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
CORBA::Boolean StdMeshers_CartesianParameters3D_i::GetToConsiderInternalFaces()
|
||||||
|
{
|
||||||
|
return GetImpl()->GetToConsiderInternalFaces();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SetToUseThresholdForInternalFaces
|
||||||
|
//purpose : Enables applying size threshold to grid cells cut by internal geom faces.
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void StdMeshers_CartesianParameters3D_i::SetToUseThresholdForInternalFaces(CORBA::Boolean toUse)
|
||||||
|
{
|
||||||
|
if ( GetToUseThresholdForInternalFaces() == toUse )
|
||||||
|
return;
|
||||||
|
GetImpl()->SetToUseThresholdForInternalFaces( toUse );
|
||||||
|
SMESH::TPythonDump() << _this() << ".SetToUseThresholdForInternalFaces( " << toUse << " )";
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : GetToUseThresholdForInternalFaces
|
||||||
|
//purpose : Return true if applying size threshold to grid cells cut by
|
||||||
|
// internal geom faces is enabled
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
CORBA::Boolean StdMeshers_CartesianParameters3D_i::GetToUseThresholdForInternalFaces()
|
||||||
|
{
|
||||||
|
return GetImpl()->GetToUseThresholdForInternalFaces();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : SetToCreateFaces
|
||||||
|
//purpose : Enables creation of mesh faces.
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void StdMeshers_CartesianParameters3D_i::SetToCreateFaces(CORBA::Boolean toCreate)
|
||||||
|
{
|
||||||
|
if ( GetToCreateFaces() == toCreate )
|
||||||
|
return;
|
||||||
|
GetImpl()->SetToCreateFaces( toCreate );
|
||||||
|
SMESH::TPythonDump() << _this() << ".SetToCreateFaces( " << toCreate << " )";
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : GetToCreateFaces
|
||||||
|
//purpose : Check if creation of mesh faces enabled
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
CORBA::Boolean StdMeshers_CartesianParameters3D_i::GetToCreateFaces()
|
||||||
|
{
|
||||||
|
return GetImpl()->GetToCreateFaces();
|
||||||
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : IsGridBySpacing
|
//function : IsGridBySpacing
|
||||||
//purpose : Return true if the grid is defined by spacing functions and
|
//purpose : Return true if the grid is defined by spacing functions and
|
||||||
|
@ -100,7 +100,7 @@ class STDMESHERS_I_EXPORT StdMeshers_CartesianParameters3D_i:
|
|||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Enables implementation of geometrical edges into the mesh. If this feature
|
* \brief Enable implementation of geometrical edges into the mesh. If this feature
|
||||||
* is disabled, sharp edges of the shape are lost ("smoothed") in the mesh if
|
* is disabled, sharp edges of the shape are lost ("smoothed") in the mesh if
|
||||||
* they don't coincide with the grid lines
|
* they don't coincide with the grid lines
|
||||||
*/
|
*/
|
||||||
@ -108,13 +108,32 @@ class STDMESHERS_I_EXPORT StdMeshers_CartesianParameters3D_i:
|
|||||||
CORBA::Boolean GetToAddEdges();
|
CORBA::Boolean GetToAddEdges();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Return true if the grid is defined by spacing functions and
|
* Enable treatment of geom faces, either shared by solids or internal.
|
||||||
|
*/
|
||||||
|
void SetToConsiderInternalFaces(CORBA::Boolean toTreat);
|
||||||
|
CORBA::Boolean GetToConsiderInternalFaces();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Enable applying size threshold to grid cells cut by internal geom faces.
|
||||||
|
*/
|
||||||
|
void SetToUseThresholdForInternalFaces(CORBA::Boolean toUse);
|
||||||
|
CORBA::Boolean GetToUseThresholdForInternalFaces();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Enable creation of mesh faces.
|
||||||
|
*/
|
||||||
|
void SetToCreateFaces(CORBA::Boolean toCreate);
|
||||||
|
CORBA::Boolean GetToCreateFaces();
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Return true if the grid is defined by spacing functions and
|
||||||
* not by node coordinates
|
* not by node coordinates
|
||||||
*/
|
*/
|
||||||
CORBA::Boolean IsGridBySpacing(CORBA::Short axis);
|
CORBA::Boolean IsGridBySpacing(CORBA::Short axis);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Returns axes at which number of hexahedra is maximal
|
* Return axes at which number of hexahedra is maximal
|
||||||
*/
|
*/
|
||||||
void ComputeOptimalAxesDirs(GEOM::GEOM_Object_ptr shape,
|
void ComputeOptimalAxesDirs(GEOM::GEOM_Object_ptr shape,
|
||||||
CORBA::Boolean isOrthogonal,
|
CORBA::Boolean isOrthogonal,
|
||||||
@ -122,7 +141,7 @@ class STDMESHERS_I_EXPORT StdMeshers_CartesianParameters3D_i:
|
|||||||
SMESH::DirStruct& y,
|
SMESH::DirStruct& y,
|
||||||
SMESH::DirStruct& z) throw (SALOME::SALOME_Exception);
|
SMESH::DirStruct& z) throw (SALOME::SALOME_Exception);
|
||||||
/*!
|
/*!
|
||||||
* \brief Computes node coordinates by spacing functions
|
* \brief Compute node coordinates by spacing functions
|
||||||
* \param x0 - lower coordinate
|
* \param x0 - lower coordinate
|
||||||
* \param x1 - upper coordinate
|
* \param x1 - upper coordinate
|
||||||
* \param spaceFuns - space functions
|
* \param spaceFuns - space functions
|
||||||
|
Loading…
Reference in New Issue
Block a user