X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Measurements_i.cxx;h=b3e832b4543deea9a7594b0a604b37c514b2c5a7;hp=9a9d439aaeda9dd74364eeaabf7b2da9d61c2b0e;hb=27d9294f19e0a124d6d4c1949e1e3cdc749578ad;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce diff --git a/src/SMESH_I/SMESH_Measurements_i.cxx b/src/SMESH_I/SMESH_Measurements_i.cxx index 9a9d439aa..b3e832b45 100644 --- a/src/SMESH_I/SMESH_Measurements_i.cxx +++ b/src/SMESH_I/SMESH_Measurements_i.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,9 +22,14 @@ // File : SMESH_Measurements_i.cxx // Author : Pavel TELKOV, Open CASCADE S.A.S. (pavel.telkov@opencascade.com) +#ifdef WIN32 +#define NOMINMAX +#endif + #include "SMESH_Measurements_i.hxx" #include "SMESH_Gen_i.hxx" +#include "SMESH_Filter_i.hxx" #include "SMESH_PythonDump.hxx" #include "SMDS_Mesh.hxx" @@ -131,6 +136,25 @@ static bool isNodeType (SMESH::array_of_ElementType_var theTypes) return theTypes->length() > 0 && theTypes[0] == SMESH::NODE; } +static double getNumericalValue(SMESH::SMESH_IDSource_ptr theSource, + SMESH::Controls::NumericalFunctorPtr theFunctor) +{ + double value = 0; + + if ( !CORBA::is_nil( theSource ) ) { + const SMESHDS_Mesh* aMesh = getMesh( theSource ); + if ( aMesh ) { + theFunctor->SetMesh( aMesh ); + + SMESH::long_array_var anElementsId = theSource->GetIDs(); + for ( CORBA::ULong i = 0; i < anElementsId->length(); i++) { + value += theFunctor->GetValue( anElementsId[i] ); + } + } + } + return value; +} + //======================================================================= // name : MinDistance // Purpose : minimal distance between two given entities @@ -201,12 +225,12 @@ static void enlargeBoundingBox(const SMDS_MeshNode* theNode, theMeasure.node1 = theNode->GetID(); } else { - theMeasure.minX = min( theMeasure.minX, theNode->X() ); - theMeasure.maxX = max( theMeasure.maxX, theNode->X() ); - theMeasure.minY = min( theMeasure.minY, theNode->Y() ); - theMeasure.maxY = max( theMeasure.maxY, theNode->Y() ); - theMeasure.minZ = min( theMeasure.minZ, theNode->Z() ); - theMeasure.maxZ = max( theMeasure.maxZ, theNode->Z() ); + theMeasure.minX = std::min( theMeasure.minX, theNode->X() ); + theMeasure.maxX = std::max( theMeasure.maxX, theNode->X() ); + theMeasure.minY = std::min( theMeasure.minY, theNode->Y() ); + theMeasure.maxY = std::max( theMeasure.maxY, theNode->Y() ); + theMeasure.minZ = std::min( theMeasure.minZ, theNode->Z() ); + theMeasure.maxZ = std::max( theMeasure.maxZ, theNode->Z() ); } } @@ -257,3 +281,30 @@ SMESH::Measure Measurements_i::BoundingBox (const SMESH::ListOfIDSources& theSou return aMeasure; } + +//======================================================================= +// name : Length +// Purpose : sum of length of 1D elements of the source +//======================================================================= +double Measurements_i::Length(SMESH::SMESH_IDSource_ptr theSource) +{ + return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Length()) ); +} + +//======================================================================= +// name : Area +// Purpose : sum of area of 2D elements of the source +//======================================================================= +double Measurements_i::Area(SMESH::SMESH_IDSource_ptr theSource) +{ + return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Area()) ); +} + +//======================================================================= +// name : Volume +// Purpose : sum of volume of 3D elements of the source +//======================================================================= +double Measurements_i::Volume(SMESH::SMESH_IDSource_ptr theSource) +{ + return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Volume()) ); +}