Version: 6.3.1
Public Member Functions | Private Types | Private Slots | Private Member Functions | Private Attributes

SMESHGUI_MeshPatternDlg Class Reference

#include <SMESHGUI_MeshPatternDlg.h>

Inheritance diagram for SMESHGUI_MeshPatternDlg:
Inheritance graph
[legend]

Public Member Functions

 SMESHGUI_MeshPatternDlg (SMESHGUI *)
 Class : SMESHGUI_MeshPatternDlg Description : Dialog to specify filters for VTK viewer.
virtual ~SMESHGUI_MeshPatternDlg ()
void Init ()

Private Types

enum  { Type_2d, Type_3d }
enum  {
  Mesh, Object, Vertex1, Vertex2,
  Ids
}

Private Slots

void onOk ()
bool onApply ()
void onClose ()
void onHelp ()
void onDeactivate ()
void onSelectionDone ()
void onSelInputChanged ()
void onTypeChanged (int)
void onModeToggled (bool)
void onOpen ()
void onNew ()
void onReverse (bool)
void onPreview (bool)
void onOkCreationDlg ()
void onCloseCreationDlg ()
void onTextChanged (const QString &)
void onNodeChanged (int)

Private Member Functions

QWidgetcreateButtonFrame (QWidget *)
QWidgetcreateMainFrame (QWidget *)
void displayPreview ()
vtkUnstructuredGridgetGrid ()
void erasePreview ()
void updateWgState ()
bool loadFromFile (const QString &)
void activateSelection ()
QStringList prepareFilters () const
QString autoExtension (const QString &) const
void closeEvent (QCloseEvent *)
void enterEvent (QEvent *)
void keyPressEvent (QKeyEvent *)
bool isValid (const bool=true)
void resetSelInput ()
bool isRefine () const
bool getIds (QList< int > &) const
int getNode (bool=false) const

Private Attributes

QPushButton * myOkBtn
QPushButton * myApplyBtn
QPushButton * myCloseBtn
QPushButton * myHelpBtn
QButtonGroup * myTypeGrp
QRadioButton * mySwitch2d
QRadioButton * mySwitch3d
QCheckBox * myRefine
QFramemyRefineGrp
SalomeApp_IntSpinBox * myNode1
SalomeApp_IntSpinBox * myNode2
QLabel * myNode2Lbl
QFramemyGeomGrp
QMap< int, QPushButton * > mySelBtn
QMap< int, QLineEdit * > mySelEdit
QMap< int, QLabel * > mySelLbl
QLineEdit * myName
QPushButton * myOpenBtn
QPushButton * myNewBtn
QCheckBox * myReverseChk
QCheckBox * myCreatePolygonsChk
QCheckBox * myCreatePolyedrsChk
SMESHGUI_PatternWidgetmyPicture2d
QLabel * myPicture3d
QCheckBox * myPreviewChk
SMESHGUImySMESHGUI
SVTK_Selector * mySelector
LightApp_SelectionMgr * mySelectionMgr
int mySelInput
int myNbPoints
int myType
bool myIsCreateDlgOpen
bool myBusy
SMESH::SMESH_Mesh_var myMesh
GEOM::GEOM_Object_var myMeshShape
QMap< int, GEOM::GEOM_Object_var > myGeomObj
SMESHGUI_CreatePatternDlgmyCreationDlg
SMESH::SMESH_Pattern_var myPattern
SALOME_ActormyPreviewActor
QString myHelpFileName

Detailed Description

Definition at line 62 of file SMESHGUI_MeshPatternDlg.h.


Member Enumeration Documentation

anonymous enum [private]
Enumerator:
Type_2d 
Type_3d 

Definition at line 67 of file SMESHGUI_MeshPatternDlg.h.

anonymous enum [private]
Enumerator:
Mesh 
Object 
Vertex1 
Vertex2 
Ids 

Definition at line 70 of file SMESHGUI_MeshPatternDlg.h.


Constructor & Destructor Documentation

SMESHGUI_MeshPatternDlg::SMESHGUI_MeshPatternDlg ( SMESHGUI theModule)

Class : SMESHGUI_MeshPatternDlg Description : Dialog to specify filters for VTK viewer.

Definition at line 108 of file SMESHGUI_MeshPatternDlg.cxx.

References createButtonFrame(), createMainFrame(), SMESH.GetSelector(), SMESH.GetViewWindow(), Init(), MARGIN, myHelpFileName, mySelector, mySMESHGUI, and SPACING.

  : QDialog( SMESH::GetDesktop( theModule ) ),
    mySMESHGUI( theModule ),
    mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
    myBusy( false ),
    myCreationDlg( 0 )
{
  setModal( false );
  setWindowTitle( tr( "CAPTION" ) );

  QVBoxLayout* aDlgLay = new QVBoxLayout( this );
  aDlgLay->setMargin( MARGIN );
  aDlgLay->setSpacing( SPACING );

  QWidget* aMainFrame = createMainFrame  ( this );
  QWidget* aBtnFrame  = createButtonFrame( this );

  aDlgLay->addWidget( aMainFrame );
  aDlgLay->addWidget( aBtnFrame );

  aDlgLay->setStretchFactor( aMainFrame, 1 );

  mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();

  myHelpFileName = "pattern_mapping_page.html";

  Init();
}
SMESHGUI_MeshPatternDlg::~SMESHGUI_MeshPatternDlg ( ) [virtual]

Definition at line 366 of file SMESHGUI_MeshPatternDlg.cxx.

{
}

Member Function Documentation

void SMESHGUI_MeshPatternDlg::activateSelection ( ) [private]

Definition at line 1070 of file SMESHGUI_MeshPatternDlg.cxx.

References SMESH.FindActorByObject(), SMESH.GetViewWindow(), Ids, myGeomObj, myMesh, myMeshShape, myNbPoints, mySelectionMgr, mySelInput, mySMESHGUI, myType, Object, SMESH.SetPickable(), Type_2d, Vertex1, and Vertex2.

Referenced by enterEvent(), Init(), onSelInputChanged(), onTextChanged(), and onTypeChanged().

{
  mySelectionMgr->clearFilters();
  if (mySelInput == Ids) {
    SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh);
    if (anActor)
      SMESH::SetPickable(anActor);

    if (myType == Type_2d)
      {
        if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
          aViewWindow->SetSelectionMode(FaceSelection);
      }
    else
      {
        if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
          aViewWindow->SetSelectionMode(CellSelection);
      }
  }
  else {
    SMESH::SetPickable();
    //mySelectionMgr->setSelectionModes(ActorSelection);
    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
      aViewWindow->SetSelectionMode(ActorSelection);
  }

  if (mySelInput == Object && !myMeshShape->_is_nil()) {
    if (myType == Type_2d) {
      if (myNbPoints > 0)
        mySelectionMgr->installFilter
          (new SMESH_NumberFilter ("GEOM", TopAbs_VERTEX, myNbPoints, TopAbs_FACE, myMeshShape));
      else
        mySelectionMgr->installFilter
          (new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, myNbPoints, TopAbs_FACE, myMeshShape));
    } else {
      TColStd_MapOfInteger aTypes;
      aTypes.Add(TopAbs_SHELL);
      aTypes.Add(TopAbs_SOLID);
      mySelectionMgr->installFilter
        (new SMESH_NumberFilter ("GEOM", TopAbs_FACE, 6, aTypes, myMeshShape, true));
    }
  } else if ((mySelInput == Vertex1 || mySelInput == Vertex2) && !myGeomObj[ Object ]->_is_nil()) {
    mySelectionMgr->installFilter
      (new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, 1, TopAbs_VERTEX, myGeomObj[ Object ]));
  } else {
  }
}
QString SMESHGUI_MeshPatternDlg::autoExtension ( const QString &  theFileName) const [private]

Definition at line 771 of file SMESHGUI_MeshPatternDlg.cxx.

References SMESH_Nut.theFileName.

Referenced by onOpen().

{
  QString anExt = theFileName.section('.', -1);
  return anExt != "smp" && anExt != "SMP" ? theFileName + ".smp" : theFileName;
}
void SMESHGUI_MeshPatternDlg::closeEvent ( QCloseEvent *  ) [private]

