mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-26 23:10:34 +05:00
IPAL54364: Add Gravity Center measurement
This commit is contained in:
parent
7a713be33b
commit
c656333fb4
@ -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
|
||||||
|
@ -28,16 +28,15 @@
|
|||||||
|
|
||||||
#include "SMESH_Measurements_i.hxx"
|
#include "SMESH_Measurements_i.hxx"
|
||||||
|
|
||||||
#include "SMESH_Gen_i.hxx"
|
|
||||||
#include "SMESH_Filter_i.hxx"
|
|
||||||
#include "SMESH_PythonDump.hxx"
|
|
||||||
|
|
||||||
#include "SMDS_Mesh.hxx"
|
|
||||||
#include "SMDS_MeshNode.hxx"
|
|
||||||
#include "SMDS_MeshElement.hxx"
|
|
||||||
#include "SMDS_ElemIterator.hxx"
|
#include "SMDS_ElemIterator.hxx"
|
||||||
|
#include "SMDS_Mesh.hxx"
|
||||||
|
#include "SMDS_MeshElement.hxx"
|
||||||
|
#include "SMDS_MeshNode.hxx"
|
||||||
#include "SMESHDS_Mesh.hxx"
|
#include "SMESHDS_Mesh.hxx"
|
||||||
|
#include "SMESH_Filter_i.hxx"
|
||||||
|
#include "SMESH_Gen_i.hxx"
|
||||||
|
#include "SMESH_MeshAlgos.hxx"
|
||||||
|
#include "SMESH_PythonDump.hxx"
|
||||||
|
|
||||||
|
|
||||||
using namespace SMESH;
|
using namespace SMESH;
|
||||||
@ -308,3 +307,45 @@ double Measurements_i::Volume(SMESH::SMESH_IDSource_ptr theSource)
|
|||||||
{
|
{
|
||||||
return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Volume()) );
|
return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Volume()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : GravityCenter
|
||||||
|
//purpose : return gravity center of the source: average coordinates of all nodes
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
SMESH::PointStruct Measurements_i::GravityCenter(SMESH::SMESH_IDSource_ptr theSource)
|
||||||
|
{
|
||||||
|
SMESH::PointStruct grCenter = { 0.,0.,0. };
|
||||||
|
const SMESHDS_Mesh* mesh = getMesh( theSource );
|
||||||
|
if ( !mesh )
|
||||||
|
return grCenter;
|
||||||
|
|
||||||
|
// unmark all nodes; visited nodes will be marked
|
||||||
|
SMESH_MeshAlgos::MarkElems( mesh->nodesIterator(), /*isMarked=*/false );
|
||||||
|
|
||||||
|
gp_XYZ sumCoord( 0,0,0 );
|
||||||
|
int nodeCount = 0;
|
||||||
|
|
||||||
|
SMDS_ElemIteratorPtr eIt = SMESH_Mesh_i::GetElements( theSource, SMESH::ALL );
|
||||||
|
while ( eIt->more() )
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement* elem = eIt->next();
|
||||||
|
for ( SMDS_NodeIteratorPtr nIt = elem->nodeIterator(); nIt->more(); )
|
||||||
|
{
|
||||||
|
const SMDS_MeshNode* n = nIt->next();
|
||||||
|
if ( !n->isMarked() )
|
||||||
|
{
|
||||||
|
sumCoord += SMESH_NodeXYZ( n );
|
||||||
|
++nodeCount;
|
||||||
|
n->setIsMarked( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sumCoord /= nodeCount;
|
||||||
|
|
||||||
|
grCenter.x = sumCoord.X();
|
||||||
|
grCenter.y = sumCoord.Y();
|
||||||
|
grCenter.z = sumCoord.Z();
|
||||||
|
|
||||||
|
return grCenter;
|
||||||
|
}
|
||||||
|
@ -67,12 +67,17 @@ namespace SMESH
|
|||||||
/*!
|
/*!
|
||||||
* sum of area of 2D elements of the source
|
* sum of area of 2D elements of the source
|
||||||
*/
|
*/
|
||||||
double Area(SMESH::SMESH_IDSource_ptr);
|
double Area(SMESH::SMESH_IDSource_ptr theSource);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* sum of volume of 3D elements of the source
|
* sum of volume of 3D elements of the source
|
||||||
*/
|
*/
|
||||||
double Volume(SMESH::SMESH_IDSource_ptr);
|
double Volume(SMESH::SMESH_IDSource_ptr theSource);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* gravity center of the source
|
||||||
|
*/
|
||||||
|
SMESH::PointStruct GravityCenter(SMESH::SMESH_IDSource_ptr theSource);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1155,6 +1155,18 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
|
|||||||
aMeasurements.UnRegister()
|
aMeasurements.UnRegister()
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
## Get gravity center of all nodes of the mesh object.
|
||||||
|
# @param obj mesh, submesh or group
|
||||||
|
# @return three components of the gravity center: x,y,z
|
||||||
|
# @ingroup l1_measurements
|
||||||
|
def GetGravityCenter(self, obj):
|
||||||
|
if isinstance(obj, Mesh): obj = obj.mesh
|
||||||
|
if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
|
||||||
|
aMeasurements = self.CreateMeasurements()
|
||||||
|
pointStruct = aMeasurements.GravityCenter(obj)
|
||||||
|
aMeasurements.UnRegister()
|
||||||
|
return pointStruct.x, pointStruct.y, pointStruct.z
|
||||||
|
|
||||||
pass # end of class smeshBuilder
|
pass # end of class smeshBuilder
|
||||||
|
|
||||||
import omniORB
|
import omniORB
|
||||||
|
Loading…
Reference in New Issue
Block a user