mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-26 17:30:35 +05:00
Fix on - Bug PAL7220: DEVELOPMENT : 3D Aspect Ratio
This commit is contained in:
parent
ca135511fb
commit
07085534b5
@ -45,6 +45,7 @@ module SMESH
|
||||
enum FunctorType
|
||||
{
|
||||
FT_AspectRatio,
|
||||
FT_AspectRatio3D,
|
||||
FT_Warping,
|
||||
FT_MinimumAngle,
|
||||
FT_Taper,
|
||||
@ -95,6 +96,7 @@ module SMESH
|
||||
};
|
||||
interface MinimumAngle : NumericalFunctor{};
|
||||
interface AspectRatio : NumericalFunctor{};
|
||||
interface AspectRatio3D : NumericalFunctor{};
|
||||
interface Warping : NumericalFunctor{};
|
||||
interface Taper : NumericalFunctor{};
|
||||
interface Skew : NumericalFunctor{};
|
||||
@ -320,6 +322,7 @@ module SMESH
|
||||
*/
|
||||
MinimumAngle CreateMinimumAngle();
|
||||
AspectRatio CreateAspectRatio();
|
||||
AspectRatio3D CreateAspectRatio3D();
|
||||
Warping CreateWarping();
|
||||
Taper CreateTaper();
|
||||
Skew CreateSkew();
|
||||
|
@ -80,6 +80,7 @@
|
||||
<popup-item item-id="6011" pos-id="" label-id="Area" icon-id="mesh_area.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6012" pos-id="" label-id="Taper" icon-id="mesh_taper.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6013" pos-id="" label-id="Aspect Ratio" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6017" pos-id="" label-id="Aspect Ratio 3D" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6014" pos-id="" label-id="Minimum angle" icon-id="mesh_angle.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6015" pos-id="" label-id="Warping" icon-id="mesh_wrap.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6016" pos-id="" label-id="Skew" icon-id="mesh_skew.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
@ -235,6 +236,8 @@
|
||||
<popup-item item-id="1134" pos-id="" label-id="Clipping" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<separator pos-id=""/>
|
||||
<submenu label-id="Control" item-id="2000" pos-id="">
|
||||
<popup-item item-id="200" pos-id="" label-id="Reset" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<separator pos-id=""/>
|
||||
<popup-item item-id="6001" pos-id="" label-id="Length" icon-id="mesh_length.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6002" pos-id="" label-id="Free Edges" icon-id="mesh_free_edges.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6003" pos-id="" label-id="Free borders" icon-id="mesh_free_edges.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
@ -242,12 +245,11 @@
|
||||
<popup-item item-id="6011" pos-id="" label-id="Area" icon-id="mesh_area.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6012" pos-id="" label-id="Taper" icon-id="mesh_taper.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6013" pos-id="" label-id="Aspect Ratio" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6017" pos-id="" label-id="Aspect Ratio 3D" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6014" pos-id="" label-id="Minimum angle" icon-id="mesh_angle.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6015" pos-id="" label-id="Warping" icon-id="mesh_wrap.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6016" pos-id="" label-id="Skew" icon-id="mesh_skew.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<separator pos-id=""/>
|
||||
<popup-item item-id="200" pos-id="" label-id="Reset" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<separator pos-id=""/>
|
||||
<popup-item item-id="201" pos-id="" label-id="Scalar Bar Properties" icon-id="" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
</submenu>
|
||||
<endsubmenu />
|
||||
@ -284,6 +286,7 @@
|
||||
<popup-item item-id="6011" pos-id="" label-id="Area" icon-id="mesh_area.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6012" pos-id="" label-id="Taper" icon-id="mesh_taper.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6013" pos-id="" label-id="Aspect Ratio" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6017" pos-id="" label-id="Aspect Ratio 3D" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6014" pos-id="" label-id="Minimum angle" icon-id="mesh_angle.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6015" pos-id="" label-id="Warping" icon-id="mesh_wrap.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6016" pos-id="" label-id="Skew" icon-id="mesh_skew.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
@ -328,6 +331,7 @@
|
||||
<popup-item item-id="6011" pos-id="" label-id="Area" icon-id="mesh_area.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6012" pos-id="" label-id="Taper" icon-id="mesh_taper.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6013" pos-id="" label-id="Aspect Ratio" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6017" pos-id="" label-id="Aspect Ratio 3D" icon-id="mesh_aspect.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6014" pos-id="" label-id="Minimum angle" icon-id="mesh_angle.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6015" pos-id="" label-id="Warping" icon-id="mesh_wrap.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
<popup-item item-id="6016" pos-id="" label-id="Skew" icon-id="mesh_skew.png" tooltip-id="" accel-id="" toggle-id="" execute-action=""/>
|
||||
@ -376,6 +380,7 @@
|
||||
<toolbutton-item item-id="6011" label-id="Area" icon-id="mesh_area.png" tooltip-id="Area" accel-id="" toggle-id="" execute-action=""/>
|
||||
<toolbutton-item item-id="6012" label-id="Taper" icon-id="mesh_taper.png" tooltip-id="Taper" accel-id="" toggle-id="" execute-action=""/>
|
||||
<toolbutton-item item-id="6013" label-id="Aspect Ratio" icon-id="mesh_aspect.png" tooltip-id="Aspect Ratio" accel-id="" toggle-id="" execute-action=""/>
|
||||
<toolbutton-item item-id="6017" label-id="Aspect Ratio 3D" icon-id="mesh_aspect.png" tooltip-id="Aspect Ratio 3D" accel-id="" toggle-id="" execute-action=""/>
|
||||
<toolbutton-item item-id="6014" label-id="Minimum angle" icon-id="mesh_angle.png" tooltip-id="Minimum angle" accel-id="" toggle-id="" execute-action=""/>
|
||||
<toolbutton-item item-id="6015" label-id="Warping" icon-id="mesh_wrap.png" tooltip-id="Warping angle" accel-id="" toggle-id="" execute-action=""/>
|
||||
<toolbutton-item item-id="6016" label-id="Skew" icon-id="mesh_skew.png" tooltip-id="Skew" accel-id="" toggle-id="" execute-action=""/>
|
||||
|
@ -31,7 +31,7 @@ VPATH=.:@srcdir@:@top_srcdir@/idl:$(top_builddir)/idl
|
||||
|
||||
@COMMENCE@
|
||||
|
||||
EXPORT_HEADERS = SMESH_Controls.hxx
|
||||
EXPORT_HEADERS = SMESH_Controls.hxx SMESH_ControlsDef.hxx
|
||||
|
||||
|
||||
# Libraries targets
|
||||
|
@ -17,7 +17,7 @@
|
||||
//
|
||||
// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
|
||||
|
||||
#include "SMESH_Controls.hxx"
|
||||
#include "SMESH_ControlsDef.hxx"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
|
@ -17,7 +17,7 @@
|
||||
//
|
||||
// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
|
||||
|
||||
#include "SMESH_Controls.hxx"
|
||||
#include "SMESH_ControlsDef.hxx"
|
||||
|
||||
#include <set>
|
||||
|
||||
@ -33,7 +33,6 @@
|
||||
#include <Geom_CylindricalSurface.hxx>
|
||||
#include <Precision.hxx>
|
||||
#include <TColgp_Array1OfXYZ.hxx>
|
||||
#include <TColgp_SequenceOfXYZ.hxx>
|
||||
#include <TColStd_MapOfInteger.hxx>
|
||||
#include <TColStd_SequenceOfAsciiString.hxx>
|
||||
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
|
||||
@ -53,7 +52,8 @@
|
||||
AUXILIARY METHODS
|
||||
*/
|
||||
|
||||
static inline double getAngle( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 )
|
||||
namespace{
|
||||
inline double getAngle( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 )
|
||||
{
|
||||
gp_Vec v1( P1 - P2 ), v2( P3 - P2 );
|
||||
|
||||
@ -61,25 +61,25 @@ static inline double getAngle( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ&
|
||||
v2.Magnitude() < gp::Resolution() ? 0 : v1.Angle( v2 );
|
||||
}
|
||||
|
||||
static inline double getArea( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 )
|
||||
inline double getArea( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 )
|
||||
{
|
||||
gp_Vec aVec1( P2 - P1 );
|
||||
gp_Vec aVec2( P3 - P1 );
|
||||
return ( aVec1 ^ aVec2 ).Magnitude() * 0.5;
|
||||
}
|
||||
|
||||
static inline double getArea( const gp_Pnt& P1, const gp_Pnt& P2, const gp_Pnt& P3 )
|
||||
inline double getArea( const gp_Pnt& P1, const gp_Pnt& P2, const gp_Pnt& P3 )
|
||||
{
|
||||
return getArea( P1.XYZ(), P2.XYZ(), P3.XYZ() );
|
||||
}
|
||||
|
||||
static inline double getDistance( const gp_XYZ& P1, const gp_XYZ& P2 )
|
||||
inline double getDistance( const gp_XYZ& P1, const gp_XYZ& P2 )
|
||||
{
|
||||
double aDist = gp_Pnt( P1 ).Distance( gp_Pnt( P2 ) );
|
||||
return aDist;
|
||||
}
|
||||
|
||||
static int getNbMultiConnection( SMDS_Mesh* theMesh, const int theId )
|
||||
int getNbMultiConnection( SMDS_Mesh* theMesh, const int theId )
|
||||
{
|
||||
if ( theMesh == 0 )
|
||||
return 0;
|
||||
@ -92,19 +92,15 @@ static int getNbMultiConnection( SMDS_Mesh* theMesh, const int theId )
|
||||
|
||||
int aResult = 0;
|
||||
SMDS_ElemIteratorPtr anIter = anEdge->nodesIterator();
|
||||
if ( anIter != 0 )
|
||||
{
|
||||
while( anIter->more() )
|
||||
{
|
||||
if ( anIter != 0 ) {
|
||||
while( anIter->more() ) {
|
||||
const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next();
|
||||
if ( aNode == 0 )
|
||||
return 0;
|
||||
SMDS_ElemIteratorPtr anElemIter = aNode->GetInverseElementIterator();
|
||||
while( anElemIter->more() )
|
||||
{
|
||||
while( anElemIter->more() ) {
|
||||
const SMDS_MeshElement* anElem = anElemIter->next();
|
||||
if ( anElem != 0 && anElem->GetType() != SMDSAbs_Edge )
|
||||
{
|
||||
if ( anElem != 0 && anElem->GetType() != SMDSAbs_Edge ) {
|
||||
int anId = anElem->GetID();
|
||||
|
||||
if ( anIter->more() ) // i.e. first node
|
||||
@ -119,6 +115,7 @@ static int getNbMultiConnection( SMDS_Mesh* theMesh, const int theId )
|
||||
return aResult;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
using namespace SMESH::Controls;
|
||||
|
||||
@ -142,9 +139,9 @@ void NumericalFunctor::SetMesh( SMDS_Mesh* theMesh )
|
||||
}
|
||||
|
||||
bool NumericalFunctor::GetPoints(const int theId,
|
||||
TColgp_SequenceOfXYZ& theRes ) const
|
||||
TSequenceOfXYZ& theRes) const
|
||||
{
|
||||
theRes.Clear();
|
||||
theRes.clear();
|
||||
|
||||
if ( myMesh == 0 )
|
||||
return false;
|
||||
@ -153,9 +150,9 @@ bool NumericalFunctor::GetPoints(const int theId,
|
||||
}
|
||||
|
||||
bool NumericalFunctor::GetPoints(const SMDS_MeshElement* anElem,
|
||||
TColgp_SequenceOfXYZ& theRes )
|
||||
TSequenceOfXYZ& theRes)
|
||||
{
|
||||
theRes.Clear();
|
||||
theRes.clear();
|
||||
|
||||
if ( anElem == 0)
|
||||
return false;
|
||||
@ -167,8 +164,9 @@ bool NumericalFunctor::GetPoints(const SMDS_MeshElement* anElem,
|
||||
while( anIter->more() )
|
||||
{
|
||||
const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next();
|
||||
if ( aNode != 0 )
|
||||
theRes.Append( gp_XYZ( aNode->X(), aNode->Y(), aNode->Z() ) );
|
||||
if ( aNode != 0 ){
|
||||
theRes.push_back( gp_XYZ( aNode->X(), aNode->Y(), aNode->Z() ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -187,7 +185,7 @@ void NumericalFunctor::SetPrecision( const long thePrecision )
|
||||
|
||||
double NumericalFunctor::GetValue( long theId )
|
||||
{
|
||||
TColgp_SequenceOfXYZ P;
|
||||
TSequenceOfXYZ P;
|
||||
if ( GetPoints( theId, P ))
|
||||
{
|
||||
double aVal = GetValue( P );
|
||||
@ -196,7 +194,6 @@ double NumericalFunctor::GetValue( long theId )
|
||||
double prec = pow( 10., (double)( myPrecision ) );
|
||||
aVal = floor( aVal * prec + 0.5 ) / prec;
|
||||
}
|
||||
|
||||
return aVal;
|
||||
}
|
||||
|
||||
@ -208,11 +205,11 @@ double NumericalFunctor::GetValue( long theId )
|
||||
Description : Functor for calculation of minimum angle
|
||||
*/
|
||||
|
||||
double MinimumAngle::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double MinimumAngle::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
double aMin;
|
||||
|
||||
if ( P.Length() == 3 )
|
||||
if ( P.size() == 3 )
|
||||
{
|
||||
double A0 = getAngle( P( 3 ), P( 1 ), P( 2 ) );
|
||||
double A1 = getAngle( P( 1 ), P( 2 ), P( 3 ) );
|
||||
@ -220,7 +217,7 @@ double MinimumAngle::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
|
||||
aMin = Min( A0, Min( A1, A2 ) );
|
||||
}
|
||||
else if ( P.Length() == 4 )
|
||||
else if ( P.size() == 4 )
|
||||
{
|
||||
double A0 = getAngle( P( 4 ), P( 1 ), P( 2 ) );
|
||||
double A1 = getAngle( P( 1 ), P( 2 ), P( 3 ) );
|
||||
@ -251,9 +248,9 @@ SMDSAbs_ElementType MinimumAngle::GetType() const
|
||||
Class : AspectRatio
|
||||
Description : Functor for calculating aspect ratio
|
||||
*/
|
||||
double AspectRatio::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double AspectRatio::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
int nbNodes = P.Length();
|
||||
int nbNodes = P.size();
|
||||
|
||||
if ( nbNodes != 3 && nbNodes != 4 )
|
||||
return 0;
|
||||
@ -307,55 +304,43 @@ SMDSAbs_ElementType AspectRatio::GetType() const
|
||||
Description : Functor for calculating aspect ratio
|
||||
*/
|
||||
|
||||
static inline double getHalfPerimeter(double theTria[3]){
|
||||
namespace{
|
||||
|
||||
inline double getHalfPerimeter(double theTria[3]){
|
||||
return (theTria[0] + theTria[1] + theTria[2])/2.0;
|
||||
}
|
||||
|
||||
static inline double getArea(double theHalfPerim, double theTria[3]){
|
||||
inline double getArea(double theHalfPerim, double theTria[3]){
|
||||
return sqrt(theHalfPerim*
|
||||
(theHalfPerim-theTria[0])*
|
||||
(theHalfPerim-theTria[1])*
|
||||
(theHalfPerim-theTria[2]));
|
||||
}
|
||||
|
||||
static inline double getVolume(double theLen[6]){
|
||||
double a2 = theLen[0]*theLen[0];
|
||||
double b2 = theLen[1]*theLen[1];
|
||||
double c2 = theLen[2]*theLen[2];
|
||||
double d2 = theLen[3]*theLen[3];
|
||||
double e2 = theLen[4]*theLen[4];
|
||||
double f2 = theLen[5]*theLen[5];
|
||||
double P = 4.0*a2*b2*d2;
|
||||
double Q = a2*(b2+d2-e2)-b2*(a2+d2-f2)-d2*(a2+b2-c2);
|
||||
double R = (b2+d2-e2)*(a2+d2-f2)*(a2+d2-f2);
|
||||
return sqrt(P-Q+R)/12.0;
|
||||
inline double getVolume(const TSequenceOfXYZ& P){
|
||||
gp_Vec aVec1( P( 2 ) - P( 1 ) );
|
||||
gp_Vec aVec2( P( 3 ) - P( 1 ) );
|
||||
gp_Vec aVec3( P( 4 ) - P( 1 ) );
|
||||
gp_Vec anAreaVec( aVec1 ^ aVec2 );
|
||||
return abs(aVec3 * anAreaVec) / 6.0;
|
||||
}
|
||||
|
||||
static inline double getHeight( const gp_Pnt& P1, const gp_Pnt& P2,
|
||||
const gp_Pnt& P3, const gp_Pnt& P4)
|
||||
inline double getMaxHeight(double theLen[6])
|
||||
{
|
||||
gp_Vec aVec1( P2.XYZ() - P1.XYZ() );
|
||||
gp_Vec aVec2( P3.XYZ() - P1.XYZ() );
|
||||
gp_Vec aNorm = aVec1 ^ aVec2;
|
||||
aNorm /= aNorm.Magnitude();
|
||||
gp_Vec aVec3( P4.XYZ() - P1.XYZ() );
|
||||
double aDist = aVec1 * aVec2;
|
||||
return fabs( aDist );
|
||||
}
|
||||
|
||||
static inline double getMaxHeight( const TColgp_SequenceOfXYZ& P )
|
||||
{
|
||||
double aHeight = getHeight(P(1),P(2),P(3),P(4));
|
||||
aHeight = max(aHeight,getHeight(P(1),P(2),P(4),P(3)));
|
||||
aHeight = max(aHeight,getHeight(P(1),P(3),P(4),P(2)));
|
||||
aHeight = max(aHeight,getHeight(P(2),P(3),P(4),P(1)));
|
||||
double aHeight = max(theLen[0],theLen[1]);
|
||||
aHeight = max(aHeight,theLen[2]);
|
||||
aHeight = max(aHeight,theLen[3]);
|
||||
aHeight = max(aHeight,theLen[4]);
|
||||
aHeight = max(aHeight,theLen[5]);
|
||||
return aHeight;
|
||||
}
|
||||
|
||||
double AspectRatio3D::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
}
|
||||
|
||||
double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
double aQuality = 0.0;
|
||||
int nbNodes = P.Length();
|
||||
int nbNodes = P.size();
|
||||
switch(nbNodes){
|
||||
case 4:{
|
||||
double aLen[6] = {
|
||||
@ -372,15 +357,204 @@ double AspectRatio3D::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
{aLen[1],aLen[3],aLen[4]}, // bde
|
||||
{aLen[2],aLen[4],aLen[5]} // cef
|
||||
};
|
||||
double aHalfPerim = getHalfPerimeter(aTria[0]);
|
||||
double anArea = getArea(aHalfPerim,aTria[0]);
|
||||
aHalfPerim = getHalfPerimeter(aTria[1]);
|
||||
anArea += getArea(aHalfPerim,aTria[1]);
|
||||
aHalfPerim = getHalfPerimeter(aTria[2]);
|
||||
anArea += getArea(aHalfPerim,aTria[2]);
|
||||
double aVolume = getVolume(aLen);
|
||||
double aHeight = getMaxHeight(P);
|
||||
aQuality = 1.0/3.0*aHeight*anArea/aVolume;
|
||||
double aSumArea = 0.0;
|
||||
double aHalfPerimeter = getHalfPerimeter(aTria[0]);
|
||||
double anArea = getArea(aHalfPerimeter,aTria[0]);
|
||||
aSumArea += anArea;
|
||||
aHalfPerimeter = getHalfPerimeter(aTria[1]);
|
||||
anArea = getArea(aHalfPerimeter,aTria[1]);
|
||||
aSumArea += anArea;
|
||||
aHalfPerimeter = getHalfPerimeter(aTria[2]);
|
||||
anArea = getArea(aHalfPerimeter,aTria[2]);
|
||||
aSumArea += anArea;
|
||||
aHalfPerimeter = getHalfPerimeter(aTria[3]);
|
||||
anArea = getArea(aHalfPerimeter,aTria[3]);
|
||||
aSumArea += anArea;
|
||||
double aVolume = getVolume(P);
|
||||
double aHeight = getMaxHeight(aLen);
|
||||
static double aCoeff = sqrt(6.0)/36.0;
|
||||
aQuality = aCoeff*aHeight*aSumArea/aVolume;
|
||||
break;
|
||||
}
|
||||
case 5:{
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 3 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 3 ),P( 4 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 4 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 3 ),P( 4 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 6:{
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 4 ),P( 6 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 4 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 5 ),P( 6 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 5 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 5 ),P( 4 ),P( 6 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 5 ),P( 4 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 8:{
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 5 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 5 ),P( 4 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 5 ),P( 7 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 5 ),P( 8 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 6 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 6 ),P( 4 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 6 ),P( 7 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 6 ),P( 8 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 6 ),P( 5 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 6 ),P( 5 ),P( 4 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 6 ),P( 5 ),P( 7 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 6 ),P( 5 ),P( 8 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 8 ),P( 1 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 8 ),P( 2 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 8 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 8 ),P( 6 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 7 ),P( 1 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 7 ),P( 2 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 7 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 7 ),P( 6 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 4 ),P( 8 ),P( 7 ),P( 1 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 4 ),P( 8 ),P( 7 ),P( 2 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 4 ),P( 8 ),P( 7 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 4 ),P( 8 ),P( 7 ),P( 6 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 4 ),P( 8 ),P( 7 ),P( 2 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 4 ),P( 5 ),P( 8 ),P( 2 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 4 ),P( 5 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 6 ),P( 7 ),P( 1 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 2 ),P( 3 ),P( 6 ),P( 4 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 5 ),P( 6 ),P( 8 ),P( 3 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 7 ),P( 8 ),P( 6 ),P( 1 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 4 ),P( 7 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
{
|
||||
gp_XYZ aXYZ[4] = {P( 3 ),P( 4 ),P( 2 ),P( 5 )};
|
||||
aQuality = max(GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4])),aQuality);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -405,9 +579,9 @@ SMDSAbs_ElementType AspectRatio3D::GetType() const
|
||||
Class : Warping
|
||||
Description : Functor for calculating warping
|
||||
*/
|
||||
double Warping::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double Warping::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
if ( P.Length() != 4 )
|
||||
if ( P.size() != 4 )
|
||||
return 0;
|
||||
|
||||
gp_XYZ G = ( P( 1 ) + P( 2 ) + P( 3 ) + P( 4 ) ) / 4;
|
||||
@ -462,9 +636,9 @@ SMDSAbs_ElementType Warping::GetType() const
|
||||
Class : Taper
|
||||
Description : Functor for calculating taper
|
||||
*/
|
||||
double Taper::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double Taper::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
if ( P.Length() != 4 )
|
||||
if ( P.size() != 4 )
|
||||
return 0;
|
||||
|
||||
// Compute taper
|
||||
@ -514,14 +688,14 @@ static inline double skewAngle( const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ
|
||||
return v1.Magnitude() < gp::Resolution() || v2.Magnitude() < gp::Resolution() ? 0 : v1.Angle( v2 );
|
||||
}
|
||||
|
||||
double Skew::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double Skew::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
if ( P.Length() != 3 && P.Length() != 4 )
|
||||
if ( P.size() != 3 && P.size() != 4 )
|
||||
return 0;
|
||||
|
||||
// Compute skew
|
||||
static double PI2 = PI / 2;
|
||||
if ( P.Length() == 3 )
|
||||
if ( P.size() == 3 )
|
||||
{
|
||||
double A0 = fabs( PI2 - skewAngle( P( 3 ), P( 1 ), P( 2 ) ) );
|
||||
double A1 = fabs( PI2 - skewAngle( P( 1 ), P( 2 ), P( 3 ) ) );
|
||||
@ -562,11 +736,11 @@ SMDSAbs_ElementType Skew::GetType() const
|
||||
Class : Area
|
||||
Description : Functor for calculating area
|
||||
*/
|
||||
double Area::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double Area::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
if ( P.Length() == 3 )
|
||||
if ( P.size() == 3 )
|
||||
return getArea( P( 1 ), P( 2 ), P( 3 ) );
|
||||
else if ( P.Length() == 4 )
|
||||
else if ( P.size() == 4 )
|
||||
return getArea( P( 1 ), P( 2 ), P( 3 ) ) + getArea( P( 1 ), P( 3 ), P( 4 ) );
|
||||
else
|
||||
return 0;
|
||||
@ -587,9 +761,9 @@ SMDSAbs_ElementType Area::GetType() const
|
||||
Class : Length
|
||||
Description : Functor for calculating length off edge
|
||||
*/
|
||||
double Length::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double Length::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
return ( P.Length() == 2 ? getDistance( P( 1 ), P( 2 ) ) : 0 );
|
||||
return ( P.size() == 2 ? getDistance( P( 1 ), P( 2 ) ) : 0 );
|
||||
}
|
||||
|
||||
double Length::GetBadRate( double Value, int /*nbNodes*/ ) const
|
||||
@ -607,7 +781,7 @@ SMDSAbs_ElementType Length::GetType() const
|
||||
Class : MultiConnection
|
||||
Description : Functor for calculating number of faces conneted to the edge
|
||||
*/
|
||||
double MultiConnection::GetValue( const TColgp_SequenceOfXYZ& P )
|
||||
double MultiConnection::GetValue( const TSequenceOfXYZ& P )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -1426,7 +1600,6 @@ static gp_XYZ getNormale( const SMDS_MeshFace* theFace )
|
||||
gp_XYZ n;
|
||||
int aNbNode = theFace->NbNodes();
|
||||
TColgp_Array1OfXYZ anArrOfXYZ(1,4);
|
||||
gp_XYZ p1, p2, p3, p4;
|
||||
SMDS_ElemIteratorPtr aNodeItr = theFace->nodesIterator();
|
||||
int i = 1;
|
||||
for ( ; aNodeItr->more() && i <= 4; i++ )
|
||||
|
@ -20,508 +20,24 @@
|
||||
#ifndef _SMESH_CONTROLS_HXX_
|
||||
#define _SMESH_CONTROLS_HXX_
|
||||
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include "SMDSAbs_ElementType.hxx"
|
||||
#include "SMDS_MeshNode.hxx"
|
||||
#include <Geom_Surface.hxx>
|
||||
#include <TColStd_SequenceOfInteger.hxx>
|
||||
#include <TColStd_MapOfInteger.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
|
||||
class SMDS_Mesh;
|
||||
class SMESHDS_Mesh;
|
||||
class SMESHDS_SubMesh;
|
||||
class gp_Pnt;
|
||||
class gp_XYZ;
|
||||
class TColgp_SequenceOfXYZ;
|
||||
class TopoDS_Shape;
|
||||
class SMDS_MeshElement;
|
||||
class SMDS_MeshFace;
|
||||
class SMDS_MeshNode;
|
||||
|
||||
namespace SMESH{
|
||||
namespace Controls{
|
||||
class Functor
|
||||
{
|
||||
public:
|
||||
~Functor(){}
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh ) = 0;
|
||||
virtual SMDSAbs_ElementType GetType() const = 0;
|
||||
};
|
||||
|
||||
class Functor;
|
||||
typedef boost::shared_ptr<Functor> FunctorPtr;
|
||||
|
||||
class NumericalFunctor: public virtual Functor{
|
||||
public:
|
||||
NumericalFunctor();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual double GetValue( long theElementId );
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints ) = 0;
|
||||
virtual SMDSAbs_ElementType GetType() const = 0;
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const = 0;
|
||||
long GetPrecision() const;
|
||||
void SetPrecision( const long thePrecision );
|
||||
|
||||
bool GetPoints (const int theId,
|
||||
TColgp_SequenceOfXYZ& theRes ) const;
|
||||
static bool GetPoints (const SMDS_MeshElement* theElem,
|
||||
TColgp_SequenceOfXYZ& theRes );
|
||||
protected:
|
||||
SMDS_Mesh* myMesh;
|
||||
long myPrecision;
|
||||
};
|
||||
class NumericalFunctor;
|
||||
typedef boost::shared_ptr<NumericalFunctor> NumericalFunctorPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : SMESH_MinimumAngle
|
||||
Description : Functor for calculation of minimum angle
|
||||
*/
|
||||
class MinimumAngle: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : AspectRatio
|
||||
Description : Functor for calculating aspect ratio
|
||||
*/
|
||||
class AspectRatio: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : AspectRatio3D
|
||||
Description : Functor for calculating aspect ratio of 3D elems.
|
||||
*/
|
||||
class AspectRatio3D: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : Warping
|
||||
Description : Functor for calculating warping
|
||||
*/
|
||||
class Warping: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
|
||||
private:
|
||||
double ComputeA( const gp_XYZ&, const gp_XYZ&, const gp_XYZ&, const gp_XYZ& ) const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : Taper
|
||||
Description : Functor for calculating taper
|
||||
*/
|
||||
class Taper: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : Skew
|
||||
Description : Functor for calculating skew in degrees
|
||||
*/
|
||||
class Skew: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : Area
|
||||
Description : Functor for calculating area
|
||||
*/
|
||||
class Area: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : Length
|
||||
Description : Functor for calculating length of edge
|
||||
*/
|
||||
class Length: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : MultiConnection
|
||||
Description : Functor for calculating number of faces conneted to the edge
|
||||
*/
|
||||
class MultiConnection: public virtual NumericalFunctor{
|
||||
public:
|
||||
virtual double GetValue( long theElementId );
|
||||
virtual double GetValue( const TColgp_SequenceOfXYZ& thePoints );
|
||||
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
PREDICATES
|
||||
*/
|
||||
/*
|
||||
Class : Predicate
|
||||
Description : Base class for all predicates
|
||||
*/
|
||||
class Predicate: public virtual Functor{
|
||||
public:
|
||||
virtual bool IsSatisfy( long theElementId ) = 0;
|
||||
virtual SMDSAbs_ElementType GetType() const = 0;
|
||||
};
|
||||
class Predicate;
|
||||
typedef boost::shared_ptr<Predicate> PredicatePtr;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Class : FreeBorders
|
||||
Description : Predicate for free borders
|
||||
*/
|
||||
class FreeBorders: public virtual Predicate{
|
||||
public:
|
||||
FreeBorders();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
|
||||
protected:
|
||||
SMDS_Mesh* myMesh;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : FreeEdges
|
||||
Description : Predicate for free Edges
|
||||
*/
|
||||
class FreeEdges: public virtual Predicate{
|
||||
public:
|
||||
FreeEdges();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
static bool IsFreeEdge( const SMDS_MeshNode** theNodes, const int theFaceId );
|
||||
typedef long TElemId;
|
||||
struct Border{
|
||||
TElemId myElemId;
|
||||
TElemId myPntId[2];
|
||||
Border(long theElemId, long thePntId1, long thePntId2);
|
||||
bool operator<(const Border& x) const;
|
||||
};
|
||||
typedef std::set<Border> TBorders;
|
||||
void GetBoreders(TBorders& theBorders);
|
||||
|
||||
protected:
|
||||
SMDS_Mesh* myMesh;
|
||||
};
|
||||
typedef boost::shared_ptr<FreeEdges> FreeEdgesPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : RangeOfIds
|
||||
Description : Predicate for Range of Ids.
|
||||
Range may be specified with two ways.
|
||||
1. Using AddToRange method
|
||||
2. With SetRangeStr method. Parameter of this method is a string
|
||||
like as "1,2,3,50-60,63,67,70-"
|
||||
*/
|
||||
class RangeOfIds: public virtual Predicate
|
||||
{
|
||||
public:
|
||||
RangeOfIds();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual bool IsSatisfy( long theNodeId );
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
virtual void SetType( SMDSAbs_ElementType theType );
|
||||
|
||||
bool AddToRange( long theEntityId );
|
||||
void GetRangeStr( TCollection_AsciiString& );
|
||||
bool SetRangeStr( const TCollection_AsciiString& );
|
||||
|
||||
protected:
|
||||
SMDS_Mesh* myMesh;
|
||||
|
||||
TColStd_SequenceOfInteger myMin;
|
||||
TColStd_SequenceOfInteger myMax;
|
||||
TColStd_MapOfInteger myIds;
|
||||
|
||||
SMDSAbs_ElementType myType;
|
||||
};
|
||||
|
||||
typedef boost::shared_ptr<RangeOfIds> RangeOfIdsPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : Comparator
|
||||
Description : Base class for comparators
|
||||
*/
|
||||
class Comparator: public virtual Predicate{
|
||||
public:
|
||||
Comparator();
|
||||
virtual ~Comparator();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual void SetMargin(double theValue);
|
||||
virtual void SetNumFunctor(NumericalFunctorPtr theFunct);
|
||||
virtual bool IsSatisfy( long theElementId ) = 0;
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
double GetMargin();
|
||||
|
||||
protected:
|
||||
double myMargin;
|
||||
NumericalFunctorPtr myFunctor;
|
||||
};
|
||||
typedef boost::shared_ptr<Comparator> ComparatorPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : LessThan
|
||||
Description : Comparator "<"
|
||||
*/
|
||||
class LessThan: public virtual Comparator{
|
||||
public:
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : MoreThan
|
||||
Description : Comparator ">"
|
||||
*/
|
||||
class MoreThan: public virtual Comparator{
|
||||
public:
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : EqualTo
|
||||
Description : Comparator "="
|
||||
*/
|
||||
class EqualTo: public virtual Comparator{
|
||||
public:
|
||||
EqualTo();
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
virtual void SetTolerance( double theTol );
|
||||
virtual double GetTolerance();
|
||||
|
||||
private:
|
||||
double myToler;
|
||||
};
|
||||
typedef boost::shared_ptr<EqualTo> EqualToPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : LogicalNOT
|
||||
Description : Logical NOT predicate
|
||||
*/
|
||||
class LogicalNOT: public virtual Predicate{
|
||||
public:
|
||||
LogicalNOT();
|
||||
virtual ~LogicalNOT();
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual void SetPredicate(PredicatePtr thePred);
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
|
||||
private:
|
||||
PredicatePtr myPredicate;
|
||||
};
|
||||
typedef boost::shared_ptr<LogicalNOT> LogicalNOTPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : LogicalBinary
|
||||
Description : Base class for binary logical predicate
|
||||
*/
|
||||
class LogicalBinary: public virtual Predicate{
|
||||
public:
|
||||
LogicalBinary();
|
||||
virtual ~LogicalBinary();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual void SetPredicate1(PredicatePtr thePred);
|
||||
virtual void SetPredicate2(PredicatePtr thePred);
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
|
||||
protected:
|
||||
PredicatePtr myPredicate1;
|
||||
PredicatePtr myPredicate2;
|
||||
};
|
||||
typedef boost::shared_ptr<LogicalBinary> LogicalBinaryPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : LogicalAND
|
||||
Description : Logical AND
|
||||
*/
|
||||
class LogicalAND: public virtual LogicalBinary{
|
||||
public:
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : LogicalOR
|
||||
Description : Logical OR
|
||||
*/
|
||||
class LogicalOR: public virtual LogicalBinary{
|
||||
public:
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : ManifoldPart
|
||||
Description : Predicate for manifold part of mesh
|
||||
*/
|
||||
class ManifoldPart: public virtual Predicate{
|
||||
public:
|
||||
|
||||
/* internal class for algorithm uses */
|
||||
class Link
|
||||
{
|
||||
public:
|
||||
Link( SMDS_MeshNode* theNode1,
|
||||
SMDS_MeshNode* theNode2 );
|
||||
~Link();
|
||||
|
||||
bool IsEqual( const ManifoldPart::Link& theLink ) const;
|
||||
bool operator<(const ManifoldPart::Link& x) const;
|
||||
|
||||
SMDS_MeshNode* myNode1;
|
||||
SMDS_MeshNode* myNode2;
|
||||
};
|
||||
|
||||
bool IsEqual( const ManifoldPart::Link& theLink1,
|
||||
const ManifoldPart::Link& theLink2 );
|
||||
|
||||
typedef std::set<ManifoldPart::Link> TMapOfLink;
|
||||
typedef std::vector<SMDS_MeshFace*> TVectorOfFacePtr;
|
||||
typedef std::vector<ManifoldPart::Link> TVectorOfLink;
|
||||
typedef std::map<SMDS_MeshFace*,int> TDataMapFacePtrInt;
|
||||
typedef std::map<ManifoldPart::Link,SMDS_MeshFace*> TDataMapOfLinkFacePtr;
|
||||
|
||||
ManifoldPart();
|
||||
~ManifoldPart();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
// inoke when all parameters already set
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
|
||||
void SetAngleTolerance( const double theAngToler );
|
||||
double GetAngleTolerance() const;
|
||||
void SetIsOnlyManifold( const bool theIsOnly );
|
||||
void SetStartElem( const long theStartElemId );
|
||||
|
||||
private:
|
||||
bool process();
|
||||
bool findConnected( const TDataMapFacePtrInt& theAllFacePtrInt,
|
||||
SMDS_MeshFace* theStartFace,
|
||||
TMapOfLink& theNonManifold,
|
||||
TColStd_MapOfInteger& theResFaces );
|
||||
bool isInPlane( const SMDS_MeshFace* theFace1,
|
||||
const SMDS_MeshFace* theFace2 );
|
||||
void expandBoundary( TMapOfLink& theMapOfBoundary,
|
||||
TVectorOfLink& theSeqOfBoundary,
|
||||
TDataMapOfLinkFacePtr& theDMapLinkFacePtr,
|
||||
TMapOfLink& theNonManifold,
|
||||
SMDS_MeshFace* theNextFace ) const;
|
||||
|
||||
void getFacesByLink( const Link& theLink,
|
||||
TVectorOfFacePtr& theFaces ) const;
|
||||
|
||||
private:
|
||||
SMDS_Mesh* myMesh;
|
||||
TColStd_MapOfInteger myMapIds;
|
||||
TColStd_MapOfInteger myMapBadGeomIds;
|
||||
TVectorOfFacePtr myAllFacePtr;
|
||||
TDataMapFacePtrInt myAllFacePtrIntDMap;
|
||||
double myAngToler;
|
||||
bool myIsOnlyManifold;
|
||||
long myStartElemId;
|
||||
|
||||
};
|
||||
typedef boost::shared_ptr<ManifoldPart> ManifoldPartPtr;
|
||||
|
||||
|
||||
/*
|
||||
Class : ElementsOnSurface
|
||||
Description : Predicate elements that lying on indicated surface
|
||||
(plane or cylinder)
|
||||
*/
|
||||
class ElementsOnSurface : public virtual Predicate {
|
||||
public:
|
||||
ElementsOnSurface();
|
||||
~ElementsOnSurface();
|
||||
virtual void SetMesh( SMDS_Mesh* theMesh );
|
||||
virtual bool IsSatisfy( long theElementId );
|
||||
virtual SMDSAbs_ElementType GetType() const;
|
||||
|
||||
void SetTolerance( const double theToler );
|
||||
double GetTolerance() const;
|
||||
void SetSurface( const TopoDS_Shape& theShape,
|
||||
const SMDSAbs_ElementType theType );
|
||||
|
||||
private:
|
||||
void process();
|
||||
void process( const SMDS_MeshElement* theElem );
|
||||
bool isOnSurface( const SMDS_MeshNode* theNode ) const;
|
||||
|
||||
private:
|
||||
SMDS_Mesh* myMesh;
|
||||
TColStd_MapOfInteger myIds;
|
||||
SMDSAbs_ElementType myType;
|
||||
Handle(Geom_Surface) mySurf;
|
||||
double myToler;
|
||||
};
|
||||
|
||||
typedef boost::shared_ptr<ElementsOnSurface> ElementsOnSurfacePtr;
|
||||
|
||||
|
||||
/*
|
||||
FILTER
|
||||
*/
|
||||
class Filter{
|
||||
public:
|
||||
Filter();
|
||||
virtual ~Filter();
|
||||
virtual void SetPredicate(PredicatePtr thePred);
|
||||
typedef std::vector<long> TIdSequence;
|
||||
virtual TIdSequence GetElementsId( SMDS_Mesh* theMesh );
|
||||
|
||||
protected:
|
||||
PredicatePtr myPredicate;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -30,10 +30,10 @@
|
||||
#include "SMESH_Actor.h"
|
||||
#include "SMESH_ActorUtils.h"
|
||||
#include "SMESH_DeviceActor.h"
|
||||
#include "SMESH_ControlsDef.hxx"
|
||||
#include "SALOME_ExtractUnstructuredGrid.h"
|
||||
|
||||
#include "QAD_Config.h"
|
||||
#include "utilities.h"
|
||||
#include <qstringlist.h>
|
||||
|
||||
#include <vtkTimeStamp.h>
|
||||
@ -69,12 +69,12 @@
|
||||
#include <vtkPlane.h>
|
||||
#include <vtkImplicitBoolean.h>
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
#ifdef _DEBUG_
|
||||
static int MYDEBUG = 0;
|
||||
static int MYDEBUGWITHFILES = 0;
|
||||
#else
|
||||
static int MYDEBUG = 0;
|
||||
static int MYDEBUGWITHFILES = 0;
|
||||
#endif
|
||||
|
||||
static int aLineWidthInc = 2;
|
||||
@ -678,6 +678,14 @@ void SMESH_Actor::SetControlMode(eControl theMode){
|
||||
myControlActor = my2DActor;
|
||||
break;
|
||||
}
|
||||
case eAspectRatio3D:
|
||||
{
|
||||
SMESH::Controls::AspectRatio3D* aControl = new SMESH::Controls::AspectRatio3D();
|
||||
aControl->SetPrecision( myControlsPrecision );
|
||||
aFunctor.reset( aControl );
|
||||
myControlActor = my3DActor;
|
||||
break;
|
||||
}
|
||||
case eMinimumAngle:
|
||||
{
|
||||
SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
|
||||
|
@ -146,7 +146,8 @@ class SMESH_Actor : public SALOME_Actor{
|
||||
bool GetCellsLabeled(){ return myIsCellsLabeled;}
|
||||
|
||||
enum eControl{eNone, eLengthEdges, eFreeBorders, eFreeEdges, eMultiConnection,
|
||||
eArea, eTaper, eAspectRatio, eMinimumAngle, eWarping, eSkew};
|
||||
eArea, eTaper, eAspectRatio, eMinimumAngle, eWarping, eSkew,
|
||||
eAspectRatio3D};
|
||||
void SetControlMode(eControl theMode);
|
||||
eControl GetControlMode(){ return myColorMode;}
|
||||
|
||||
|
@ -29,14 +29,13 @@
|
||||
|
||||
#include "SMESH_DeviceActor.h"
|
||||
#include "SMESH_ExtractGeometry.h"
|
||||
#include "SMESH_ControlsDef.hxx"
|
||||
|
||||
#include "SALOME_Transform.h"
|
||||
#include "SALOME_TransformFilter.h"
|
||||
#include "SALOME_PassThroughFilter.h"
|
||||
#include "SALOME_ExtractUnstructuredGrid.h"
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
// VTK Includes
|
||||
#include <vtkObjectFactory.h>
|
||||
#include <vtkShrinkFilter.h>
|
||||
@ -61,12 +60,12 @@
|
||||
|
||||
#include <vtkImplicitBoolean.h>
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
#ifdef _DEBUG_
|
||||
static int MYDEBUG = 0;
|
||||
static int MYDEBUGWITHFILES = 0;
|
||||
#else
|
||||
static int MYDEBUG = 0;
|
||||
static int MYDEBUGWITHFILES = 0;
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
@ -304,7 +303,7 @@ void SMESH_DeviceActor::SetExtControlMode(SMESH::Controls::FunctorPtr theFunctor
|
||||
anIdList->SetNumberOfIds(2);
|
||||
|
||||
FreeEdges::TBorders::const_iterator anIter = aBorders.begin();
|
||||
for(vtkIdType aVtkId; anIter != aBorders.end(); anIter++){
|
||||
for(; anIter != aBorders.end(); anIter++){
|
||||
const FreeEdges::Border& aBorder = *anIter;
|
||||
int aNode[2] = {
|
||||
myVisualObj->GetNodeVTKId(aBorder.myPntId[0]),
|
||||
|
@ -27,8 +27,9 @@
|
||||
|
||||
#include "SMESH_Object.h"
|
||||
#include "SMDS_Mesh.hxx"
|
||||
#include "SALOME_ExtractUnstructuredGrid.h"
|
||||
#include "SMESH_Actor.h"
|
||||
#include "SMESH_ControlsDef.hxx"
|
||||
#include "SALOME_ExtractUnstructuredGrid.h"
|
||||
|
||||
#include CORBA_SERVER_HEADER(SALOME_Exception)
|
||||
|
||||
@ -117,7 +118,6 @@ namespace{
|
||||
SMESH::log_array_var& theSeq,
|
||||
CORBA::Long theId)
|
||||
{
|
||||
const SMESH::double_array& aCoords = theSeq[theId].coords;
|
||||
const SMESH::long_array& anIndexes = theSeq[theId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
|
||||
if(3*aNbElems != anIndexes.length())
|
||||
@ -136,7 +136,6 @@ namespace{
|
||||
SMESH::log_array_var& theSeq,
|
||||
CORBA::Long theId)
|
||||
{
|
||||
const SMESH::double_array& aCoords = theSeq[theId].coords;
|
||||
const SMESH::long_array& anIndexes = theSeq[theId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
|
||||
if(4*aNbElems != anIndexes.length())
|
||||
@ -156,7 +155,6 @@ namespace{
|
||||
SMESH::log_array_var theSeq,
|
||||
CORBA::Long theId)
|
||||
{
|
||||
const SMESH::double_array& aCoords = theSeq[theId].coords;
|
||||
const SMESH::long_array& anIndexes = theSeq[theId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
|
||||
if(5*aNbElems != anIndexes.length())
|
||||
@ -177,7 +175,6 @@ namespace{
|
||||
SMESH::log_array_var& theSeq,
|
||||
CORBA::Long theId)
|
||||
{
|
||||
const SMESH::double_array& aCoords = theSeq[theId].coords;
|
||||
const SMESH::long_array& anIndexes = theSeq[theId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
|
||||
if(5*aNbElems != anIndexes.length())
|
||||
@ -198,7 +195,6 @@ namespace{
|
||||
SMESH::log_array_var& theSeq,
|
||||
CORBA::Long theId)
|
||||
{
|
||||
const SMESH::double_array& aCoords = theSeq[theId].coords;
|
||||
const SMESH::long_array& anIndexes = theSeq[theId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
|
||||
if(6*aNbElems != anIndexes.length())
|
||||
@ -220,7 +216,6 @@ namespace{
|
||||
SMESH::log_array_var& theSeq,
|
||||
CORBA::Long theId)
|
||||
{
|
||||
const SMESH::double_array& aCoords = theSeq[theId].coords;
|
||||
const SMESH::long_array& anIndexes = theSeq[theId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
|
||||
if(7*aNbElems != anIndexes.length())
|
||||
@ -243,7 +238,6 @@ namespace{
|
||||
SMESH::log_array_var& theSeq,
|
||||
CORBA::Long theId)
|
||||
{
|
||||
const SMESH::double_array& aCoords = theSeq[theId].coords;
|
||||
const SMESH::long_array& anIndexes = theSeq[theId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
|
||||
if(9*aNbElems != anIndexes.length())
|
||||
@ -406,7 +400,6 @@ void SMESH_VisualObj::buildNodePrs()
|
||||
{
|
||||
vtkPoints* aPoints = vtkPoints::New();
|
||||
createPoints( aPoints );
|
||||
int nbPoints = aPoints->GetNumberOfPoints();
|
||||
myGrid->SetPoints( aPoints );
|
||||
aPoints->Delete();
|
||||
|
||||
@ -414,6 +407,7 @@ void SMESH_VisualObj::buildNodePrs()
|
||||
|
||||
// Create cells
|
||||
/*
|
||||
int nbPoints = aPoints->GetNumberOfPoints();
|
||||
vtkIdList *anIdList = vtkIdList::New();
|
||||
anIdList->SetNumberOfIds( 1 );
|
||||
|
||||
@ -650,7 +644,6 @@ void SMESH_MeshObj::Update( int theIsClear )
|
||||
const SMESH::double_array& aCoords = aSeq[anId].coords;
|
||||
const SMESH::long_array& anIndexes = aSeq[anId].indexes;
|
||||
CORBA::Long anElemId = 0, aNbElems = aSeq[anId].number;
|
||||
SMDS_MeshElement* anElem = NULL;
|
||||
CORBA::Long aCommand = aSeq[anId].commandType;
|
||||
|
||||
switch(aCommand)
|
||||
|
@ -28,15 +28,14 @@
|
||||
|
||||
#include "SMESH_MeshEditor.hxx"
|
||||
|
||||
#include "SMESH_ControlsDef.hxx"
|
||||
|
||||
#include "SMDS_FaceOfNodes.hxx"
|
||||
#include "SMDS_VolumeTool.hxx"
|
||||
#include "SMESHDS_Group.hxx"
|
||||
#include "SMESHDS_Mesh.hxx"
|
||||
#include "SMESH_subMesh.hxx"
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
#include <TColgp_SequenceOfXYZ.hxx>
|
||||
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include <gp_Vec.hxx>
|
||||
@ -48,7 +47,10 @@
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace SMESH::Controls;
|
||||
|
||||
typedef map<const SMDS_MeshNode*, const SMDS_MeshNode*> TNodeNodeMap;
|
||||
typedef map<const SMDS_MeshNode*, list<const SMDS_MeshNode*> > TNodeOfNodeListMap;
|
||||
@ -493,7 +495,7 @@ bool SMESH_MeshEditor::Reorient (const SMDS_MeshElement * theFace)
|
||||
static double getBadRate (const SMDS_MeshElement* theElem,
|
||||
SMESH::Controls::NumericalFunctorPtr& theCrit)
|
||||
{
|
||||
TColgp_SequenceOfXYZ P;
|
||||
TSequenceOfXYZ P;
|
||||
if ( !theElem || !theCrit->GetPoints( theElem, P ))
|
||||
return 1e100;
|
||||
return theCrit->GetBadRate( theCrit->GetValue( P ), theElem->NbNodes() );
|
||||
@ -649,7 +651,7 @@ double getAngle(const SMDS_MeshElement * tr1,
|
||||
double angle = 2*PI; // bad angle
|
||||
|
||||
// get normals
|
||||
TColgp_SequenceOfXYZ P1, P2;
|
||||
TSequenceOfXYZ P1, P2;
|
||||
if ( !SMESH::Controls::NumericalFunctor::GetPoints( tr1, P1 ) ||
|
||||
!SMESH::Controls::NumericalFunctor::GetPoints( tr2, P2 ))
|
||||
return angle;
|
||||
@ -1315,13 +1317,13 @@ void centroidalSmooth(SMESHDS_Mesh * theMesh,
|
||||
nbElems++;
|
||||
|
||||
gp_XYZ elemCenter(0.,0.,0.);
|
||||
TColgp_SequenceOfXYZ aNodePoints;
|
||||
TSequenceOfXYZ aNodePoints;
|
||||
SMDS_ElemIteratorPtr itN = elem->nodesIterator();
|
||||
while ( itN->more() )
|
||||
{
|
||||
const SMDS_MeshNode* aNode = static_cast<const SMDS_MeshNode*>( itN->next() );
|
||||
gp_XYZ aP( aNode->X(), aNode->Y(), aNode->Z() );
|
||||
aNodePoints.Append( aP );
|
||||
aNodePoints.push_back( aP );
|
||||
elemCenter += aP;
|
||||
}
|
||||
double elemArea = anAreaFunc.GetValue( aNodePoints );
|
||||
@ -1453,7 +1455,7 @@ void SMESH_MeshEditor::Smooth (set<const SMDS_MeshElement*> & theElems,
|
||||
const SMDS_MeshElement* elem = (*itElem);
|
||||
if ( !elem || elem->GetType() != SMDSAbs_Face )
|
||||
continue;
|
||||
TColgp_SequenceOfXYZ aPoints;
|
||||
TSequenceOfXYZ aPoints;
|
||||
if ( aQualityFunc.GetPoints( elem, aPoints )) {
|
||||
double aValue = aQualityFunc.GetValue( aPoints );
|
||||
if ( aValue > maxRatio )
|
||||
|
@ -292,13 +292,11 @@ namespace{
|
||||
switch(theCommandID){
|
||||
case 1134:{
|
||||
SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
|
||||
SMESHGUI_ClippingDlg *aDlg =
|
||||
new SMESHGUI_ClippingDlg(QAD_Application::getDesktop(),"",false);
|
||||
return;
|
||||
}
|
||||
case 1133:{
|
||||
SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog();
|
||||
SMESHGUI_TransparencyDlg *aDlg =
|
||||
new SMESHGUI_TransparencyDlg(QAD_Application::getDesktop(),"",false);
|
||||
return;
|
||||
}}
|
||||
@ -530,6 +528,10 @@ namespace{
|
||||
aTitle = QObject::tr( "ASPECTRATIO_ELEMENTS" );
|
||||
aControl = SMESH_Actor::eAspectRatio;
|
||||
break;
|
||||
case 6017:
|
||||
aTitle = QObject::tr( "ASPECTRATIO_3D_ELEMENTS" );
|
||||
aControl = SMESH_Actor::eAspectRatio3D;
|
||||
break;
|
||||
case 6014:
|
||||
aTitle = QObject::tr( "MINIMUMANGLE_ELEMENTS" );
|
||||
aControl = SMESH_Actor::eMinimumAngle;
|
||||
@ -1076,7 +1078,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_NodesDlg *aDlg = new SMESHGUI_NodesDlg(parent, "", Sel);
|
||||
new SMESHGUI_NodesDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1092,7 +1094,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if ( myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK )
|
||||
{
|
||||
EmitSignalDeactivateDialog();
|
||||
SMESHGUI_FilterDlg *aDlg = new SMESHGUI_FilterDlg( parent, SMESH::EDGE );
|
||||
new SMESHGUI_FilterDlg( parent, SMESH::EDGE );
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1108,7 +1110,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
|
||||
if(checkLock(aStudy)) break;
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
|
||||
SMESHGUI_MoveNodesDlg *aDlg = new SMESHGUI_MoveNodesDlg( parent, Sel );
|
||||
new SMESHGUI_MoveNodesDlg( parent, Sel );
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1216,7 +1218,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_AddSubMeshDlg *aDlg = new SMESHGUI_AddSubMeshDlg(parent, "", Sel);
|
||||
new SMESHGUI_AddSubMeshDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1231,7 +1233,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if(checkLock(aStudy)) break;
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_InitMeshDlg *aDlg = new SMESHGUI_InitMeshDlg(parent, "", Sel);
|
||||
new SMESHGUI_InitMeshDlg(parent, "", Sel);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1240,7 +1242,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if(checkLock(aStudy)) break;
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_EditHypothesesDlg *aDlg = new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
||||
new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1249,7 +1251,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if(checkLock(aStudy)) break;
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_EditHypothesesDlg *aDlg = new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
||||
new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1258,7 +1260,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if(checkLock(aStudy)) break;
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_EditHypothesesDlg *aDlg = new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
||||
new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1331,7 +1333,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_SmoothingDlg *aDlg = new SMESHGUI_SmoothingDlg(parent, "", Sel);
|
||||
new SMESHGUI_SmoothingDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1346,7 +1348,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_ExtrusionDlg *aDlg = new SMESHGUI_ExtrusionDlg(parent, "", Sel);
|
||||
new SMESHGUI_ExtrusionDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1361,7 +1363,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_RevolutionDlg *aDlg = new SMESHGUI_RevolutionDlg(parent, "", Sel);
|
||||
new SMESHGUI_RevolutionDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1544,7 +1546,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
for ( ; It.More(); It.Next() ) {
|
||||
Sel->ClearIObjects();
|
||||
Sel->AddIObject( It.Value() );
|
||||
SMESHGUI_MeshInfosDlg *aDlg = new SMESHGUI_MeshInfosDlg(parent, "", false);
|
||||
new SMESHGUI_MeshInfosDlg(parent, "", false);
|
||||
}
|
||||
// restore selection
|
||||
Sel->ClearIObjects();
|
||||
@ -1552,7 +1554,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
Sel->AddIObject( It.Value() );
|
||||
}
|
||||
else
|
||||
SMESHGUI_MeshInfosDlg *aDlg = new SMESHGUI_MeshInfosDlg(parent, "", false);
|
||||
new SMESHGUI_MeshInfosDlg(parent, "", false);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1567,7 +1569,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
for ( ; It.More(); It.Next() ) {
|
||||
Sel->ClearIObjects();
|
||||
Sel->AddIObject( It.Value() );
|
||||
SMESHGUI_StandardMeshInfosDlg *aDlg = new SMESHGUI_StandardMeshInfosDlg(parent, "", false);
|
||||
new SMESHGUI_StandardMeshInfosDlg(parent, "", false);
|
||||
}
|
||||
// restore selection
|
||||
Sel->ClearIObjects();
|
||||
@ -1575,7 +1577,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
Sel->AddIObject( It.Value() );
|
||||
}
|
||||
else
|
||||
SMESHGUI_StandardMeshInfosDlg *aDlg = new SMESHGUI_StandardMeshInfosDlg(parent, "", false);
|
||||
new SMESHGUI_StandardMeshInfosDlg(parent, "", false);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1825,7 +1827,6 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
type = SMDSAbs_Volume; nbNodes = 8; break;
|
||||
default:;
|
||||
}
|
||||
SMESHGUI_AddMeshElementDlg *aDlg =
|
||||
new SMESHGUI_AddMeshElementDlg(parent, "", Sel, type, nbNodes);
|
||||
}
|
||||
else {
|
||||
@ -1842,7 +1843,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_RemoveNodesDlg *aDlg = new SMESHGUI_RemoveNodesDlg(parent, "", Sel);
|
||||
new SMESHGUI_RemoveNodesDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1857,7 +1858,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_RemoveElementsDlg *aDlg = new SMESHGUI_RemoveElementsDlg(parent, "", Sel);
|
||||
new SMESHGUI_RemoveElementsDlg(parent, "", Sel);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1873,7 +1874,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_RenumberingDlg *aDlg = new SMESHGUI_RenumberingDlg(parent, "", Sel, 0);
|
||||
new SMESHGUI_RenumberingDlg(parent, "", Sel, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1889,7 +1890,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_RenumberingDlg *aDlg = new SMESHGUI_RenumberingDlg(parent, "", Sel, 1);
|
||||
new SMESHGUI_RenumberingDlg(parent, "", Sel, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1905,7 +1906,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_TranslationDlg *aDlg = new SMESHGUI_TranslationDlg(parent, "", Sel);
|
||||
new SMESHGUI_TranslationDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1920,7 +1921,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_RotationDlg *aDlg = new SMESHGUI_RotationDlg(parent, "", Sel);
|
||||
new SMESHGUI_RotationDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1935,7 +1936,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_SymmetryDlg *aDlg = new SMESHGUI_SymmetryDlg(parent, "", Sel);
|
||||
new SMESHGUI_SymmetryDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1950,7 +1951,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_SewingDlg *aDlg = new SMESHGUI_SewingDlg(parent, "", Sel);
|
||||
new SMESHGUI_SewingDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1965,7 +1966,7 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
||||
EmitSignalDeactivateDialog();
|
||||
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
||||
SMESHGUI_MergeNodesDlg *aDlg = new SMESHGUI_MergeNodesDlg(parent, "", Sel);
|
||||
new SMESHGUI_MergeNodesDlg(parent, "", Sel);
|
||||
}
|
||||
else {
|
||||
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
||||
@ -1980,7 +1981,6 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
{
|
||||
if(checkLock(aStudy)) break;
|
||||
EmitSignalDeactivateDialog();
|
||||
SMESHGUI_CreateHypothesesDlg *aDlg =
|
||||
new SMESHGUI_CreateHypothesesDlg (parent, "", FALSE, false);
|
||||
break;
|
||||
}
|
||||
@ -1988,7 +1988,6 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
{
|
||||
if(checkLock(aStudy)) break;
|
||||
EmitSignalDeactivateDialog();
|
||||
SMESHGUI_CreateHypothesesDlg *aDlg =
|
||||
new SMESHGUI_CreateHypothesesDlg (parent, "", FALSE, true);
|
||||
break;
|
||||
}
|
||||
@ -2007,7 +2006,8 @@ bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
||||
}
|
||||
break;
|
||||
|
||||
case 6016: // CONTROLS
|
||||
case 6017: // CONTROLS
|
||||
case 6016:
|
||||
case 6015:
|
||||
case 6014:
|
||||
case 6013:
|
||||
@ -2332,13 +2332,13 @@ bool SMESHGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString
|
||||
if ( mi && mi->popup() ) {
|
||||
int prType = ac->GetRepresentation();
|
||||
// Display Mode / Wireframe
|
||||
if(!aNbFaces && !aNbVolumes && !aNbEdges){
|
||||
if(aNbVolumes == 0 && aNbFaces == 0 && aNbEdges == 0){
|
||||
mi->popup()->removeItem( 211 );
|
||||
}else{
|
||||
mi->popup()->setItemChecked( 211, prType == SMESH_Actor::eEdge );
|
||||
}
|
||||
// Display Mode / Shading
|
||||
if(!aNbFaces && !aNbVolumes){
|
||||
if(aNbFaces == 0 && aNbVolumes == 0){
|
||||
mi->popup()->removeItem( 212 );
|
||||
}else{
|
||||
mi->popup()->setItemChecked( 212, prType == SMESH_Actor::eSurface );
|
||||
@ -2374,6 +2374,8 @@ bool SMESHGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString
|
||||
mi->popup()->setItemChecked( 6012, true ); break;
|
||||
case SMESH_Actor::eAspectRatio:
|
||||
mi->popup()->setItemChecked( 6013, true ); break;
|
||||
case SMESH_Actor::eAspectRatio3D:
|
||||
mi->popup()->setItemChecked( 6017, true ); break;
|
||||
case SMESH_Actor::eMinimumAngle:
|
||||
mi->popup()->setItemChecked( 6014, true ); break;
|
||||
case SMESH_Actor::eWarping:
|
||||
@ -2387,12 +2389,12 @@ bool SMESHGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString
|
||||
break;
|
||||
}
|
||||
TVisualObjPtr aVisualObj = ac->GetObject();
|
||||
if(!aNbEdges){
|
||||
if(aNbEdges == 0){
|
||||
mi->popup()->removeItem( 6001 );
|
||||
mi->popup()->removeItem( 6003 );
|
||||
mi->popup()->removeItem( 6004 );
|
||||
}
|
||||
if(!aNbFaces){
|
||||
if(aNbFaces == 0){
|
||||
mi->popup()->removeItem( 6002 );
|
||||
mi->popup()->removeItem( 6011 );
|
||||
mi->popup()->removeItem( 6012 );
|
||||
@ -2401,7 +2403,10 @@ bool SMESHGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString
|
||||
mi->popup()->removeItem( 6015 );
|
||||
mi->popup()->removeItem( 6016 );
|
||||
}
|
||||
if(!aNbFaces && !aNbEdges)
|
||||
if(aNbVolumes == 0){
|
||||
mi->popup()->removeItem( 6017 );
|
||||
}
|
||||
if(aNbFaces == 0 && aNbEdges == 0 && aNbVolumes == 0)
|
||||
popup->removeItem( 2000 ); // Scalar Bar
|
||||
}
|
||||
}
|
||||
|
@ -1107,6 +1107,9 @@ msgstr "Taper"
|
||||
msgid "ASPECTRATIO_ELEMENTS"
|
||||
msgstr "Aspect Ratio"
|
||||
|
||||
msgid "ASPECTRATIO_3D_ELEMENTS"
|
||||
msgstr "Aspect Ratio 3D"
|
||||
|
||||
msgid "MINIMUMANGLE_ELEMENTS"
|
||||
msgstr "Minimum Angle"
|
||||
|
||||
|
@ -334,6 +334,22 @@ FunctorType AspectRatio_i::GetFunctorType()
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Class : AspectRatio3D
|
||||
Description : Functor for calculating aspect ratio 3D
|
||||
*/
|
||||
AspectRatio3D_i::AspectRatio3D_i()
|
||||
{
|
||||
myNumericalFunctorPtr.reset( new Controls::AspectRatio3D() );
|
||||
myFunctorPtr = myNumericalFunctorPtr;
|
||||
}
|
||||
|
||||
FunctorType AspectRatio3D_i::GetFunctorType()
|
||||
{
|
||||
return SMESH::FT_AspectRatio3D;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Class : Warping_i
|
||||
Description : Functor for calculating warping
|
||||
@ -974,6 +990,14 @@ AspectRatio_ptr FilterManager_i::CreateAspectRatio()
|
||||
}
|
||||
|
||||
|
||||
AspectRatio3D_ptr FilterManager_i::CreateAspectRatio3D()
|
||||
{
|
||||
SMESH::AspectRatio3D_i* aServant = new SMESH::AspectRatio3D_i();
|
||||
SMESH::AspectRatio3D_var anObj = aServant->_this();
|
||||
return anObj._retn();
|
||||
}
|
||||
|
||||
|
||||
Warping_ptr FilterManager_i::CreateWarping()
|
||||
{
|
||||
SMESH::Warping_i* aServant = new SMESH::Warping_i();
|
||||
@ -1405,6 +1429,9 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
|
||||
case SMESH::FT_AspectRatio:
|
||||
aFunctor = aFilterMgr->CreateAspectRatio();
|
||||
break;
|
||||
case SMESH::FT_AspectRatio3D:
|
||||
aFunctor = aFilterMgr->CreateAspectRatio3D();
|
||||
break;
|
||||
case SMESH::FT_Warping:
|
||||
aFunctor = aFilterMgr->CreateWarping();
|
||||
break;
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include <TopoDS_Shape.hxx>
|
||||
|
||||
#include "SALOME_GenericObj_i.hh"
|
||||
#include "SMESH_Controls.hxx"
|
||||
#include "SMESH_ControlsDef.hxx"
|
||||
|
||||
class SMESHDS_Mesh;
|
||||
|
||||
@ -141,6 +141,19 @@ public:
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : AspectRatio3D_i
|
||||
Description : Functor for calculating aspect ratio for 3D
|
||||
*/
|
||||
class AspectRatio3D_i: public virtual POA_SMESH::AspectRatio3D,
|
||||
public virtual NumericalFunctor_i
|
||||
{
|
||||
public:
|
||||
AspectRatio3D_i();
|
||||
FunctorType GetFunctorType();
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Class : Warping_i
|
||||
Description : Functor for calculating warping
|
||||
@ -583,6 +596,7 @@ public:
|
||||
FilterManager_i();
|
||||
MinimumAngle_ptr CreateMinimumAngle();
|
||||
AspectRatio_ptr CreateAspectRatio();
|
||||
AspectRatio3D_ptr CreateAspectRatio3D();
|
||||
Warping_ptr CreateWarping();
|
||||
Taper_ptr CreateTaper();
|
||||
Skew_ptr CreateSkew();
|
||||
|
@ -41,18 +41,18 @@
|
||||
#include "OpUtil.hxx"
|
||||
|
||||
#include "TCollection_AsciiString.hxx"
|
||||
#include <TColStd_MapOfInteger.hxx>
|
||||
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
|
||||
#include <TColStd_SequenceOfInteger.hxx>
|
||||
#include "SMESHDS_Command.hxx"
|
||||
#include "SMESHDS_CommandType.hxx"
|
||||
#include "SMESH_MeshEditor_i.hxx"
|
||||
#include "SMESH_Gen_i.hxx"
|
||||
#include "DriverMED_R_SMESHDS_Mesh.h"
|
||||
|
||||
#include <TColStd_MapOfInteger.hxx>
|
||||
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
|
||||
#include <TColStd_SequenceOfInteger.hxx>
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
// _CS_gbo_050504 Ajout explicite du sstream pour ostringstream
|
||||
#include <sstream>
|
||||
|
||||
#ifdef _DEBUG_
|
||||
|
Loading…
Reference in New Issue
Block a user