Definition at line 730 of file SMESHGUI_MeshPatternDlg.cxx.

References onClose().

{
  onClose();
}
QWidget * SMESHGUI_MeshPatternDlg::createButtonFrame ( QWidget theParent) [private]

Definition at line 333 of file SMESHGUI_MeshPatternDlg.cxx.

References MARGIN, myApplyBtn, myCloseBtn, myHelpBtn, myOkBtn, onApply(), onClose(), onHelp(), onOk(), and SPACING.

Referenced by SMESHGUI_MeshPatternDlg().

{
  QFrame* aFrame = new QFrame(theParent);
  aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken);

  myOkBtn     = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), aFrame);
  myApplyBtn  = new QPushButton(tr("SMESH_BUT_APPLY"), aFrame);
  myCloseBtn  = new QPushButton(tr("SMESH_BUT_CLOSE"), aFrame);
  myHelpBtn   = new QPushButton(tr("SMESH_BUT_HELP"),  aFrame);

  QHBoxLayout* aLay = new QHBoxLayout( aFrame );
  aLay->setMargin( MARGIN );
  aLay->setSpacing( SPACING );

  aLay->addWidget(myOkBtn);
  aLay->addWidget(myApplyBtn);
  aLay->addSpacing( 10 );
  aLay->addStretch();
  aLay->addWidget(myCloseBtn);
  aLay->addWidget(myHelpBtn);

  connect(myOkBtn,    SIGNAL(clicked()), SLOT(onOk()));
  connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose()));
  connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply()));
  connect(myHelpBtn,  SIGNAL(clicked()), SLOT(onHelp()));

  return aFrame;
}
QWidget * SMESHGUI_MeshPatternDlg::createMainFrame ( QWidget theParent) [private]

Definition at line 141 of file SMESHGUI_MeshPatternDlg.cxx.

References SMESH.GetResourceMgr(), Ids, MARGIN, Mesh, myCreatePolyedrsChk, myCreatePolygonsChk, myGeomGrp, myName, myNewBtn, myNode1, myNode2, myNode2Lbl, myOpenBtn, myPicture2d, myPicture3d, myPreviewChk, myRefine, myRefineGrp, myReverseChk, mySelBtn, mySelEdit, mySelLbl, mySMESHGUI, mySwitch2d, mySwitch3d, myTypeGrp, Object, onModeToggled(), onNew(), onNodeChanged(), onOpen(), onPreview(), onReverse(), onSelInputChanged(), onTextChanged(), onTypeChanged(), SPACING, Type_2d, Type_3d, and Vertex2.

Referenced by SMESHGUI_MeshPatternDlg().

{
  SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
  QPixmap iconSlct ( mgr->loadPixmap( "SMESH", tr( "ICON_SELECT" ) ) );
  QPixmap icon2d   ( mgr->loadPixmap( "SMESH", tr( "ICON_PATTERN_2d" ) ) );
  QPixmap icon3d   ( mgr->loadPixmap( "SMESH", tr( "ICON_PATTERN_3d" ) ) );
  QPixmap iconOpen ( mgr->loadPixmap( "STD",   tr( "ICON_FILE_OPEN" ) ) );

  QPixmap iconSample2d ( mgr->loadPixmap( "SMESH", tr( "ICON_PATTERN_SAMPLE_2D" ) ) );
  QPixmap iconSample3d ( mgr->loadPixmap( "SMESH", tr( "ICON_PATTERN_SAMPLE_3D" ) ) );

  QWidget* aMainGrp = new QWidget( theParent );

  QVBoxLayout* aMainGrpLayout = new QVBoxLayout( aMainGrp );
  aMainGrpLayout->setMargin( 0 );
  aMainGrpLayout->setSpacing( SPACING );

  // Pattern type group

  QGroupBox* aTypeGrp = new QGroupBox( tr( "PATTERN_TYPE" ), aMainGrp );
  QHBoxLayout* aTypeGrpLayout = new QHBoxLayout( aTypeGrp );
  aTypeGrpLayout->setMargin( MARGIN );
  aTypeGrpLayout->setSpacing( SPACING );

  mySwitch2d = new QRadioButton( aTypeGrp );
  mySwitch3d = new QRadioButton( aTypeGrp );
  mySwitch2d->setIcon( icon2d );
  mySwitch3d->setIcon( icon3d );

  myTypeGrp = new QButtonGroup( aMainGrp );
  myTypeGrp->addButton( mySwitch2d, Type_2d );
  myTypeGrp->addButton( mySwitch3d, Type_3d );

  // ... layout widgets

  aTypeGrpLayout->addWidget( mySwitch2d );
  aTypeGrpLayout->addWidget( mySwitch3d );

  // Mesh group

  QGroupBox* aMeshGrp = new QGroupBox( tr( "SMESH_MESH" ), aMainGrp );
  QHBoxLayout* aMeshGrpLayout = new QHBoxLayout( aMeshGrp );
  aMeshGrpLayout->setMargin( MARGIN );
  aMeshGrpLayout->setSpacing( SPACING );

  QLabel* aMeshLab = new QLabel( tr( "SMESH_MESH" ), aMeshGrp );
  mySelBtn[ Mesh ] = new QPushButton( aMeshGrp );
  mySelBtn[ Mesh ]->setIcon( iconSlct );
  mySelEdit[ Mesh ] = new QLineEdit( aMeshGrp );
  mySelEdit[ Mesh ]->setReadOnly( true );

  // ... layout widgets

  aMeshGrpLayout->addWidget( aMeshLab );
  aMeshGrpLayout->addWidget( mySelBtn[ Mesh ] );
  aMeshGrpLayout->addWidget( mySelEdit[ Mesh ] );

  // Pattern group

  QGroupBox* aPatGrp = new QGroupBox( tr( "PATTERN" ), aMainGrp );
  QGridLayout* aPatGrpLayout = new QGridLayout( aPatGrp );
  aPatGrpLayout->setMargin( MARGIN );
  aPatGrpLayout->setSpacing( SPACING );

  // ... Pattern name

  QLabel* aNameLab = new QLabel( tr( "PATTERN" ), aPatGrp );
  myName = new QLineEdit( aPatGrp );
  myName->setReadOnly( true );
  myOpenBtn = new QPushButton( aPatGrp );
  myOpenBtn->setIcon( iconOpen );
  myNewBtn = new QPushButton( tr( "NEW" ), aPatGrp );

  // ... Mode selection check box
  myRefine = new QCheckBox( tr( "REFINE" ), aPatGrp );

  // ... selection widgets for Apply to geom mode
  myGeomGrp = new QFrame( aPatGrp );
  myGeomGrp->setFrameStyle( QFrame::NoFrame );
  QGridLayout* myGeomGrpLayout = new QGridLayout( myGeomGrp );
  myGeomGrpLayout->setMargin( 0 );
  myGeomGrpLayout->setSpacing( SPACING );

  for ( int i = Object; i <= Vertex2; i++ ) {
    mySelLbl[ i ] = new QLabel( myGeomGrp );
    mySelBtn[ i ] = new QPushButton( myGeomGrp );
    mySelBtn[ i ]->setIcon( iconSlct );
    mySelEdit[ i ] = new QLineEdit( myGeomGrp );
    mySelEdit[ i ]->setReadOnly( true );
    myGeomGrpLayout->addWidget( mySelLbl[ i ],  i - Object, 0 );
    myGeomGrpLayout->addWidget( mySelBtn[ i ],  i - Object, 1 );
    myGeomGrpLayout->addWidget( mySelEdit[ i ], i - Object, 2 );
  }

  // ... Widgets for refinement of existing mesh elements

  myRefineGrp = new QFrame( aPatGrp );
  myRefineGrp->setFrameStyle( QFrame::NoFrame );

  QGridLayout* myRefineGrpLayout = new QGridLayout( myRefineGrp );
  myRefineGrpLayout->setMargin( 0 );
  myRefineGrpLayout->setSpacing( SPACING );

  mySelLbl[ Ids ] = new QLabel( myRefineGrp );
  mySelBtn[ Ids ] = new QPushButton( myRefineGrp );
  mySelBtn[ Ids ]->setIcon( iconSlct );
  mySelEdit[ Ids ] = new QLineEdit( myRefineGrp );

  QLabel* aNodeLbl = new QLabel( tr( "NODE_1" ), myRefineGrp );
  myNode1          = new SalomeApp_IntSpinBox( myRefineGrp );
  myNode2Lbl       = new QLabel( tr( "NODE_2" ), myRefineGrp );
  myNode2          = new SalomeApp_IntSpinBox( myRefineGrp );

  myRefineGrpLayout->addWidget( mySelLbl[ Ids ],  0, 0 );
  myRefineGrpLayout->addWidget( mySelBtn[ Ids ],  0, 1 );
  myRefineGrpLayout->addWidget( mySelEdit[ Ids ], 0, 2 );
  myRefineGrpLayout->addWidget( aNodeLbl,         1, 0 );
  myRefineGrpLayout->addWidget( myNode1,          1, 1, 1, 2 );
  myRefineGrpLayout->addWidget( myNode2Lbl,       2, 0 );
  myRefineGrpLayout->addWidget( myNode2,          2, 1, 1, 2 );

  // ... reverse check box
  myReverseChk = new QCheckBox( tr( "REVERSE" ), aPatGrp );

  // ... CreatePoly check box
  myCreatePolygonsChk = new QCheckBox( tr( "CREATE_POLYGONS_NEAR_BOUNDARY" ), aPatGrp );
  myCreatePolyedrsChk = new QCheckBox( tr( "CREATE_POLYEDRS_NEAR_BOUNDARY" ), aPatGrp );

  // ... Pictures 2d and 3d

  myPicture2d = new SMESHGUI_PatternWidget( aPatGrp );
  myPicture2d->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );

  myPicture3d = new QLabel( aPatGrp );
  myPicture3d->setPixmap( iconSample3d );
  myPicture3d->setScaledContents( false );
  myPicture3d->setAlignment( Qt::AlignCenter );
  myPicture3d->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );

  // ... preview check box

  myPreviewChk = new QCheckBox( tr( "PREVIEW" ), aPatGrp );

  // ... layout widgets 

  aPatGrpLayout->addWidget( aNameLab,            0, 0 );
  aPatGrpLayout->addWidget( myName,              0, 1 );
  aPatGrpLayout->addWidget( myOpenBtn,           0, 2 );
  aPatGrpLayout->addWidget( myNewBtn,            0, 3 );
  aPatGrpLayout->addWidget( myRefine,            1, 0, 1, 4 );
  aPatGrpLayout->addWidget( myRefine,            1, 0, 1, 4 );
  aPatGrpLayout->addWidget( myGeomGrp,           2, 0, 1, 4 );
  aPatGrpLayout->addWidget( myRefineGrp,         3, 0, 1, 4 );
  aPatGrpLayout->addWidget( myReverseChk,        4, 0, 1, 4 );
  aPatGrpLayout->addWidget( myCreatePolygonsChk, 5, 0, 1, 4 );
  aPatGrpLayout->addWidget( myCreatePolyedrsChk, 6, 0, 1, 4 );
  aPatGrpLayout->addWidget( myPicture2d,         7, 0, 1, 4 );
  aPatGrpLayout->addWidget( myPicture3d,         8, 0, 1, 4 );
  aPatGrpLayout->addWidget( myPreviewChk,        9, 0, 1, 4 );

  // main layout
  
  aMainGrpLayout->addWidget( aTypeGrp );
  aMainGrpLayout->addWidget( aMeshGrp );
  aMainGrpLayout->addWidget( aPatGrp );

  // Connect signals and slots

  connect(myTypeGrp, SIGNAL(buttonClicked(int)), SLOT(onTypeChanged(int)));
  connect(myOpenBtn, SIGNAL(clicked()),    SLOT(onOpen()));
  connect(myNewBtn,  SIGNAL(clicked()),    SLOT(onNew()));

  connect(myReverseChk, SIGNAL(toggled(bool)), SLOT(onReverse(bool)));
  connect(myPreviewChk, SIGNAL(toggled(bool)), SLOT(onPreview(bool)));
  connect(myRefine,     SIGNAL(toggled(bool)), SLOT(onModeToggled(bool)));

  connect(myNode1, SIGNAL(valueChanged(int)), SLOT(onNodeChanged(int)));
  connect(myNode2, SIGNAL(valueChanged(int)), SLOT(onNodeChanged(int)));

  connect(mySelEdit[Ids], SIGNAL(textChanged(const QString&)), SLOT(onTextChanged(const QString&)));

  QMap< int, QPushButton* >::iterator anIter;
  for (anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter)
    connect(*anIter, SIGNAL(clicked()), SLOT(onSelInputChanged()));

  return aMainGrp;
}
void SMESHGUI_MeshPatternDlg::displayPreview ( ) [private]

