0020948: EDF 1468 SMESH: Histogram of the quality controls

+  virtual void SMESH_Actor::UpdateDistribution() = 0;

0020944: EDF 1464 SMESH: detection of over-constrained elements
+    class  OverConstrainedVolume: public Predicate
+    class  OverConstrainedFace: public Predicate
This commit is contained in:
eap 2010-11-19 16:24:47 +00:00
parent cddf6847bc
commit ebe0faaad0
3 changed files with 40 additions and 4 deletions

View File

@ -779,6 +779,10 @@ SetControlMode(eControl theMode,
myFunctor.reset(new SMESH::Controls::BareBorderFace()); myFunctor.reset(new SMESH::Controls::BareBorderFace());
myControlActor = my2DActor; myControlActor = my2DActor;
break; break;
case eOverConstrainedFace:
myFunctor.reset(new SMESH::Controls::OverConstrainedFace());
myControlActor = my2DActor;
break;
case eMultiConnection: case eMultiConnection:
myFunctor.reset(new SMESH::Controls::MultiConnection()); myFunctor.reset(new SMESH::Controls::MultiConnection());
myControlActor = my1DActor; myControlActor = my1DActor;
@ -849,6 +853,12 @@ SetControlMode(eControl theMode,
myControlActor = my3DActor; myControlActor = my3DActor;
break; break;
} }
case eOverConstrainedVolume:
{
myFunctor.reset(new SMESH::Controls::OverConstrainedVolume());
myControlActor = my3DActor;
break;
}
case eMinimumAngle: case eMinimumAngle:
{ {
SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle(); SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
@ -890,20 +900,22 @@ SetControlMode(eControl theMode,
my1DExtActor->SetExtControlMode(myFunctor); my1DExtActor->SetExtControlMode(myFunctor);
break; break;
case eFreeFaces: case eFreeFaces:
my2DExtActor->SetExtControlMode(myFunctor);
break;
case eBareBorderFace: case eBareBorderFace:
case eOverConstrainedFace:
my2DExtActor->SetExtControlMode(myFunctor); my2DExtActor->SetExtControlMode(myFunctor);
break; break;
case eBareBorderVolume: case eBareBorderVolume:
case eOverConstrainedVolume:
my3DExtActor->SetExtControlMode(myFunctor); my3DExtActor->SetExtControlMode(myFunctor);
break; break;
case eLength2D: case eLength2D:
case eMultiConnection2D: case eMultiConnection2D:
my1DExtActor->SetExtControlMode(myFunctor,myScalarBarActor,myLookupTable); my1DExtActor->SetExtControlMode(myFunctor,myScalarBarActor,myLookupTable);
UpdateDistribution();
break; break;
default: default:
myControlActor->SetControlMode(myFunctor,myScalarBarActor,myLookupTable); myControlActor->SetControlMode(myFunctor,myScalarBarActor,myLookupTable);
UpdateDistribution();
} }
} }
@ -1268,9 +1280,11 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
break; break;
case eFreeFaces: case eFreeFaces:
case eBareBorderFace: case eBareBorderFace:
case eOverConstrainedFace:
my2DExtActor->VisibilityOn(); my2DExtActor->VisibilityOn();
break; break;
case eBareBorderVolume: case eBareBorderVolume:
case eOverConstrainedVolume:
my3DExtActor->VisibilityOn(); my3DExtActor->VisibilityOn();
break; break;
case eLength2D: case eLength2D:
@ -1998,7 +2012,7 @@ void SMESH_ActorDef::UpdateScalarBar()
myScalarBarActor->SetDistributionColoringType(coloringType); myScalarBarActor->SetDistributionColoringType(coloringType);
QColor distributionColor = mgr->colorValue("SMESH", "distribution_color", QColor distributionColor = mgr->colorValue("SMESH", "distribution_color",
QColor(255, 255, 255)); QColor(255, 255, 255));
double rgb[3]; double rgb[3];
rgb[0]= distributionColor.red()/255.; rgb[0]= distributionColor.red()/255.;
rgb[1]= distributionColor.green()/255.; rgb[1]= distributionColor.green()/255.;
@ -2008,6 +2022,25 @@ void SMESH_ActorDef::UpdateScalarBar()
} }
void SMESH_ActorDef::UpdateDistribution()
{
if(SMESH::Controls::NumericalFunctor* fun =
dynamic_cast<SMESH::Controls::NumericalFunctor*>(myFunctor.get()))
{
int nbIntervals = myScalarBarActor->GetMaximumNumberOfColors();
std::vector<int> nbEvents;
std::vector<double> funValues;
SMESH_VisualObjDef::TEntityList elems;
if ( ! dynamic_cast<SMESH_MeshObj*>(myVisualObj.get()))
dynamic_cast<SMESH_VisualObjDef*>(myVisualObj.get())->GetEntities( fun->GetType(), elems );
std::vector<int> elemIds;
for ( SMESH_VisualObjDef::TEntityList::iterator e = elems.begin(); e != elems.end(); ++e)
elemIds.push_back( (*e)->GetID());
fun->GetHistogram(nbIntervals, nbEvents, funValues, elemIds);
myScalarBarActor->SetDistribution(nbEvents);
}
}
void SMESH_ActorDef::SetQuadratic2DRepresentation(EQuadratic2DRepresentation theMode) void SMESH_ActorDef::SetQuadratic2DRepresentation(EQuadratic2DRepresentation theMode)
{ {
switch(theMode) { switch(theMode) {

View File

@ -123,7 +123,8 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
enum eControl{eNone, eLength, eLength2D, eFreeBorders, eFreeEdges, eFreeNodes, enum eControl{eNone, eLength, eLength2D, eFreeBorders, eFreeEdges, eFreeNodes,
eFreeFaces, eMultiConnection, eArea, eTaper, eAspectRatio, eFreeFaces, eMultiConnection, eArea, eTaper, eAspectRatio,
eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D, eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D,
eMaxElementLength2D, eMaxElementLength3D, eBareBorderFace, eBareBorderVolume}; eMaxElementLength2D, eMaxElementLength3D, eBareBorderFace, eBareBorderVolume,
eOverConstrainedFace, eOverConstrainedVolume};
virtual void SetControlMode(eControl theMode) = 0; virtual void SetControlMode(eControl theMode) = 0;
virtual eControl GetControlMode() = 0; virtual eControl GetControlMode() = 0;
virtual SMESH::Controls::FunctorPtr GetFunctor() = 0; virtual SMESH::Controls::FunctorPtr GetFunctor() = 0;
@ -141,6 +142,7 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
virtual long GetControlsPrecision() const = 0; virtual long GetControlsPrecision() const = 0;
virtual void UpdateScalarBar() = 0; virtual void UpdateScalarBar() = 0;
virtual void UpdateDistribution() = 0;
}; };

View File

@ -196,6 +196,7 @@ class SMESH_ActorDef : public SMESH_Actor
virtual long GetControlsPrecision() const { return myControlsPrecision; } virtual long GetControlsPrecision() const { return myControlsPrecision; }
virtual void UpdateScalarBar(); virtual void UpdateScalarBar();
virtual void UpdateDistribution();
virtual void SetQuadratic2DRepresentation(EQuadratic2DRepresentation); virtual void SetQuadratic2DRepresentation(EQuadratic2DRepresentation);