mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-14 02:30:33 +05:00
0020943: EDF 1463 SMESH: additional fonctionnality to the feature 20749
+ class BareBorderVolume: public Predicate + class BareBorderFace: public Predicate
This commit is contained in:
parent
8a18df0d9a
commit
3b2ddf07cc
BIN
doc/salome/gui/SMESH/images/bare_border_faces_smpl.png
Normal file
BIN
doc/salome/gui/SMESH/images/bare_border_faces_smpl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.9 KiB |
BIN
doc/salome/gui/SMESH/images/bare_border_volumes_smpl.png
Normal file
BIN
doc/salome/gui/SMESH/images/bare_border_volumes_smpl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.4 KiB |
@ -32,6 +32,7 @@ Edge quality controls:
|
||||
Face quality controls:
|
||||
<ul>
|
||||
<li>\subpage free_faces_page "Free faces"</li>
|
||||
<li>\subpage bare_border_faces_page "Bare border faces"</li>
|
||||
<li>\subpage length_2d_page "Length 2D"</li>
|
||||
<li>\subpage borders_at_multi_connection_2d_page "Borders at multi-connection 2D"</li>
|
||||
<li>\subpage area_page "Area"</li>
|
||||
@ -48,6 +49,7 @@ Volume quality controls:
|
||||
<li>\subpage aspect_ratio_3d_page "Aspect ratio 3D"</li>
|
||||
<li>\subpage volume_page "Volume"</li>
|
||||
<li>\subpage max_element_length_3d_page "Max element length 3D"</li>
|
||||
<li>\subpage bare_border_volumes_page "Bare border volumes"</li>
|
||||
</ul>
|
||||
|
||||
*/
|
||||
|
15
doc/salome/gui/SMESH/input/bare_border_face.doc
Normal file
15
doc/salome/gui/SMESH/input/bare_border_face.doc
Normal file
@ -0,0 +1,15 @@
|
||||
/*!
|
||||
|
||||
\page bare_border_faces_page Bare border faces
|
||||
|
||||
This mesh quality control highlights the faces having the border not
|
||||
shared with other faces (free border) and missing an edge based on
|
||||
nodes of the free border. The faces with bare border are shown with a
|
||||
color different from the color of shared faces.
|
||||
|
||||
\image html bare_border_faces_smpl.png
|
||||
|
||||
\sa A sample TUI Script making a group of faces highlighted in the
|
||||
picture is \ref tui_bare_border_faces "Bare border faces Control".
|
||||
|
||||
*/
|
15
doc/salome/gui/SMESH/input/bare_border_volumes.doc
Normal file
15
doc/salome/gui/SMESH/input/bare_border_volumes.doc
Normal file
@ -0,0 +1,15 @@
|
||||
/*!
|
||||
|
||||
\page bare_border_volumes_page Bare border volumes
|
||||
|
||||
This mesh quality control highlights the volumes having the border not
|
||||
shared with other volumes (free border) and missing a face based on
|
||||
nodes of the free border. The volumes with bare border are shown with a
|
||||
color different from the color of shared volumes.
|
||||
|
||||
\image html bare_border_volumes_smpl.png
|
||||
|
||||
\sa A sample TUI Script making a group of volumes highlighted in the
|
||||
picture is \ref tui_bare_border_volumes "Bare border volumes Control".
|
||||
|
||||
*/
|
@ -144,7 +144,10 @@ Additional criteria to select mesh <b>Faces</b> are the following:
|
||||
one element of mesh only. See also a
|
||||
\ref free_edges_page "Free Edges quality control".
|
||||
</li><li>
|
||||
<b>Free faces</b> selects 3D mesh elements wich belong to less than two volumes.
|
||||
<b>Free faces</b> selects 2D mesh elements wich belong to less than two volumes.
|
||||
</li><li>
|
||||
<b>Faces with bare border</b> selects 2D mesh elements having a free border without an edge on it.
|
||||
See also \ref bare_border_faces_page "Bare border faces quality control".
|
||||
</li><li>
|
||||
<b>Borders at Multi-Connections 2D</b> selects cells consisting of edges belonging to
|
||||
several elements of mesh. The number of mesh elements should be more, less or equal
|
||||
@ -181,6 +184,9 @@ diagonals with a value of length, which is more, less or equal
|
||||
</li><li>
|
||||
<b>Bad oriented volume</b> selects mesh volumes, which are incorrectly oriented from
|
||||
the point of view of MED convention.
|
||||
</li><li>
|
||||
<b>Volumes with bare border</b> selects 3D mesh elements having a free border without a face on it.
|
||||
See also \ref bare_border_volumes_page "Bare border volumes quality control".
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -309,6 +309,54 @@ aGroup.Add(aFaceIds)
|
||||
salome.sg.updateObjBrowser(1)
|
||||
\endcode
|
||||
|
||||
\section tui_bare_border_faces Bare border faces
|
||||
|
||||
\code
|
||||
from smesh import *
|
||||
SetCurrentStudy(salome.myStudy)
|
||||
|
||||
box = geompy.MakeBoxDXDYDZ(100, 100, 100)
|
||||
geompy.addToStudy( box, "box" )
|
||||
|
||||
mesh = smesh.Mesh(box)
|
||||
mesh.Segment().NumberOfSegments(3)
|
||||
mesh.Quadrangle()
|
||||
mesh.Compute()
|
||||
|
||||
# remove 2 faces
|
||||
allFaces = mesh.GetElementsByType(FACE)
|
||||
mesh.RemoveElements( allFaces[0:2])
|
||||
|
||||
bareGroup = mesh.MakeGroup("bare faces", FACE, FT_BareBorderFace)
|
||||
assert(bareGroup.Size() == 3)
|
||||
\endcode
|
||||
|
||||
\section tui_bare_border_volumes Bare border volumes
|
||||
|
||||
\code
|
||||
from smesh import *
|
||||
SetCurrentStudy(salome.myStudy)
|
||||
|
||||
box = geompy.MakeBoxDXDYDZ(100, 30, 10)
|
||||
# the smallest face of the box
|
||||
face = geompy.SubShapeAllSorted( box, geompy.ShapeType["FACE"])[0]
|
||||
|
||||
geompy.addToStudy( box, "box" )
|
||||
geompy.addToStudyInFather( box, face, "face" )
|
||||
|
||||
mesh = Mesh(box)
|
||||
mesh.AutomaticHexahedralization();
|
||||
|
||||
# remove half of mesh faces from the smallest face
|
||||
faceFaces = mesh.GetSubMeshElementsId(face)
|
||||
faceToRemove = faceFaces[: len(faceFaces)/2]
|
||||
mesh.RemoveElements( faceToRemove )
|
||||
|
||||
# make a group of volumes missing the removed faces
|
||||
bareGroup = mesh.MakeGroup("bare volumes", VOLUME, FT_BareBorderVolume)
|
||||
assert(bareGroup.Size() == len( faceToRemove))
|
||||
\endcode
|
||||
|
||||
\section tui_length_2d Length 2D
|
||||
|
||||
\code
|
||||
|
@ -64,6 +64,8 @@ module SMESH
|
||||
FT_LyingOnGeom,
|
||||
FT_RangeOfIds,
|
||||
FT_BadOrientedVolume,
|
||||
FT_BareBorderVolume,
|
||||
FT_BareBorderFace,
|
||||
FT_LinearOrQuadratic,
|
||||
FT_GroupColor,
|
||||
FT_ElemGeomType,
|
||||
@ -87,6 +89,7 @@ module SMESH
|
||||
};
|
||||
typedef sequence<HistogramRectangle> Histogram;
|
||||
|
||||
|
||||
/*!
|
||||
* Base interface for all functors ( i.e. numerical functors and predicates )
|
||||
*/
|
||||
@ -97,8 +100,6 @@ module SMESH
|
||||
ElementType GetElementType();
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
* Numerical functors are intended for calculating value by Id of mesh entity
|
||||
*/
|
||||
@ -149,6 +150,7 @@ module SMESH
|
||||
Values GetValues();
|
||||
};
|
||||
|
||||
|
||||
/*!
|
||||
* Predicates are intended for verification of criteria,
|
||||
* must return bool value by mesh id
|
||||
@ -165,6 +167,18 @@ module SMESH
|
||||
*/
|
||||
interface BadOrientedVolume: Predicate {};
|
||||
|
||||
/*!
|
||||
* Logical functor (predicate) "Volumes with bare border" and "Faces with bare border".
|
||||
* Verify whether a mesh volume has a free facet without a mesh face on it
|
||||
*/
|
||||
interface BareBorderVolume: Predicate {};
|
||||
/*!
|
||||
* Logical functor (predicate) "Faces with bare border".
|
||||
* Verify whether a mesh face has a side not shared with another face
|
||||
* and without a mesh edge on it
|
||||
*/
|
||||
interface BareBorderFace: Predicate {};
|
||||
|
||||
/*!
|
||||
* Logical functor (predicate) "Belong To Geometry".
|
||||
* Verify whether mesh element or node belong to pointed Geom Object
|
||||
@ -492,6 +506,8 @@ module SMESH
|
||||
RangeOfIds CreateRangeOfIds();
|
||||
|
||||
BadOrientedVolume CreateBadOrientedVolume();
|
||||
BareBorderVolume CreateBareBorderVolume();
|
||||
BareBorderFace CreateBareBorderFace();
|
||||
LinearOrQuadratic CreateLinearOrQuadratic();
|
||||
|
||||
GroupColor CreateGroupColor();
|
||||
|
@ -102,6 +102,8 @@ dist_salomeres_DATA = \
|
||||
mesh_vertex_n.png \
|
||||
mesh_vertex.png \
|
||||
mesh_volume_3d.png \
|
||||
bare_border_volume.png \
|
||||
bare_border_face.png \
|
||||
mesh_wireframe.png \
|
||||
mesh_points.png \
|
||||
mesh_wrap.png \
|
||||
|
BIN
resources/bare_border_face.png
Normal file
BIN
resources/bare_border_face.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
BIN
resources/bare_border_volume.png
Normal file
BIN
resources/bare_border_volume.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
@ -199,6 +199,25 @@ SMESH_ActorDef::SMESH_ActorDef()
|
||||
aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
|
||||
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
|
||||
|
||||
my3DExtActor = SMESH_DeviceActor::New();
|
||||
my3DExtActor->SetUserMatrix(aMatrix);
|
||||
my3DExtActor->PickableOff();
|
||||
my3DExtActor->SetProperty(my2DExtProp);
|
||||
my3DExtActor->SetBackfaceProperty(my2DExtProp);
|
||||
my3DExtActor->SetRepresentation(SMESH_DeviceActor::eSurface);
|
||||
aFilter = my3DExtActor->GetExtractUnstructuredGrid();
|
||||
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
||||
aFilter->RegisterCellsWithType(VTK_TETRA);
|
||||
aFilter->RegisterCellsWithType(VTK_VOXEL);
|
||||
aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
|
||||
aFilter->RegisterCellsWithType(VTK_WEDGE);
|
||||
aFilter->RegisterCellsWithType(VTK_PYRAMID);
|
||||
aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
|
||||
aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
|
||||
aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
|
||||
aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
|
||||
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
|
||||
|
||||
//Definition 1D device of the actor
|
||||
//---------------------------------
|
||||
myEdgeProp = vtkProperty::New();
|
||||
@ -532,6 +551,7 @@ SMESH_ActorDef::~SMESH_ActorDef()
|
||||
my2DExtProp->Delete();
|
||||
my2DExtActor->Delete();
|
||||
my3DActor->Delete();
|
||||
my3DExtActor->Delete();
|
||||
|
||||
myNodeActor->Delete();
|
||||
myBaseActor->Delete();
|
||||
@ -723,8 +743,8 @@ SetControlMode(eControl theMode,
|
||||
|
||||
bool anIsScalarVisible = theMode > eNone;
|
||||
|
||||
if(anIsScalarVisible){
|
||||
switch(theMode){
|
||||
if(anIsScalarVisible) {
|
||||
switch(theMode) {
|
||||
case eLength:
|
||||
{
|
||||
SMESH::Controls::Length* aControl = new SMESH::Controls::Length();
|
||||
@ -755,6 +775,10 @@ SetControlMode(eControl theMode,
|
||||
myFunctor.reset(new SMESH::Controls::FreeFaces());
|
||||
myControlActor = my2DActor;
|
||||
break;
|
||||
case eBareBorderFace:
|
||||
myFunctor.reset(new SMESH::Controls::BareBorderFace());
|
||||
myControlActor = my2DActor;
|
||||
break;
|
||||
case eMultiConnection:
|
||||
myFunctor.reset(new SMESH::Controls::MultiConnection());
|
||||
myControlActor = my1DActor;
|
||||
@ -819,6 +843,12 @@ SetControlMode(eControl theMode,
|
||||
myControlActor = my3DActor;
|
||||
break;
|
||||
}
|
||||
case eBareBorderVolume:
|
||||
{
|
||||
myFunctor.reset(new SMESH::Controls::BareBorderVolume());
|
||||
myControlActor = my3DActor;
|
||||
break;
|
||||
}
|
||||
case eMinimumAngle:
|
||||
{
|
||||
SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
|
||||
@ -862,6 +892,12 @@ SetControlMode(eControl theMode,
|
||||
case eFreeFaces:
|
||||
my2DExtActor->SetExtControlMode(myFunctor);
|
||||
break;
|
||||
case eBareBorderFace:
|
||||
my2DExtActor->SetExtControlMode(myFunctor);
|
||||
break;
|
||||
case eBareBorderVolume:
|
||||
my3DExtActor->SetExtControlMode(myFunctor);
|
||||
break;
|
||||
case eLength2D:
|
||||
case eMultiConnection2D:
|
||||
my1DExtActor->SetExtControlMode(myFunctor,myScalarBarActor,myLookupTable);
|
||||
@ -911,6 +947,7 @@ void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){
|
||||
theRenderer->AddActor(myNodeExtActor);
|
||||
|
||||
my3DActor->AddToRender(theRenderer);
|
||||
my3DExtActor->AddToRender(theRenderer);
|
||||
my2DActor->AddToRender(theRenderer);
|
||||
my2DExtActor->AddToRender(theRenderer);
|
||||
|
||||
@ -954,6 +991,7 @@ void SMESH_ActorDef::RemoveFromRender(vtkRenderer* theRenderer){
|
||||
my2DActor->RemoveFromRender(theRenderer);
|
||||
my2DExtActor->RemoveFromRender(theRenderer);
|
||||
my3DActor->RemoveFromRender(theRenderer);
|
||||
my3DExtActor->RemoveFromRender(theRenderer);
|
||||
|
||||
theRenderer->RemoveActor(myScalarBarActor);
|
||||
theRenderer->RemoveActor(myPointLabels);
|
||||
@ -989,6 +1027,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
|
||||
my2DActor->Init(myVisualObj,myImplicitBoolean);
|
||||
my2DExtActor->Init(myVisualObj,myImplicitBoolean);
|
||||
my3DActor->Init(myVisualObj,myImplicitBoolean);
|
||||
my3DExtActor->Init(myVisualObj,myImplicitBoolean);
|
||||
|
||||
my0DActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||
//my0DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||
@ -999,6 +1038,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
|
||||
my2DActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||
my2DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||
my3DActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||
my3DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||
|
||||
vtkFloatingPointType aFactor, aUnits;
|
||||
my2DActor->GetPolygonOffsetParameters(aFactor,aUnits);
|
||||
@ -1071,6 +1111,7 @@ void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){
|
||||
my2DActor->SetTransform(theTransform);
|
||||
my2DExtActor->SetTransform(theTransform);
|
||||
my3DActor->SetTransform(theTransform);
|
||||
my3DExtActor->SetTransform(theTransform);
|
||||
|
||||
Modified();
|
||||
}
|
||||
@ -1126,6 +1167,7 @@ void SMESH_ActorDef::SetShrinkFactor(vtkFloatingPointType theValue){
|
||||
my2DActor->SetShrinkFactor(theValue);
|
||||
my2DExtActor->SetShrinkFactor(theValue);
|
||||
my3DActor->SetShrinkFactor(theValue);
|
||||
my3DExtActor->SetShrinkFactor(theValue);
|
||||
|
||||
Modified();
|
||||
}
|
||||
@ -1141,6 +1183,7 @@ void SMESH_ActorDef::SetShrink(){
|
||||
my2DActor->SetShrink();
|
||||
my2DExtActor->SetShrink();
|
||||
my3DActor->SetShrink();
|
||||
my3DExtActor->SetShrink();
|
||||
|
||||
myIsShrunk = true;
|
||||
Modified();
|
||||
@ -1157,6 +1200,7 @@ void SMESH_ActorDef::UnShrink(){
|
||||
my2DActor->UnShrink();
|
||||
my2DExtActor->UnShrink();
|
||||
my3DActor->UnShrink();
|
||||
my3DExtActor->UnShrink();
|
||||
|
||||
myIsShrunk = false;
|
||||
Modified();
|
||||
@ -1203,6 +1247,7 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
|
||||
my2DActor->VisibilityOff();
|
||||
my2DExtActor->VisibilityOff();
|
||||
my3DActor->VisibilityOff();
|
||||
my3DExtActor->VisibilityOff();
|
||||
|
||||
myScalarBarActor->VisibilityOff();
|
||||
myPointLabels->VisibilityOff();
|
||||
@ -1222,8 +1267,12 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
|
||||
my1DExtActor->VisibilityOn();
|
||||
break;
|
||||
case eFreeFaces:
|
||||
case eBareBorderFace:
|
||||
my2DExtActor->VisibilityOn();
|
||||
break;
|
||||
case eBareBorderVolume:
|
||||
my3DExtActor->VisibilityOn();
|
||||
break;
|
||||
case eLength2D:
|
||||
case eMultiConnection2D:
|
||||
my1DExtActor->VisibilityOn();
|
||||
@ -1456,6 +1505,7 @@ void SMESH_ActorDef::SetRepresentation (int theMode)
|
||||
//my0DExtActor->SetVisibility(false);
|
||||
my1DExtActor->SetVisibility(false);
|
||||
my2DExtActor->SetVisibility(false);
|
||||
my3DExtActor->SetVisibility(false);
|
||||
|
||||
// ???
|
||||
//my0DActor->SetProperty(aProp);
|
||||
@ -1786,6 +1836,7 @@ SMESH_ActorDef::SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed)
|
||||
my2DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||
my2DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||
my3DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||
my3DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||
}
|
||||
|
||||
vtkIdType
|
||||
|
@ -123,7 +123,7 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
|
||||
enum eControl{eNone, eLength, eLength2D, eFreeBorders, eFreeEdges, eFreeNodes,
|
||||
eFreeFaces, eMultiConnection, eArea, eTaper, eAspectRatio,
|
||||
eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D,
|
||||
eMaxElementLength2D, eMaxElementLength3D};
|
||||
eMaxElementLength2D, eMaxElementLength3D, eBareBorderFace, eBareBorderVolume};
|
||||
virtual void SetControlMode(eControl theMode) = 0;
|
||||
virtual eControl GetControlMode() = 0;
|
||||
virtual SMESH::Controls::FunctorPtr GetFunctor() = 0;
|
||||
|
@ -234,6 +234,7 @@ class SMESH_ActorDef : public SMESH_Actor
|
||||
SMESH_DeviceActor* my2DActor;
|
||||
SMESH_DeviceActor* my2DExtActor;
|
||||
SMESH_DeviceActor* my3DActor;
|
||||
SMESH_DeviceActor* my3DExtActor;
|
||||
SMESH_DeviceActor* myControlActor;
|
||||
|
||||
vtkProperty* myNodeExtProp;
|
||||
|
@ -501,7 +501,10 @@ SMESH_DeviceActor
|
||||
|
||||
using namespace SMESH::Controls;
|
||||
if ( dynamic_cast<FreeBorders*>(theFunctor.get()) ||
|
||||
dynamic_cast<FreeFaces*>(theFunctor.get()) ) {
|
||||
dynamic_cast<FreeFaces*>(theFunctor.get()) ||
|
||||
dynamic_cast<BareBorderVolume*>(theFunctor.get())||
|
||||
dynamic_cast<BareBorderFace*>(theFunctor.get()))
|
||||
{
|
||||
Predicate* aFreePredicate = dynamic_cast<Predicate*>(theFunctor.get());
|
||||
myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
||||
vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid();
|
||||
@ -514,7 +517,9 @@ SMESH_DeviceActor
|
||||
if(!myExtractUnstructuredGrid->IsCellsRegistered())
|
||||
myExtractUnstructuredGrid->RegisterCell(-1);
|
||||
SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid());
|
||||
}else if(FreeEdges* aFreeEdges = dynamic_cast<FreeEdges*>(theFunctor.get())){
|
||||
}
|
||||
else if(FreeEdges* aFreeEdges = dynamic_cast<FreeEdges*>(theFunctor.get()))
|
||||
{
|
||||
SMESH::Controls::FreeEdges::TBorders aBorders;
|
||||
aFreeEdges->GetBoreders(aBorders);
|
||||
vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New();
|
||||
@ -561,7 +566,9 @@ SMESH_DeviceActor
|
||||
|
||||
SetUnstructuredGrid(aDataSet);
|
||||
aDataSet->Delete();
|
||||
}else if(FreeNodes* aFreeNodes = dynamic_cast<FreeNodes*>(theFunctor.get())){
|
||||
}
|
||||
else if(FreeNodes* aFreeNodes = dynamic_cast<FreeNodes*>(theFunctor.get()))
|
||||
{
|
||||
myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
||||
vtkIdType aNbNodes = myVisualObj->GetNbEntities(SMDSAbs_Node);
|
||||
for( vtkIdType i = 0; i < aNbNodes; i++ ){
|
||||
|
@ -757,6 +757,10 @@
|
||||
type = QObject::tr( "FREE_BORDERS" );
|
||||
else if ( dynamic_cast< SMESH::Controls::FreeFaces* >( f.get() ) )
|
||||
type = QObject::tr( "FREE_FACES" );
|
||||
else if ( dynamic_cast< SMESH::Controls::BareBorderVolume* >( f.get() ) )
|
||||
type = QObject::tr( "BARE_BORDER_VOLUME" );
|
||||
else if ( dynamic_cast< SMESH::Controls::BareBorderFace* >( f.get() ) )
|
||||
type = QObject::tr( "BARE_BORDER_FACE" );
|
||||
return type;
|
||||
}
|
||||
|
||||
@ -1176,6 +1180,12 @@
|
||||
case 6023:
|
||||
aControl = SMESH_Actor::eMaxElementLength3D;
|
||||
break;
|
||||
case 6024:
|
||||
aControl = SMESH_Actor::eBareBorderVolume;
|
||||
break;
|
||||
case 6025:
|
||||
aControl = SMESH_Actor::eBareBorderFace;
|
||||
break;
|
||||
}
|
||||
anActor->SetControlMode(aControl);
|
||||
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
|
||||
@ -2951,6 +2961,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
case 6021:
|
||||
case 6022:
|
||||
case 6023:
|
||||
case 6024:
|
||||
case 6025:
|
||||
if ( vtkwnd ) {
|
||||
|
||||
LightApp_SelectionMgr* mgr = selectionMgr();
|
||||
@ -3192,6 +3204,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
createSMESHAction( 6021, "FREE_FACES", "ICON_FREE_FACES", 0, true );
|
||||
createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true );
|
||||
createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true );
|
||||
createSMESHAction( 6024, "BARE_BORDER_VOLUME","ICON_BARE_BORDER_VOLUME", 0, true );
|
||||
createSMESHAction( 6025, "BARE_BORDER_FACE","ICON_BARE_BORDER_FACE", 0, true );
|
||||
createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true );
|
||||
createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION", 0, true );
|
||||
createSMESHAction( 6005, "FREE_NODE", "ICON_FREE_NODE", 0, true );
|
||||
@ -3363,6 +3377,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
createMenu( 6001, edgeId, -1 );
|
||||
createMenu( 6004, edgeId, -1 );
|
||||
createMenu( 6021, faceId, -1 );
|
||||
createMenu( 6025, faceId, -1 );
|
||||
createMenu( 6018, faceId, -1 );
|
||||
createMenu( 6019, faceId, -1 );
|
||||
createMenu( 6011, faceId, -1 );
|
||||
@ -3375,6 +3390,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
createMenu( 6017, volumeId, -1 );
|
||||
createMenu( 6009, volumeId, -1 );
|
||||
createMenu( 6023, volumeId, -1 );
|
||||
createMenu( 6024, volumeId, -1 );
|
||||
|
||||
createMenu( 4000, addId, -1 );
|
||||
createMenu( 4009, addId, -1 );
|
||||
@ -3468,6 +3484,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
createTool( 6004, ctrlTb );
|
||||
createTool( separator(), ctrlTb );
|
||||
createTool( 6021, ctrlTb );
|
||||
createTool( 6025, ctrlTb );
|
||||
createTool( 6018, ctrlTb );
|
||||
createTool( 6019, ctrlTb );
|
||||
createTool( 6011, ctrlTb );
|
||||
@ -3481,6 +3498,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
createTool( 6017, ctrlTb );
|
||||
createTool( 6009, ctrlTb );
|
||||
createTool( 6023, ctrlTb );
|
||||
createTool( 6024, ctrlTb );
|
||||
createTool( separator(), ctrlTb );
|
||||
|
||||
createTool( 4000, addRemTb );
|
||||
@ -3783,50 +3801,54 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
|
||||
aSubId = popupMgr()->insert( tr( "MEN_FACE_CTRL" ), anId, -1 ); // FACE CONTROLS
|
||||
|
||||
popupMgr()->insert( action( 6021 ), aSubId, -1 ); // FREE_FACE
|
||||
popupMgr()->insert ( action( 6021 ), aSubId, -1 ); // FREE_FACE
|
||||
popupMgr()->setRule( action( 6021 ), aMeshInVtkHasFaces /*aMeshInVtkHasVolumes*/,
|
||||
QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6021 ), "controlMode = 'eFreeFaces'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6018 ), aSubId, -1 ); // LENGTH_2D
|
||||
popupMgr()->insert ( action( 6018 ), aSubId, -1 ); // LENGTH_2D
|
||||
popupMgr()->setRule( action( 6018 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6018 ), "controlMode = 'eLength2D'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6019 ), aSubId, -1 ); // CONNECTION_2D
|
||||
popupMgr()->insert ( action( 6019 ), aSubId, -1 ); // CONNECTION_2D
|
||||
popupMgr()->setRule( action( 6019 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6019 ), "controlMode = 'eMultiConnection2D'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6011 ), aSubId, -1 ); // AREA
|
||||
popupMgr()->insert ( action( 6011 ), aSubId, -1 ); // AREA
|
||||
popupMgr()->setRule( action( 6011 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6011 ), "controlMode = 'eArea'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6012 ), aSubId, -1 ); // TAPER
|
||||
popupMgr()->insert ( action( 6012 ), aSubId, -1 ); // TAPER
|
||||
popupMgr()->setRule( action( 6012 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6012 ), "controlMode = 'eTaper'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6013 ), aSubId, -1 ); // ASPECT
|
||||
popupMgr()->insert ( action( 6013 ), aSubId, -1 ); // ASPECT
|
||||
popupMgr()->setRule( action( 6013 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6013 ), "controlMode = 'eAspectRatio'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6014 ), aSubId, -1 ); // MIN_ANG
|
||||
popupMgr()->insert ( action( 6014 ), aSubId, -1 ); // MIN_ANG
|
||||
popupMgr()->setRule( action( 6014 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6014 ), "controlMode = 'eMinimumAngle'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6015 ), aSubId, -1 ); // WARP
|
||||
popupMgr()->insert ( action( 6015 ), aSubId, -1 ); // WARP
|
||||
popupMgr()->setRule( action( 6015 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6015 ), "controlMode = 'eWarping'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6016 ), aSubId, -1 ); // SKEW
|
||||
popupMgr()->insert ( action( 6016 ), aSubId, -1 ); // SKEW
|
||||
popupMgr()->setRule( action( 6016 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6016 ), "controlMode = 'eSkew'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6022 ), aSubId, -1 ); // MAX_ELEMENT_LENGTH_2D
|
||||
popupMgr()->insert ( action( 6022 ), aSubId, -1 ); // MAX_ELEMENT_LENGTH_2D
|
||||
popupMgr()->setRule( action( 6022 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6022 ), "controlMode = 'eMaxElementLength2D'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert ( action( 6025 ), aSubId, -1 ); // BARE_BORDER_FACE
|
||||
popupMgr()->setRule( action( 6025 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6025 ), "controlMode = 'eBareBorderFace'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS
|
||||
|
||||
popupMgr()->insert( action( 6017 ), aSubId, -1 ); // ASPECT_3D
|
||||
popupMgr()->insert ( action( 6017 ), aSubId, -1 ); // ASPECT_3D
|
||||
popupMgr()->setRule( action( 6017 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6017 ), "controlMode = 'eAspectRatio3D'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
@ -3834,10 +3856,14 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
popupMgr()->setRule( action( 6009 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6009 ), "controlMode = 'eVolume3D'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( action( 6023 ), aSubId, -1 ); // MAX_ELEMENT_LENGTH_3D
|
||||
popupMgr()->insert ( action( 6023 ), aSubId, -1 ); // MAX_ELEMENT_LENGTH_3D
|
||||
popupMgr()->setRule( action( 6023 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6023 ), "controlMode = 'eMaxElementLength3D'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert ( action( 6024 ), aSubId, -1 ); // BARE_BORDER_VOLUME
|
||||
popupMgr()->setRule( action( 6024 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
||||
popupMgr()->setRule( action( 6024 ), "controlMode = 'eBareBorderVolume'", QtxPopupMgr::ToggleRule );
|
||||
|
||||
popupMgr()->insert( separator(), anId, -1 );
|
||||
|
||||
popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP
|
||||
|
@ -1170,6 +1170,8 @@ void SMESHGUI_FilterTable::SetCriterion (const int theRow,
|
||||
theCriterion.Type != SMESH::FT_FreeNodes &&
|
||||
theCriterion.Type != SMESH::FT_FreeFaces &&
|
||||
theCriterion.Type != SMESH::FT_BadOrientedVolume &&
|
||||
theCriterion.Type != SMESH::FT_BareBorderFace &&
|
||||
theCriterion.Type != SMESH::FT_BareBorderVolume &&
|
||||
theCriterion.Type != SMESH::FT_LinearOrQuadratic)
|
||||
aTable->item( theRow, 2 )->setText(QString("%1").arg(theCriterion.Threshold, 0, 'g', 15));
|
||||
else
|
||||
@ -1324,11 +1326,13 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
|
||||
|
||||
ComboItem* anItem = ((ComboItem*)aTable->item(aRow, 0));
|
||||
int aCriterion = GetCriterionType(aRow);
|
||||
bool toEnable = ((ComboItem*)aTable->item(aRow, 1))->value() == SMESH::FT_EqualTo &&
|
||||
aCriterion != SMESH::FT_RangeOfIds &&
|
||||
aCriterion != SMESH::FT_FreeEdges &&
|
||||
aCriterion != SMESH::FT_FreeFaces &&
|
||||
aCriterion != SMESH::FT_BadOrientedVolume;
|
||||
bool toEnable = (((ComboItem*)aTable->item(aRow, 1))->value() == SMESH::FT_EqualTo &&
|
||||
aCriterion != SMESH::FT_RangeOfIds &&
|
||||
aCriterion != SMESH::FT_FreeEdges &&
|
||||
aCriterion != SMESH::FT_FreeFaces &&
|
||||
aCriterion != SMESH::FT_BadOrientedVolume &&
|
||||
aCriterion != SMESH::FT_BareBorderFace &&
|
||||
aCriterion != SMESH::FT_BareBorderVolume);
|
||||
|
||||
if (!myAddWidgets.contains(anItem))
|
||||
{
|
||||
@ -1504,9 +1508,11 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
|
||||
|
||||
if (aType == SMESH::NODE && aCriterionType == SMESH::FT_FreeNodes ||
|
||||
aType == SMESH::EDGE && aCriterionType == SMESH::FT_FreeBorders ||
|
||||
aType == SMESH::FACE && (aCriterionType == SMESH::FT_FreeEdges ||
|
||||
aType == SMESH::FACE && (aCriterionType == SMESH::FT_BareBorderFace ||
|
||||
aCriterionType == SMESH::FT_FreeEdges ||
|
||||
aCriterionType == SMESH::FT_FreeFaces) ||
|
||||
aType == SMESH::VOLUME && aCriterionType == SMESH::FT_BadOrientedVolume ||
|
||||
aType == SMESH::VOLUME && (aCriterionType == SMESH::FT_BadOrientedVolume ||
|
||||
aCriterionType == SMESH::FT_BareBorderVolume) ||
|
||||
aCriterionType == SMESH::FT_LinearOrQuadratic ||
|
||||
aCriterionType == SMESH::FT_GroupColor ||
|
||||
aCriterionType == SMESH::FT_ElemGeomType)
|
||||
@ -1789,6 +1795,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
|
||||
aCriteria[ SMESH::FT_Length2D ] = tr("LENGTH2D");
|
||||
aCriteria[ SMESH::FT_MultiConnection2D ] = tr("MULTI2D_BORDERS");
|
||||
aCriteria[ SMESH::FT_FreeFaces ] = tr("FREE_FACES");
|
||||
aCriteria[ SMESH::FT_BareBorderFace ] = tr("BARE_BORDER_FACE");
|
||||
aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR");
|
||||
aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR");
|
||||
aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE");
|
||||
@ -1805,6 +1812,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
|
||||
aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
|
||||
aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
|
||||
aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME");
|
||||
aCriteria[ SMESH::FT_BareBorderVolume ] = tr("BARE_BORDER_VOLUME");
|
||||
aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D");
|
||||
aCriteria[ SMESH::FT_MaxElementLength3D ] = tr("MAX_ELEMENT_LENGTH_3D");
|
||||
aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR");
|
||||
|
@ -457,6 +457,14 @@
|
||||
<source>ICON_VOLUME_3D</source>
|
||||
<translation>mesh_volume_3d.png</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ICON_BARE_BORDER_VOLUME</source>
|
||||
<translation>bare_border_volume.png</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ICON_BARE_BORDER_FACE</source>
|
||||
<translation>bare_border_face.png</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ICON_WARP</source>
|
||||
<translation>mesh_wrap.png</translation>
|
||||
|
@ -391,6 +391,14 @@
|
||||
<source>TOP_FIND_ELEM</source>
|
||||
<translation>Find Element by Point</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_BARE_BORDER_VOLUME</source>
|
||||
<translation>Volumes with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_BARE_BORDER_FACE</source>
|
||||
<translation>Faces with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_FREE_BORDER</source>
|
||||
<translation>Free Borders</translation>
|
||||
@ -2424,6 +2432,14 @@ Consider saving your work before application crash</translation>
|
||||
<source>STB_FACES</source>
|
||||
<translation>Faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_BARE_BORDER_VOLUME</source>
|
||||
<translation>Volumes with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_BARE_BORDER_FACE</source>
|
||||
<translation>Faces with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_FREE_BORDER</source>
|
||||
<translation>Free Borders</translation>
|
||||
@ -2960,6 +2976,14 @@ Consider saving your work before application crash</translation>
|
||||
<source>TOP_FACES</source>
|
||||
<translation>Faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_BARE_BORDER_VOLUME</source>
|
||||
<translation>Volumes with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_BARE_BORDER_FACE</source>
|
||||
<translation>Faces with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_FREE_BORDER</source>
|
||||
<translation>Free Borders</translation>
|
||||
@ -4299,6 +4323,14 @@ Please check input data and try again</translation>
|
||||
<source>BAD_ORIENTED_VOLUME</source>
|
||||
<translation>Bad oriented volume</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BARE_BORDER_VOLUME</source>
|
||||
<translation>Volumes with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BARE_BORDER_FACE</source>
|
||||
<translation>Faces with bare border</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BELONG_TO_CYLINDER</source>
|
||||
<translation>Belong to Cylinder</translation>
|
||||
|
@ -120,6 +120,7 @@ namespace // INTERNAL STUFF
|
||||
enum _ListenerDataType
|
||||
{
|
||||
WAIT_HYP_MODIF=1, // data indicating awaiting for valid parameters of src hyp
|
||||
LISTEN_SRC_MESH, // data storing submesh depending on source mesh state
|
||||
SRC_HYP // data storing ImportSource hyp
|
||||
};
|
||||
//================================================================================
|
||||
@ -130,10 +131,10 @@ namespace // INTERNAL STUFF
|
||||
struct _ListenerData : public SMESH_subMeshEventListenerData
|
||||
{
|
||||
const StdMeshers_ImportSource1D* _srcHyp;
|
||||
_ListenerData(const StdMeshers_ImportSource1D* h):
|
||||
_ListenerData(const StdMeshers_ImportSource1D* h, _ListenerDataType type=SRC_HYP):
|
||||
SMESH_subMeshEventListenerData(/*isDeletable=*/true), _srcHyp(h)
|
||||
{
|
||||
myType = SRC_HYP;
|
||||
myType = type;
|
||||
}
|
||||
};
|
||||
//================================================================================
|
||||
@ -246,10 +247,9 @@ namespace // INTERNAL STUFF
|
||||
// set a listener to hear events of the source mesh
|
||||
SMESH_subMesh* smToNotify = importSub;
|
||||
SMESH_subMesh* smToListen = srcMesh->GetSubMeshContaining(1);
|
||||
importSub->SetEventListener
|
||||
( new SMESH_subMeshEventListener(/*isDeletable=*/true),
|
||||
SMESH_subMeshEventListenerData::MakeData( smToNotify ),
|
||||
smToListen );
|
||||
SMESH_subMeshEventListenerData* data = new _ListenerData(srcHyp, LISTEN_SRC_MESH);
|
||||
data->mySubMeshes.push_back( smToNotify );
|
||||
importSub->SetEventListener( get(), data, smToListen );
|
||||
|
||||
// remeber the submesh
|
||||
_ImportData* iData = _Listener::getImportData( srcMesh, importSub->GetFather());
|
||||
@ -320,6 +320,12 @@ namespace // INTERNAL STUFF
|
||||
bool copyMesh = !d->_copyMeshSubM.empty();
|
||||
if ( copyMesh )
|
||||
{
|
||||
// remove imported mesh and groups
|
||||
d->removeImportedMesh( sm->GetFather()->GetMeshDS() );
|
||||
|
||||
if ( data )
|
||||
d->removeGroups( sm, data->_srcHyp );
|
||||
|
||||
// clear submeshes
|
||||
if ( !d->_computedSubM.empty() )
|
||||
{
|
||||
@ -335,11 +341,10 @@ namespace // INTERNAL STUFF
|
||||
subM->ComputeStateEngine( SMESH_subMesh::CLEAN );
|
||||
}
|
||||
}
|
||||
// remove imported mesh and groups
|
||||
d->removeImportedMesh( sm->GetFather()->GetMeshDS() );
|
||||
|
||||
if ( data )
|
||||
d->removeGroups( sm, data->_srcHyp );
|
||||
}
|
||||
else
|
||||
{
|
||||
sm->ComputeStateEngine( SMESH_subMesh::CLEAN );
|
||||
}
|
||||
}
|
||||
if ( data )
|
||||
@ -360,6 +365,7 @@ namespace // INTERNAL STUFF
|
||||
{
|
||||
if ( data && data->myType == WAIT_HYP_MODIF )
|
||||
{
|
||||
// event of Import submesh
|
||||
if ( SMESH_subMesh::MODIF_HYP == event &&
|
||||
SMESH_subMesh::ALGO_EVENT == eventType )
|
||||
{
|
||||
@ -368,13 +374,39 @@ namespace // INTERNAL STUFF
|
||||
algo->SetEventListener( subMesh );
|
||||
}
|
||||
}
|
||||
else
|
||||
else if ( data && data->myType == LISTEN_SRC_MESH )
|
||||
{
|
||||
SMESH_Gen* gen = subMesh->GetFather()->GetGen();
|
||||
SMESH_Algo* algo = gen->GetAlgo(*subMesh->GetFather(),subMesh->GetSubShape() );
|
||||
// event of source mesh
|
||||
if ( SMESH_subMesh::COMPUTE_EVENT == eventType )
|
||||
{
|
||||
switch ( event ) {
|
||||
case SMESH_subMesh::CLEAN:
|
||||
clearSubmesh( data->mySubMeshes.front(), (_ListenerData*) data );
|
||||
break;
|
||||
case SMESH_subMesh::COMPUTE:
|
||||
if ( subMesh->GetComputeState() == SMESH_subMesh::COMPUTE_OK )
|
||||
data->mySubMeshes.front()->ComputeStateEngine( SMESH_subMesh::SUBMESH_COMPUTED );
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
}
|
||||
}
|
||||
else // event of Import submesh
|
||||
{
|
||||
bool removeImport = false;
|
||||
if ( subMesh->GetAlgoState() != SMESH_subMesh::HYP_OK )
|
||||
{
|
||||
removeImport = true;
|
||||
}
|
||||
else if ( SMESH_subMesh::REMOVE_ALGO == event ||
|
||||
SMESH_subMesh::REMOVE_FATHER_ALGO == event )
|
||||
{
|
||||
SMESH_Gen* gen = subMesh->GetFather()->GetGen();
|
||||
SMESH_Algo* algo = gen->GetAlgo(*subMesh->GetFather(),subMesh->GetSubShape() );
|
||||
removeImport = ( strncmp( "Import", algo->GetName(), 6 ) != 0 );
|
||||
}
|
||||
|
||||
if ( subMesh->GetAlgoState() != SMESH_subMesh::HYP_OK ||
|
||||
strncmp( "Import", algo->GetName(), 6 ) != 0 )
|
||||
if ( removeImport )
|
||||
{
|
||||
// treate removal of Import algo from subMesh
|
||||
removeSubmesh( subMesh, (_ListenerData*) data );
|
||||
@ -543,8 +575,8 @@ bool StdMeshers_Import_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & th
|
||||
subShapeIDs.insert( shapeID );
|
||||
|
||||
// get nodes on vertices
|
||||
list < SMESH_MeshEditor::TNodeXYZ > vertexNodes;
|
||||
list < SMESH_MeshEditor::TNodeXYZ >::iterator vNIt;
|
||||
list < SMESH_MeshEditor::TNodeXYZ > vertexNodes;
|
||||
list < SMESH_MeshEditor::TNodeXYZ >::iterator vNIt;
|
||||
TopExp_Explorer vExp( theShape, TopAbs_VERTEX );
|
||||
for ( ; vExp.More(); vExp.Next() )
|
||||
{
|
||||
@ -797,6 +829,17 @@ void StdMeshers_Import_1D::importMesh(const SMESH_Mesh* srcMesh,
|
||||
n2n->clear();
|
||||
e2e->clear();
|
||||
|
||||
{
|
||||
cout << "IMPORT SubMesh " << endl << " Elems:";
|
||||
SMDS_ElemIteratorPtr eIt = tgtSubMesh->GetElements();
|
||||
while ( eIt->more() )
|
||||
cout << " " << eIt->next()->GetID();
|
||||
cout << endl << " Nodes:";
|
||||
SMDS_NodeIteratorPtr nIt = tgtSubMesh->GetNodes();
|
||||
while ( nIt->more() )
|
||||
cout << " " << nIt->next()->GetID();
|
||||
cout << endl;
|
||||
}
|
||||
// Remember created groups in order to remove them as soon as the srcHyp is
|
||||
// modified or something other similar happens. Store them in a hypothesis
|
||||
// as it stores its values anyway
|
||||
|
@ -153,8 +153,8 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
||||
const bool toCheckOri = (helper.NbAncestors( geomFace, theMesh, TopAbs_SOLID ) == 1 );
|
||||
|
||||
Handle(Geom_Surface) surface = BRep_Tool::Surface( geomFace );
|
||||
if ( helper.GetSubShapeOri( tgtMesh->ShapeToMesh(), geomFace) == TopAbs_REVERSED )
|
||||
surface->UReverse();
|
||||
const bool reverse =
|
||||
( helper.GetSubShapeOri( tgtMesh->ShapeToMesh(), geomFace) == TopAbs_REVERSED );
|
||||
gp_Pnt p; gp_Vec du, dv;
|
||||
|
||||
set<int> subShapeIDs;
|
||||
@ -262,7 +262,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
||||
{
|
||||
uv = helper.GetNodeUV( geomFace, newNodes[++iNode] );
|
||||
surface->D1( uv.X(),uv.Y(), p, du,dv );
|
||||
geomNorm = du ^ dv;
|
||||
geomNorm = reverse ? dv^du : du^dv;
|
||||
}
|
||||
while ( geomNorm.SquareMagnitude() < 1e-6 && iNode+1 < face->NbCornerNodes());
|
||||
|
||||
@ -458,6 +458,25 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
||||
for ( unsigned iE = 0; iE < edges.size(); ++iE )
|
||||
theMesh.GetSubMesh( edges[iE] )->ComputeStateEngine(SMESH_subMesh::CHECK_COMPUTE_STATE);
|
||||
|
||||
SMESH_subMesh* sm = theMesh.GetSubMesh(theShape);
|
||||
SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(true,false);
|
||||
cout << endl << string(80,'=') << endl
|
||||
<< "Compute( face " << tgtMesh->ShapeToIndex(theShape) << endl;
|
||||
while ( smIt->more() )
|
||||
{
|
||||
sm = smIt->next();
|
||||
TopAbs::Print(sm->GetSubShape().ShapeType(), cout);
|
||||
cout << " " << sm->GetId() << endl << " Elems:";
|
||||
SMDS_ElemIteratorPtr eIt = sm->GetSubMeshDS()->GetElements();
|
||||
while ( eIt->more() )
|
||||
cout << " " << eIt->next()->GetID();
|
||||
cout << endl << " Nodes:";
|
||||
SMDS_NodeIteratorPtr nIt = sm->GetSubMeshDS()->GetNodes();
|
||||
while ( nIt->more() )
|
||||
cout << " " << nIt->next()->GetID();
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
// ============
|
||||
// Copy meshes
|
||||
// ============
|
||||
|
Loading…
Reference in New Issue
Block a user