Definition at line 905 of file SMESHGUI_MeshPatternDlg.cxx.

References erasePreview(), SMESH.FindActorByObject(), SMESH.GetCurrentVtkView(), SMESH.GetFloat(), getGrid(), SMESH_test.i2, SMESH_test.i3, isValid(), myMesh, myPattern, myPicture2d, myPreviewActor, myPreviewChk, SMESH_AdvancedEditor.n2, SMESH_AdvancedEditor.n3, SMESH_AdvancedEditor.n4, and SMESHGUI_PatternWidget.SetPoints().

Referenced by enterEvent(), onModeToggled(), onNodeChanged(), onOkCreationDlg(), onOpen(), onPreview(), onReverse(), onSelectionDone(), onTextChanged(), and onTypeChanged().

{
  try {
    // Redisplay preview in dialog
    SMESH::point_array_var pnts = myPattern->GetPoints();
    SMESH::long_array_var keyPoints = myPattern->GetKeyPoints();
    SMESH::array_of_long_array_var elemPoints = myPattern->GetElementPoints(false);

    if (pnts->length()       == 0 ||
        keyPoints->length()  == 0 ||
        elemPoints->length() == 0) {
      erasePreview();
      return;
    } else {
      PointVector aPoints(pnts->length());
      QVector<int> aKeyPoints(keyPoints->length());
      ConnectivityVector anElemPoints(elemPoints->length());

      for (int i = 0, n = pnts->length(); i < n; i++)
        aPoints[ i ] = pnts[ i ];

      for (int i2 = 0, n2 = keyPoints->length(); i2 < n2; i2++)
        aKeyPoints[ i2 ] = keyPoints[ i2 ];

      for (int i3 = 0, n3 = elemPoints->length(); i3 < n3; i3++) {
        QVector<int> aVec(elemPoints[ i3 ].length());
        for (int i4 = 0, n4 = elemPoints[ i3 ].length(); i4 < n4; i4++)
          aVec[ i4 ] = elemPoints[ i3 ][ i4 ];

        anElemPoints[ i3 ] = aVec;
      }

      myPicture2d->SetPoints(aPoints, aKeyPoints, anElemPoints);
    }

    // Redisplay preview in 3D viewer
    if (myPreviewActor != 0) {
      if (SVTK_ViewWindow* vf = SMESH::GetCurrentVtkView()) {
        vf->RemoveActor(myPreviewActor);
        vf->Repaint();
      }
      myPreviewActor->Delete();
      myPreviewActor = 0;
    }

    if (!myPreviewChk->isChecked() || !isValid(false))
      return;

    vtkUnstructuredGrid* aGrid = getGrid();
    if (aGrid == 0)
      return;

    // Create and display actor
    vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
    aMapper->SetInput(aGrid);

    myPreviewActor = SALOME_Actor::New();
    myPreviewActor->PickableOff();
    myPreviewActor->SetMapper(aMapper);

    vtkProperty* aProp = vtkProperty::New();
    aProp->SetRepresentationToWireframe();
    aProp->SetColor(250, 0, 250);
    if (SMESH::FindActorByObject(myMesh))
      aProp->SetLineWidth( SMESH::GetFloat( "SMESH:element_width", 1 ) + 1 );
    else
      aProp->SetLineWidth(1);
    myPreviewActor->SetProperty(aProp);

    myPreviewActor->SetRepresentation(3);

    SMESH::GetCurrentVtkView()->AddActor(myPreviewActor);
    SMESH::GetCurrentVtkView()->Repaint();

    aProp->Delete();
    aGrid->Delete();
  } catch (const SALOME::SALOME_Exception& S_ex) {
    SalomeApp_Tools::QtCatchCorbaException(S_ex);
    erasePreview();
  } catch (...) {
    erasePreview();
  }
}
void SMESHGUI_MeshPatternDlg::enterEvent ( QEvent *  ) [private]
void SMESHGUI_MeshPatternDlg::erasePreview ( ) [private]

Definition at line 993 of file SMESHGUI_MeshPatternDlg.cxx.

References SMESH.GetCurrentVtkView(), myPicture2d, myPreviewActor, and SMESHGUI_PatternWidget.SetPoints().

Referenced by displayPreview(), onApply(), and onClose().

{
  // Erase preview in 2D viewer
  myPicture2d->SetPoints(PointVector(), QVector<int>(), ConnectivityVector());

  // Erase preview in 3D viewer
  if (myPreviewActor == 0)
    return;


  if (SVTK_ViewWindow* vf = SMESH::GetCurrentVtkView())
  {
    vf->RemoveActor(myPreviewActor);
    vf->Repaint();
  }
  myPreviewActor->Delete();
  myPreviewActor = 0;
}
vtkUnstructuredGrid * SMESHGUI_MeshPatternDlg::getGrid ( ) [private]

Definition at line 1223 of file SMESHGUI_MeshPatternDlg.cxx.

References getIds(), getNode(), SMESH_test.i1, SMESH_test.i2, SMESH_test.i3, SMESH_test.ids, isRefine(), myGeomObj, myMesh, myPattern, myReverseChk, myType, SMESH_AdvancedEditor.n1, SMESH_AdvancedEditor.n2, SMESH_AdvancedEditor.n3, Object, Type_2d, Type_3d, Vertex1, Vertex2, ex13_hole1partial.x, and ex13_hole1partial.y.

Referenced by displayPreview().

{
  try {
    // Get points from pattern
    SMESH::point_array_var pnts;
    QList<int> ids;
    if (isRefine() && getIds(ids)) {
      SMESH::long_array_var varIds = new SMESH::long_array();
      varIds->length(ids.count());
      int i = 0;
      for (QList<int>::iterator it = ids.begin(); it != ids.end(); ++it)
        varIds[i++] = *it;
      pnts = myType == Type_2d
        ? myPattern->ApplyToMeshFaces  (myMesh, varIds, getNode(false), myReverseChk->isChecked())
        : myPattern->ApplyToHexahedrons(myMesh, varIds, getNode(false), getNode(true));
    } else {
      pnts = myType == Type_2d
        ? myPattern->ApplyToFace   (myGeomObj[ Object ], myGeomObj[ Vertex1 ], myReverseChk->isChecked())
      : myPattern->ApplyTo3DBlock(myGeomObj[ Object ], myGeomObj[ Vertex1 ], myGeomObj[ Vertex2 ]);
    }

    SMESH::array_of_long_array_var elemPoints = myPattern->GetElementPoints(true);

    if (pnts->length() == 0 || elemPoints->length() == 0)
      return 0;

    // to do : to be removed /////////////////////////////////////////////

#ifdef DEB_SLN
    for (int i1 = 0, n1 = pnts->length(); i1 < n1; i1++)
      printf("%d: %g %g %g\n", i1, pnts[ i1 ].x, pnts[ i1 ].y, pnts[ i1 ].z);

    printf("\nELEMENTS : \n");
    for (int i2 = 0, n2 = elemPoints->length(); i2 < n2; i2++)
    {

      printf("%d: ", i2);
      for (int i3 = 0, n3 = elemPoints[ i2 ].length(); i3 < n3; i3++)
        printf("%d ", elemPoints[ i2 ][ i3 ]);

      printf("\n");

    }
#endif


    // Calculate number of points used for cell
    vtkIdType aNbCells = elemPoints->length();
    vtkIdType aCellsSize = 0;
    for (int i = 0, n = elemPoints->length(); i < n; i++)
      aCellsSize += elemPoints[ i ].length();

    // Create unstructured grid and other  usefull arrays
    vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New();

    vtkCellArray* aConnectivity = vtkCellArray::New();
    aConnectivity->Allocate(aCellsSize, 0);

    vtkPoints* aPoints = vtkPoints::New();
    aPoints->SetNumberOfPoints(pnts->length());

    vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New();
    aCellTypesArray->SetNumberOfComponents(1);
    aCellTypesArray->Allocate(aNbCells * aCellTypesArray->GetNumberOfComponents());

    vtkIdList *anIdList = vtkIdList::New();

    // Fill array of points
    for (int p = 0, nbPnt = pnts->length(); p < nbPnt; p++)
      aPoints->SetPoint(p, pnts[ p ].x, pnts[ p ].y, pnts[ p ].z);

    for (int e = 0, nbElem = elemPoints->length(); e < nbElem; e++) {
      int nbPoints = elemPoints[ e ].length();
      anIdList->SetNumberOfIds(nbPoints);
      for (int i = 0; i < nbPoints; i++)
        anIdList->SetId(i, elemPoints[ e ][ i ]);

      aConnectivity->InsertNextCell(anIdList);

      if      (nbPoints == 3) aCellTypesArray->InsertNextValue(VTK_TRIANGLE);
      else if (nbPoints == 5) aCellTypesArray->InsertNextValue(VTK_PYRAMID);
      else if (nbPoints == 6) aCellTypesArray->InsertNextValue(VTK_WEDGE);
      else if (nbPoints == 8) aCellTypesArray->InsertNextValue(VTK_HEXAHEDRON);
      else if (nbPoints == 4 && myType == Type_2d) aCellTypesArray->InsertNextValue(VTK_QUAD);
      else if (nbPoints == 4 && myType == Type_3d) aCellTypesArray->InsertNextValue(VTK_TETRA);
      else aCellTypesArray->InsertNextValue(VTK_EMPTY_CELL);
    }

    VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
    aCellLocationsArray->SetNumberOfComponents(1);
    aCellLocationsArray->SetNumberOfTuples(aNbCells);

    aConnectivity->InitTraversal();
    for (vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell(npts, pts); idType++)
      aCellLocationsArray->SetValue(idType, aConnectivity->GetTraversalLocation(npts));

    aGrid->SetPoints(aPoints);
    aGrid->SetCells(aCellTypesArray, aCellLocationsArray,aConnectivity);

    aConnectivity->Delete();
    aPoints->Delete();
    aCellTypesArray->Delete();
    anIdList->Delete();
    aCellLocationsArray->Delete();

    return aGrid;
  } catch (...) {
    return 0;
  }
}
bool SMESHGUI_MeshPatternDlg::getIds ( QList< int > &  ids) const [private]

Definition at line 1423 of file SMESHGUI_MeshPatternDlg.cxx.

References Ids, and mySelEdit.

Referenced by getGrid(), isValid(), and onApply().

{
  ids.clear();
  QStringList strIds = mySelEdit[Ids]->text().split(" ", QString::SkipEmptyParts );
  bool isOk;
  int val;
  for (QStringList::iterator it = strIds.begin(); it != strIds.end(); ++it) {
    val = (*it).toInt(&isOk);
    if (isOk)
      ids.append(val);
  }

  return ids.count();
}
int SMESHGUI_MeshPatternDlg::getNode ( bool  second = false) const [private]

Definition at line 1442 of file SMESHGUI_MeshPatternDlg.cxx.

References myNode1, and myNode2.

Referenced by getGrid(), isValid(), and onApply().

{
  return second ? myNode2->value() - 1 : myNode1->value() - 1;
}
void SMESHGUI_MeshPatternDlg::Init ( )

Definition at line 374 of file SMESHGUI_MeshPatternDlg.cxx.

References activateSelection(), SMESH.GetPattern(), isRefine(), Mesh, myGeomObj, myIsCreateDlgOpen, myMesh, myMeshShape, myNbPoints, myPattern, myPreviewActor, mySelectionMgr, mySelInput, mySMESHGUI, myType, myTypeGrp, Object, onClose(), onDeactivate(), onModeToggled(), onSelectionDone(), onTypeChanged(), SMESHGUI.SetActiveDialogBox(), Type_2d, Vertex1, and Vertex2.

Referenced by SMESHGUI_MeshPatternDlg().

{
  myPattern = SMESH::GetPattern();
  myPreviewActor = 0;
  myIsCreateDlgOpen = false;
  mySelInput = Mesh;
  myType = -1;
  myNbPoints = -1;
  mySMESHGUI->SetActiveDialogBox((QDialog*)this);
  myMesh = SMESH::SMESH_Mesh::_nil();

  myMeshShape = GEOM::GEOM_Object::_nil();
  myGeomObj[ Object  ] = GEOM::GEOM_Object::_nil();
  myGeomObj[ Vertex1 ] = GEOM::GEOM_Object::_nil();
  myGeomObj[ Vertex2 ] = GEOM::GEOM_Object::_nil();

  // selection and SMESHGUI
  connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(onSelectionDone()));
  connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(onDeactivate()));
  connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(onClose()));

  myTypeGrp->button(Type_2d)->setChecked(true);
  onTypeChanged(Type_2d);
  onModeToggled(isRefine());

  updateGeometry();

  resize(100,100);

  activateSelection();
  onSelectionDone();

  this->show();
}
bool SMESHGUI_MeshPatternDlg::isRefine ( ) const [private]

Definition at line 1350 of file SMESHGUI_MeshPatternDlg.cxx.

References myRefine.

Referenced by getGrid(), Init(), isValid(), onApply(), and onTextChanged().

{
  return myRefine->isChecked();
}
bool SMESHGUI_MeshPatternDlg::isValid ( const bool  theMess = true) [private]

Definition at line 413 of file SMESHGUI_MeshPatternDlg.cxx.

References getIds(), getNode(), SMESH_test.ids, isRefine(), myGeomObj, myMesh, myMeshShape, myName, myNode1, myNode2, myType, Object, Type_3d, Vertex1, and Vertex2.

Referenced by displayPreview(), and onApply().

{
  if (isRefine())
  {
    QString msg;
    bool ok = true;
    ok = myNode1->isValid( msg, theMess ) && ok;
    if (myType == Type_3d)
      ok = myNode2->isValid( msg, theMess ) && ok;
    if( !ok ) {
      if( theMess ) {
        QString str( tr( "SMESH_INCORRECT_INPUT" ) );
        if ( !msg.isEmpty() )
          str += "\n" + msg;
        SUIT_MessageBox::critical( this, tr( "SMESH_ERROR" ), str );
      }
      return false;
    }
  }

  QList<int> ids;
  if ((isRefine() &&
       (myMesh->_is_nil() || !getIds(ids) || getNode(false) < 0 ||
        (myType == Type_3d && (getNode(true) < 0 || getNode(false) == getNode(true)))))
      ||
      (!isRefine() &&
       (myMesh->_is_nil() || myMeshShape->_is_nil() || myGeomObj[ Object ]->_is_nil() ||
        myGeomObj[ Vertex1 ]->_is_nil() || (myType == Type_3d && myGeomObj[ Vertex2 ]->_is_nil()))))
  {
    if (theMess)
      SUIT_MessageBox::information(this, tr("SMESH_INSUFFICIENT_DATA"),
                                   tr("SMESHGUI_INVALID_PARAMETERS"));
    return false;
  }

  if ( myName->text().isEmpty() ) {
    if (theMess)
      SUIT_MessageBox::information(this, tr("SMESH_INSUFFICIENT_DATA"),
                                   tr("SMESHGUI_INVALID_PARAMETERS"));
    return false;
  }

  return true;
}
void SMESHGUI_MeshPatternDlg::keyPressEvent ( QKeyEvent *  e) [private]

Definition at line 1451 of file SMESHGUI_MeshPatternDlg.cxx.

References onHelp().

{
  QDialog::keyPressEvent( e );
  if ( e->isAccepted() )
    return;

  if ( e->key() == Qt::Key_F1 )
    {
      e->accept();
      onHelp();
    }
}
bool SMESHGUI_MeshPatternDlg::loadFromFile ( const QString &  theName) [private]

Definition at line 1122 of file SMESHGUI_MeshPatternDlg.cxx.

References SMESH.SMESH_Pattern.ERR_READ_3D_COORD, SMESH.SMESH_Pattern.ERR_READ_BAD_INDEX, SMESH.SMESH_Pattern.ERR_READ_BAD_KEY_POINT, SMESH.SMESH_Pattern.ERR_READ_ELEM_POINTS, SMESH.SMESH_Pattern.ERR_READ_NB_POINTS, SMESH.SMESH_Pattern.ERR_READ_NO_ELEMS, SMESH.SMESH_Pattern.ERR_READ_NO_KEYPOINT, SMESH.SMESH_Pattern.ERR_READ_POINT_COORDS, SMESH.SMESH_Pattern.ERR_READ_TOO_FEW_POINTS, SMESH.GetPattern(), myPattern, myType, and Type_2d.

Referenced by onOpen().

{
  try {
    SMESH::SMESH_Pattern_var aPattern = SMESH::GetPattern();

    if (!aPattern->LoadFromFile(theName.toLatin1().data()) ||
        (myType == Type_2d && !aPattern->Is2D())) {
      SMESH::SMESH_Pattern::ErrorCode aCode = aPattern->GetErrorCode();
      QString aMess;
      if      (aCode == SMESH::SMESH_Pattern::ERR_READ_NB_POINTS     ) aMess = tr("ERR_READ_NB_POINTS");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_POINT_COORDS  ) aMess = tr("ERR_READ_POINT_COORDS");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_TOO_FEW_POINTS) aMess = tr("ERR_READ_TOO_FEW_POINTS");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_3D_COORD      ) aMess = tr("ERR_READ_3D_COORD");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_NO_KEYPOINT   ) aMess = tr("ERR_READ_NO_KEYPOINT");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_BAD_INDEX     ) aMess = tr("ERR_READ_BAD_INDEX");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_ELEM_POINTS   ) aMess = tr("ERR_READ_ELEM_POINTS");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_NO_ELEMS      ) aMess = tr("ERR_READ_NO_ELEMS");
      else if (aCode == SMESH::SMESH_Pattern::ERR_READ_BAD_KEY_POINT ) aMess = tr("ERR_READ_BAD_KEY_POINT");
      else                                                             aMess = tr("ERROR_OF_LOADING");

      SUIT_MessageBox::information(this, tr("SMESH_ERROR"), aMess);
      return false;
    } else {
      myPattern = aPattern;
      return true;
    }
  } catch (const SALOME::SALOME_Exception& S_ex) {
    SalomeApp_Tools::QtCatchCorbaException(S_ex);
    SUIT_MessageBox::information(this, tr("SMESH_ERROR"),
                                 tr("ERROR_OF_LOADING") );
    return false;
  }
}
bool SMESHGUI_MeshPatternDlg::onApply ( ) [private, slot]

Definition at line 462 of file SMESHGUI_MeshPatternDlg.cxx.

References _PTR(), SMESHGUI.automaticUpdate(), SMESH.CreateActor(), SMESH.DisplayActor(), erasePreview(), SMESH.FindActorByEntry(), SMESH.FitAll(), SMESH.GetActiveWindow(), getIds(), getNode(), Ids, SMESH_test.ids, isRefine(), isValid(), SMESHGUI.Modified(), myCreatePolyedrsChk, myCreatePolygonsChk, myGeomObj, myMesh, myNode1, myNode2, myPattern, myReverseChk, mySelectionMgr, mySelEdit, mySMESHGUI, myType, Object, Type_2d, Type_3d, SMESH.UpdateView(), Vertex1, and Vertex2.

Referenced by createButtonFrame(), and onOk().

{
  try {
    if (!isValid())
      return false;

    erasePreview();

    if (isRefine()) { // Refining existing mesh elements
      QList<int> ids;
      getIds(ids);
      SMESH::long_array_var varIds = new SMESH::long_array();
      varIds->length(ids.count());
      int i = 0;
      for (QList<int>::iterator it = ids.begin(); it != ids.end(); ++it)
        varIds[i++] = *it;
      myType == Type_2d
        ? myPattern->ApplyToMeshFaces  (myMesh, varIds, getNode(false), myReverseChk->isChecked())
        : myPattern->ApplyToHexahedrons(myMesh, varIds, getNode(false), getNode(true));

      QStringList aParameters;
      aParameters << myNode1->text();
      if(myType == Type_3d )
        aParameters << myNode2->text();
      myMesh->SetParameters( aParameters.join(":").toLatin1().constData() );

    } else { // Applying a pattern to geometrical object
      if (myType == Type_2d)
        myPattern->ApplyToFace(myGeomObj[Object], myGeomObj[Vertex1], myReverseChk->isChecked());
      else
        myPattern->ApplyTo3DBlock(myGeomObj[Object], myGeomObj[Vertex1], myGeomObj[Vertex2]);
    }

    bool toCreatePolygons = myCreatePolygonsChk->isChecked();
    bool toCreatePolyedrs = myCreatePolyedrsChk->isChecked();
    if ( myPattern->MakeMesh( myMesh, toCreatePolygons, toCreatePolyedrs ) ) {
      //mySelectionMgr->clearSelected();
      bool autoUpdate = SMESHGUI::automaticUpdate();
      if (!isRefine() && autoUpdate) {
        _PTR(SObject) aSO = SMESH::FindSObject(myMesh.in());
        SMESH_Actor* anActor = SMESH::FindActorByEntry(aSO->GetID().c_str());
        if (!anActor) {
          anActor = SMESH::CreateActor(aSO->GetStudy(), aSO->GetID().c_str());
          if (anActor) {
            SMESH::DisplayActor(SMESH::GetActiveWindow(), anActor);
            SMESH::FitAll();
          }
        }
      }
      mySelectionMgr->clearSelected();
      SMESH::UpdateView();
      SMESHGUI::Modified();

      mySMESHGUI->updateObjBrowser(true);

      mySelEdit[ Ids ]->setText("");

      return true;
    } else {
      SUIT_MessageBox::information(this, tr("SMESH_ERROR"),
                                   tr("SMESH_OPERATION_FAILED"));
      return false;
    }
  } catch (const SALOME::SALOME_Exception& S_ex) {
    SalomeApp_Tools::QtCatchCorbaException(S_ex);
  } catch (...) {
  }

  return false;
}
void SMESHGUI_MeshPatternDlg::onClose ( ) [private, slot]

Definition at line 547 of file SMESHGUI_MeshPatternDlg.cxx.

References erasePreview(), SMESH.GetViewWindow(), mySelectionMgr, mySMESHGUI, SMESHGUI.ResetState(), and SMESH.SetPickable().

Referenced by closeEvent(), createButtonFrame(), Init(), and onOk().

{
  mySelectionMgr->clearFilters();
  SMESH::SetPickable();
  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
    aViewWindow->SetSelectionMode(ActorSelection);
  disconnect(mySelectionMgr, 0, this, 0);
  disconnect(mySMESHGUI, 0, this, 0);
  mySMESHGUI->ResetState();
  erasePreview();
  reject();
}
void SMESHGUI_MeshPatternDlg::onCloseCreationDlg ( ) [private, slot]

Definition at line 836 of file SMESHGUI_MeshPatternDlg.cxx.

References myIsCreateDlgOpen.

Referenced by onNew().

{
  setEnabled(true);
  myIsCreateDlgOpen = false;
}
void SMESHGUI_MeshPatternDlg::onDeactivate ( ) [private, slot]

Definition at line 699 of file SMESHGUI_MeshPatternDlg.cxx.

References mySelectionMgr.

Referenced by Init().

{
  mySelectionMgr->clearFilters();
  //if (myReverseChk->isChecked())
  //  erasePreview();
  disconnect(mySelectionMgr, 0, this, 0);
  setEnabled(false);
}
void SMESHGUI_MeshPatternDlg::onHelp ( ) [private, slot]

Definition at line 564 of file SMESHGUI_MeshPatternDlg.cxx.

References myHelpFileName, and mySMESHGUI.

Referenced by createButtonFrame(), and keyPressEvent().

{
  LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
  if (app) 
    app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
  else {
                QString platform;
#ifdef WIN32
                platform = "winapplication";
#else
                platform = "application";
#endif
    SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
                             tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
                             arg(app->resourceMgr()->stringValue("ExternalBrowser", 
                                                                 platform)).
                             arg(myHelpFileName));
  }
}
void SMESHGUI_MeshPatternDlg::onModeToggled ( bool  on) [private, slot]

Definition at line 1338 of file SMESHGUI_MeshPatternDlg.cxx.

References displayPreview(), myGeomGrp, and myRefineGrp.

Referenced by createMainFrame(), and Init().

{
  on ? myRefineGrp->show() : myRefineGrp->hide();
  on ? myGeomGrp->hide()   : myGeomGrp->show();

  displayPreview();
}
void SMESHGUI_MeshPatternDlg::onNew ( ) [private, slot]
void SMESHGUI_MeshPatternDlg::onNodeChanged ( int  value) [private, slot]

Definition at line 1401 of file SMESHGUI_MeshPatternDlg.cxx.

References displayPreview(), myNode1, myNode2, myType, and Type_3d.

Referenced by createMainFrame().

{
  if (myType == Type_3d) {
    SalomeApp_IntSpinBox* first = (SalomeApp_IntSpinBox*)sender();
    SalomeApp_IntSpinBox* second = first == myNode1 ? myNode2 : myNode1;
    int secondVal = second->value();
    if (secondVal == value) {
      secondVal = value == second->maximum() ? second->minimum() : value + 1;
      bool blocked = second->signalsBlocked();
      second->blockSignals(true);
      second->setValue(secondVal);
      second->blockSignals(blocked);
    }
  }

  displayPreview();
}
void SMESHGUI_MeshPatternDlg::onOk ( ) [private, slot]

Definition at line 537 of file SMESHGUI_MeshPatternDlg.cxx.

References onApply(), and onClose().

Referenced by createButtonFrame().

{
  if (onApply())
    onClose();
}
void SMESHGUI_MeshPatternDlg::onOkCreationDlg ( ) [private, slot]
void SMESHGUI_MeshPatternDlg::onOpen ( ) [private, slot]

Definition at line 782 of file SMESHGUI_MeshPatternDlg.cxx.

References autoExtension(), displayPreview(), loadFromFile(), myName, prepareFilters(), and updateWgState().

Referenced by createMainFrame().

{
  SUIT_FileDlg* aDlg = new SUIT_FileDlg (this, true);
  aDlg->setWindowTitle(tr("LOAD_PATTERN"));
  aDlg->setFileMode(QFileDialog::ExistingFile);
  aDlg->setFilters(prepareFilters());
  if (!myName->text().isEmpty())
    aDlg->selectFile(myName->text() + ".smp");
  QPushButton* anOkBtn = qFindChild<QPushButton*>( aDlg, "OK" );
  if (anOkBtn != 0)
    anOkBtn->setText(tr("SMESH_BUT_OK"));

  if (aDlg->exec() != Accepted)
    return;

  QString fName = aDlg->selectedFile();
  if (fName.isEmpty())
    return;

  if (QFileInfo(fName).suffix().isEmpty())
    fName = autoExtension(fName);

  fName = QDir::convertSeparators(fName);

  QString prev = QDir::convertSeparators(myName->text());
  if (prev == fName)
    return;

  // Read string from file
  QFile aFile(fName);
  if (!aFile.open(QIODevice::ReadOnly)) {
    SUIT_MessageBox::information(this, tr("SMESH_ERROR"),
                                 tr("ERROR_OF_OPENING"));
    return;
  }

  QByteArray aDataArray = aFile.readAll();
  if (aDataArray.isEmpty()) {
    SUIT_MessageBox::information(this, tr("SMESH_ERROR"),
                                 tr("ERROR_OF_READING"));
    return;
  }

  if (loadFromFile(aDataArray))
    myName->setText(QFileInfo(fName).completeBaseName());

  updateWgState();
  displayPreview();
}
void SMESHGUI_MeshPatternDlg::onPreview ( bool  ) [private, slot]

Definition at line 896 of file SMESHGUI_MeshPatternDlg.cxx.

References displayPreview().

Referenced by createMainFrame().

void SMESHGUI_MeshPatternDlg::onReverse ( bool  ) [private, slot]

Definition at line 885 of file SMESHGUI_MeshPatternDlg.cxx.

References displayPreview().

Referenced by createMainFrame().

void SMESHGUI_MeshPatternDlg::onSelectionDone ( ) [private, slot]

Definition at line 588 of file SMESHGUI_MeshPatternDlg.cxx.

References _PTR(), SMESH_BelongToGeom.anIds, displayPreview(), SMESH.GetGeom(), SMESH.GetNameOfSelectedElements(), SMESH.GetNameOfSelectedIObjects(), Handle(), Ids, Mesh, myBusy, myGeomObj, myMesh, myMeshShape, mySelectionMgr, mySelector, mySelEdit, mySelInput, Object, resetSelInput(), updateWgState(), Vertex1, and Vertex2.

Referenced by enterEvent(), Init(), and onSelInputChanged().

{
  if (myBusy)
    return;

  try {
    if (mySelInput == Mesh) {
      SALOME_ListIO aList;
      mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
      if (aList.Extent() != 1)
        return;

      // Retrieve mesh from selection
      Handle(SALOME_InteractiveObject) anIO = aList.First();
      SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIO);
      if (aMesh->_is_nil())
        return;

      // Get geom object corresponding to the mesh
      _PTR(SObject) aSO = SMESH::FindSObject(aMesh.in());
      myMeshShape = SMESH::GetGeom(aSO);

      // Clear fields of geom objects if mesh was changed
      if (myMesh != aMesh) {
        for (int i = Object; i <= Ids; i++) {
          myGeomObj[ i ] = GEOM::GEOM_Object::_nil();
          mySelEdit[ i ]->setText("");
        }
      }

      myMesh = aMesh;

      // Set name of mesh in line edit
      QString aName;
      SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName);
      mySelEdit[ Mesh ]->setText(aName);

    } else if (mySelInput == Ids) {
      SALOME_ListIO aList;
      mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
      if (aList.Extent() != 1)
        return;

      QString anIds;
      if (!SMESH::GetNameOfSelectedElements(mySelector, aList.First(), anIds))
        anIds = "";

      myBusy = true;
      mySelEdit[ Ids ]->setText(anIds);
      myBusy = false;

    } else {
      SALOME_ListIO aList;
      mySelectionMgr->selectedObjects(aList, SVTK_Viewer::Type());
      if (aList.Extent() != 1)
        return;

      // Get geom object from selection
      Handle(SALOME_InteractiveObject) anIO = aList.First();
      GEOM::GEOM_Object_var anObj = SMESH::IObjectToInterface<GEOM::GEOM_Object>(anIO);
      if (anObj->_is_nil())
        return;

      // Clear fields of vertexes if face or 3d block was changed
      if (anObj != myGeomObj[ mySelInput ] && mySelInput == Object) {
        for (int i = Vertex1; i <= Vertex2; i++) {
          myGeomObj[ i ] = GEOM::GEOM_Object::_nil();
          mySelEdit[ i ]->setText("");
        }
      }

      myGeomObj[ mySelInput ] = anObj;

      // Set name of geom object in line edit
      QString aName;
      SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aName);
      mySelEdit[ mySelInput ]->setText(aName);
    }
  } catch (const SALOME::SALOME_Exception& S_ex) {
    SalomeApp_Tools::QtCatchCorbaException(S_ex);
    resetSelInput();
  } catch (...) {
    resetSelInput();
  }

  updateWgState();
  displayPreview();
}
void SMESHGUI_MeshPatternDlg::onSelInputChanged ( ) [private, slot]

Definition at line 740 of file SMESHGUI_MeshPatternDlg.cxx.

References activateSelection(), Ids, Mesh, mySelBtn, mySelInput, and onSelectionDone().

Referenced by createMainFrame().

{
  const QObject* aSender = sender();
  for (int i = Mesh; i <= Ids; i++)
    if (aSender == mySelBtn[ i ])
      mySelInput = i;

  activateSelection();
  onSelectionDone();
}
void SMESHGUI_MeshPatternDlg::onTextChanged ( const QString &  theNewText) [private, slot]

Definition at line 1359 of file SMESHGUI_MeshPatternDlg.cxx.

References activateSelection(), displayPreview(), SMESH.FindActorByObject(), SMDS_Mesh.FindElement(), SMDS_MeshElement.GetID(), SMESH_Actor.GetObject(), SMDS_MeshElement.GetType(), SMESH.GetViewWindow(), Ids, isRefine(), myBusy, myMesh, mySelector, mySelInput, mySMESHGUI, myType, SMDSAbs_Face, SMDSAbs_Volume, and Type_2d.

Referenced by createMainFrame(), and enterEvent().

{
  if (myBusy || !isRefine())
    return;

  myBusy = true;

  if (mySelInput != Ids) {
    mySelInput = Ids;
    activateSelection();
  }

  // hilight entered elements/nodes
  SMDS_Mesh* aMesh = 0;
  SMESH_Actor* anActor = SMESH::FindActorByObject(myMesh);
  if (anActor)
    aMesh = anActor->GetObject()->GetMesh();

  if (aMesh) {
    QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);

    TColStd_MapOfInteger newIndices;

    for (int i = 0; i < aListId.count(); i++) {
      const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt());
      if (e && e->GetType() == (myType == Type_2d ? SMDSAbs_Face : SMDSAbs_Volume))
        newIndices.Add(e->GetID());
    }
    mySelector->AddOrRemoveIndex( anActor->getIO(), newIndices, false);
    if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
      aViewWindow->highlight( anActor->getIO(), true, true );
  }

  myBusy = false;

  displayPreview();
}
void SMESHGUI_MeshPatternDlg::onTypeChanged ( int  theType) [private, slot]

Definition at line 1161 of file SMESHGUI_MeshPatternDlg.cxx.

References activateSelection(), displayPreview(), SMESH.GetPattern(), Ids, Mesh, myCreatePolyedrsChk, myCreatePolygonsChk, myGeomObj, myName, myNbPoints, myNode2, myNode2Lbl, myPattern, myPicture2d, myPicture3d, myReverseChk, mySelBtn, mySelEdit, mySelInput, mySelLbl, myType, Object, Type_2d, updateWgState(), Vertex1, and Vertex2.

Referenced by createMainFrame(), and Init().

{
  if (myType == theType)
    return;

  myType = theType;

  myNbPoints = -1;
  myGeomObj[ Object  ] = GEOM::GEOM_Object::_nil();
  myGeomObj[ Vertex1 ] = GEOM::GEOM_Object::_nil();
  myGeomObj[ Vertex2 ] = GEOM::GEOM_Object::_nil();
  myPattern = SMESH::GetPattern();

  myName->setText("");
  mySelEdit[ Object  ]->setText("");
  mySelEdit[ Vertex1 ]->setText("");
  mySelEdit[ Vertex2 ]->setText("");
  mySelEdit[ Ids ]    ->setText("");
  myCreatePolygonsChk->show();
  myCreatePolyedrsChk->show();

  if (theType == Type_2d) {
    // Geom widgets
    mySelLbl [ Vertex2 ]->hide();
    mySelBtn [ Vertex2 ]->hide();
    mySelEdit[ Vertex2 ]->hide();
    myReverseChk->show();
    myPicture2d->show();
    myPicture3d->hide();
    mySelLbl[ Object  ]->setText(tr("FACE"));
    mySelLbl[ Vertex1 ]->setText(tr("VERTEX"));
    // Refine widgets
    mySelLbl[ Ids ]->setText(tr("MESH_FACES"));
    myNode2Lbl->hide();
    myNode2   ->hide();
  } else {
    // Geom widgets
    mySelLbl [ Vertex2 ]->show();
    mySelBtn [ Vertex2 ]->show();
    mySelEdit[ Vertex2 ]->show();
    myReverseChk->hide();
    myPicture2d->hide();
    myPicture3d->show();
    mySelLbl[ Object  ]->setText(tr("3D_BLOCK"));
    mySelLbl[ Vertex1 ]->setText(tr("VERTEX1"));
    mySelLbl[ Vertex2 ]->setText(tr("VERTEX2"));
    // Refine widgets
    mySelLbl[ Ids ]->setText(tr("MESH_VOLUMES"));
    myNode2Lbl->show();
    myNode2   ->show();
  }

  mySelInput = Mesh;
  activateSelection();
  updateWgState();
  displayPreview();
}
QStringList SMESHGUI_MeshPatternDlg::prepareFilters ( ) const [private]

Definition at line 755 of file SMESHGUI_MeshPatternDlg.cxx.

Referenced by onOpen().

{
  static QStringList aList;
  if (aList.isEmpty())
  {
    aList.append(tr("PATTERN_FILT"));
    //aList.append(tr("ALL_FILES_FILTER"));
  }

  return aList;
}
void SMESHGUI_MeshPatternDlg::resetSelInput ( ) [private]

Definition at line 681 of file SMESHGUI_MeshPatternDlg.cxx.

References Mesh, myGeomObj, myMesh, myMeshShape, mySelEdit, and mySelInput.

Referenced by onSelectionDone().

{
  if (mySelInput == Mesh)
  {
    myMesh = SMESH::SMESH_Mesh::_nil();
    myMeshShape = GEOM::GEOM_Object::_nil();
  }

  else
    myGeomObj[ mySelInput ] = GEOM::GEOM_Object::_nil();

  mySelEdit[ mySelInput ]->setText("");
}
void SMESHGUI_MeshPatternDlg::updateWgState ( ) [private]

Definition at line 1016 of file SMESHGUI_MeshPatternDlg.cxx.

References SMESH_test.ids, Ids, myGeomObj, myMesh, myNode1, myNode2, myPattern, mySelBtn, mySelEdit, Object, Vertex1, and Vertex2.

Referenced by onOkCreationDlg(), onOpen(), onSelectionDone(), and onTypeChanged().

{
  if (myMesh->_is_nil()) {
    for (int i = Object; i <= Ids; i++) {
      mySelBtn [ i ]->setEnabled(false);
      mySelEdit[ i ]->setEnabled(false);
      mySelEdit[ i ]->setText("");
    }
    myNode1->setEnabled(false);
    myNode2->setEnabled(false);
    myNode1->setRange(0, 0);
    myNode2->setRange(0, 0);
  } else {
    mySelBtn [ Object ]->setEnabled(true);
    mySelEdit[ Object ]->setEnabled(true);
    mySelBtn [ Ids ]   ->setEnabled(true);
    mySelEdit[ Ids ]   ->setEnabled(true);

    if (myGeomObj[ Object ]->_is_nil()) {
      for (int i = Vertex1; i <= Vertex2; i++) {
        mySelBtn [ i ]->setEnabled(false);
        mySelEdit[ i ]->setEnabled(false);
        mySelEdit[ i ]->setText("");
      }
    } else {
      for (int i = Object; i <= Vertex2; i++) {
        mySelBtn [ i ]->setEnabled(true);
        mySelEdit[ i ]->setEnabled(true);
      }
    }

    QList<int> ids;
    if (!CORBA::is_nil(myPattern)/* && getIds(ids)*/) {
      SMESH::long_array_var keyPoints = myPattern->GetKeyPoints();
      if (keyPoints->length()) {
        myNode1->setEnabled(true);
        myNode2->setEnabled(true);
        myNode1->setRange(1, keyPoints->length());
        myNode2->setRange(1, keyPoints->length());
        return;
      }
    }

    myNode1->setEnabled(false);
    myNode2->setEnabled(false);
    myNode1->setRange(0, 0);
    myNode2->setRange(0, 0);
  }
}

Field Documentation

QPushButton* SMESHGUI_MeshPatternDlg.myApplyBtn [private]

Definition at line 123 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createButtonFrame().

Definition at line 162 of file SMESHGUI_MeshPatternDlg.h.

Referenced by onSelectionDone(), and onTextChanged().

QPushButton* SMESHGUI_MeshPatternDlg.myCloseBtn [private]

Definition at line 124 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createButtonFrame().

Definition at line 149 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), onApply(), and onTypeChanged().

Definition at line 148 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), onApply(), and onTypeChanged().

Definition at line 168 of file SMESHGUI_MeshPatternDlg.h.

Referenced by onNew(), and onOkCreationDlg().

Definition at line 138 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and onModeToggled().

QMap<int, GEOM::GEOM_Object_var> SMESHGUI_MeshPatternDlg.myGeomObj [private]
QPushButton* SMESHGUI_MeshPatternDlg.myHelpBtn [private]

Definition at line 125 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createButtonFrame().

Definition at line 172 of file SMESHGUI_MeshPatternDlg.h.

Referenced by onHelp(), and SMESHGUI_MeshPatternDlg().

SMESH::SMESH_Mesh_var SMESHGUI_MeshPatternDlg.myMesh [private]
GEOM::GEOM_Object_var SMESHGUI_MeshPatternDlg.myMeshShape [private]
QLineEdit* SMESHGUI_MeshPatternDlg.myName [private]

Definition at line 159 of file SMESHGUI_MeshPatternDlg.h.

Referenced by activateSelection(), Init(), and onTypeChanged().

QPushButton* SMESHGUI_MeshPatternDlg.myNewBtn [private]

Definition at line 145 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame().

SalomeApp_IntSpinBox* SMESHGUI_MeshPatternDlg.myNode1 [private]
SalomeApp_IntSpinBox* SMESHGUI_MeshPatternDlg.myNode2 [private]

Definition at line 136 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and onTypeChanged().

QPushButton* SMESHGUI_MeshPatternDlg.myOkBtn [private]

Definition at line 122 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createButtonFrame().

QPushButton* SMESHGUI_MeshPatternDlg.myOpenBtn [private]

Definition at line 144 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame().

SMESH::SMESH_Pattern_var SMESHGUI_MeshPatternDlg.myPattern [private]

Definition at line 151 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and onTypeChanged().

Definition at line 170 of file SMESHGUI_MeshPatternDlg.h.

Referenced by displayPreview(), erasePreview(), and Init().

Definition at line 153 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and displayPreview().

QCheckBox* SMESHGUI_MeshPatternDlg.myRefine [private]

Definition at line 131 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and isRefine().

Definition at line 133 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and onModeToggled().

QMap<int, QPushButton*> SMESHGUI_MeshPatternDlg.mySelBtn [private]
LightApp_SelectionMgr* SMESHGUI_MeshPatternDlg.mySelectionMgr [private]
SVTK_Selector* SMESHGUI_MeshPatternDlg.mySelector [private]
QMap<int, QLineEdit*> SMESHGUI_MeshPatternDlg.mySelEdit [private]
QMap<int, QLabel*> SMESHGUI_MeshPatternDlg.mySelLbl [private]

Definition at line 141 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and onTypeChanged().

QRadioButton* SMESHGUI_MeshPatternDlg.mySwitch2d [private]

Definition at line 128 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame().

QRadioButton* SMESHGUI_MeshPatternDlg.mySwitch3d [private]

Definition at line 129 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame().

QButtonGroup* SMESHGUI_MeshPatternDlg.myTypeGrp [private]

Definition at line 127 of file SMESHGUI_MeshPatternDlg.h.

Referenced by createMainFrame(), and Init().

Copyright © 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS