-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#include "SMESHGUI_MeshUtils.h"
#include "SMESHGUI_FilterUtils.h"
#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_MeshEditPreview.h"
#include <SMESH_Actor.h>
#include <SMESH_TypeFilter.hxx>
::SMESHGUI_MultiEditDlg(SMESHGUI* theModule,
const int theMode,
const bool the3d2d):
- QDialog(SMESH::GetDesktop(theModule)),
+ SMESHGUI_PreviewDlg(theModule),
mySelector(SMESH::GetViewWindow(theModule)->GetSelector()),
mySelectionMgr(SMESH::GetSelectionMgr(theModule)),
mySMESHGUI(theModule)
{
myIds.Clear();
obj = SMESH::SMESH_IDSource::_narrow( myMesh );
-// SMESH_Actor * anActor = SMESH::FindActorByObject(myMesh);
-// if (!anActor)
-// anActor = myActor;
-// if (anActor != 0)
-// {
-// // skl 07.02.2006
-// SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh();
-// if( myFilterType == SMESH::TriaFilter ||
-// myFilterType == SMESH::QuadFilter ||
-// myFilterType == SMESH::FaceFilter ) {
-// SMDS_FaceIteratorPtr it = aMesh->facesIterator();
-// while(it->more()) {
-// const SMDS_MeshFace* f = it->next();
-// if(myFilterType == SMESH::FaceFilter) {
-// myIds.Add(f->GetID());
-// }
-// else if( myFilterType==SMESH::TriaFilter &&
-// ( f->NbNodes()==3 || f->NbNodes()==6 ) ) {
-// myIds.Add(f->GetID());
-// }
-// else if( myFilterType==SMESH::QuadFilter &&
-// ( f->NbNodes()==4 || f->NbNodes()==8 ) ) {
-// myIds.Add(f->GetID());
-// }
-// }
-// }
-// else if(myFilterType == SMESH::VolumeFilter) {
-// SMDS_VolumeIteratorPtr it = aMesh->volumesIterator();
-// while(it->more()) {
-// const SMDS_MeshVolume* f = it->next();
-// myIds.Add(f->GetID());
-// }
-// }
- /* commented by skl 07.02.2006 - to work with quadratic elements
- TVisualObjPtr aVisualObj = anActor->GetObject();
- vtkUnstructuredGrid* aGrid = aVisualObj->GetUnstructuredGrid();
- if (aGrid != 0) {
- for (int i = 0, n = aGrid->GetNumberOfCells(); i < n; i++) {
- vtkCell* aCell = aGrid->GetCell(i);
- if (aCell != 0) {
- vtkTriangle* aTri = vtkTriangle::SafeDownCast(aCell);
- vtkQuad* aQua = vtkQuad::SafeDownCast(aCell);
- vtkPolygon* aPG = vtkPolygon::SafeDownCast(aCell);
-
- vtkCell3D* a3d = vtkCell3D::SafeDownCast(aCell);
- vtkConvexPointSet* aPH = vtkConvexPointSet::SafeDownCast(aCell);
-
- if (aTri && myFilterType == SMESHGUI_TriaFilter ||
- aQua && myFilterType == SMESHGUI_QuadFilter ||
- (aTri || aQua || aPG) && myFilterType == SMESHGUI_FaceFilter ||
- (a3d || aPH) && myFilterType == SMESHGUI_VolumeFilter) {
- int anObjId = aVisualObj->GetElemObjId(i);
- myIds.Add(anObjId);
- }
- }
- }
- }
- */
- //}
}
anIds->length(myIds.Extent());
anItem->setSelected(true);
}
}
- myMesh = SMESH::GetMeshByIO(anIO);
+ SMESH::SMESH_Mesh_var aSelMesh = SMESH::GetMeshByIO(anIO);
+ if (!aSelMesh->_is_nil())
+ myMesh = aSelMesh;
}
if (nbSel > 0) {
myFilterDlg->SetSelection();
myFilterDlg->SetMesh(myMesh);
- myFilterDlg->SetSourceWg(myListBox);
+ myFilterDlg->SetSourceWg(myListBox, false);
myFilterDlg->show();
}
{
SMESH::RemoveFilters();
- mySelectionMgr->clearSelected();
+ // mySelectionMgr->clearSelected();
mySelectionMgr->clearFilters();
if (mySubmeshChk->isChecked()) {
{
setWindowTitle(tr("CAPTION"));
+ //Preview check box
+ myPreviewCheckBox = new QCheckBox(tr("PREVIEW"), mySelGrp);
+ QGridLayout* aLay = (QGridLayout*)(mySelGrp->layout());
+ aLay->addWidget(myPreviewCheckBox, aLay->rowCount(), 0, 1, aLay->columnCount());
+
myComboBoxFunctor->setEnabled(true);
myComboBoxFunctor->addItem(tr("AREA_ELEMENTS"));
myComboBoxFunctor->addItem(tr("WARP_ELEMENTS")); // for quadrangles only
((QVBoxLayout*)(myCriterionGrp->layout()))->addWidget(aMaxAngleGrp);
myCriterionGrp->show();
+ connect(myComboBoxFunctor, SIGNAL(activated(int)), this, SLOT(toDisplaySimulation()));
+ connect(myMaxAngleSpin, SIGNAL(valueChanged(int)), this, SLOT(toDisplaySimulation()));
+ connect(this, SIGNAL(ListContensChanged()), this, SLOT(toDisplaySimulation()));
+ connectPreviewControl(); //To Connect preview check box
+
+ myPreviewCheckBox->setChecked(false);
+ onDisplaySimulation(false);
+
myHelpFileName = "uniting_set_of_triangles_page.html";
}
ok = theEditor->TriToQuadObject(obj, aCriterion, aMaxAngle);
return ok;
}
-
+
+void SMESHGUI_UnionOfTrianglesDlg::onDisplaySimulation( bool toDisplayPreview )
+{
+ if ( myPreviewCheckBox->isChecked() && toDisplayPreview ) {
+ if ( isValid( true ) ) {
+ try{
+ SUIT_OverrideCursor aWaitCursor;
+ // get Ids of elements
+ SMESH::SMESH_IDSource_var obj;
+ SMESH::long_array_var anElemIds = getIds( obj );
+
+ SMESH::NumericalFunctor_var aCriterion = getNumericalFunctor();
+ SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditPreviewer();
+
+ double aMaxAngle = myMaxAngleSpin->GetValue() * M_PI / 180.0;
+
+ if ( CORBA::is_nil( obj ) )
+ aMeshEditor->TriToQuad( anElemIds.inout(), aCriterion, aMaxAngle );
+ else
+ aMeshEditor->TriToQuadObject( obj, aCriterion, aMaxAngle );
+
+ SMESH::MeshPreviewStruct_var aMeshPreviewStruct = aMeshEditor->GetPreviewData();
+
+ vtkProperty* aProp = vtkProperty::New();
+ aProp->SetRepresentationToWireframe();
+ aProp->SetColor( 250, 0, 250 );
+ aProp->SetLineWidth( SMESH::GetFloat( "SMESH:element_width", 1 ) + 3 );
+ mySimulation->GetActor()->SetProperty( aProp );
+ aProp->Delete();
+
+ mySimulation->SetData( aMeshPreviewStruct._retn() );
+ } catch ( ... ) {
+ hidePreview();
+ }
+ } else {
+ hidePreview();
+ }
+ } else {
+ hidePreview();
+ }
+}
/*!
* Class : SMESHGUI_CuttingOfQuadsDlg
QGridLayout* aLay = (QGridLayout*)(mySelGrp->layout());
aLay->addWidget(myPreviewChk, aLay->rowCount(), 0, 1, aLay->columnCount());
+ // "split to 4 tria" option
+
+ QRadioButton* to4TriaRB = new QRadioButton(tr("TO_4_TRIA"), myChoiceWidget);
+ ((QVBoxLayout*)(myCriterionGrp->layout()))->insertWidget(0, to4TriaRB);
+ myGroupChoice->addButton(to4TriaRB, 3);
+ to4TriaRB->setChecked(true);
+ onCriterionRB();
+
myCriterionGrp->show();
myChoiceWidget->show();
myComboBoxFunctor->insertItem(0, tr("MIN_DIAG_ELEMENTS"));
return hasObj ? theEditor->SplitQuadObject(obj, true) : theEditor->SplitQuad(theIds, true);
case 1: // use diagonal 2-4
return hasObj ? theEditor->SplitQuadObject(obj, false) : theEditor->SplitQuad(theIds, false);
+ case 3: // split to 4 tria
+ {
+ if ( hasObj )
+ return theEditor->QuadTo4Tri( obj ), true;
+ SMESH::SMESH_IDSource_wrap elems = theEditor->MakeIDSource( theIds, SMESH::FACE );
+ theEditor->QuadTo4Tri( elems );
+ return true;
+ }
default: // use numeric functor
break;
}
else
myComboBoxFunctor->setEnabled(false);
+ if (myGroupChoice->checkedId() == 3) // To 4 tria
+ {
+ if ( myPreviewChk->isChecked() )
+ myPreviewChk->setChecked( false );
+ myPreviewChk->setEnabled( false );
+ }
+ else
+ {
+ myPreviewChk->setEnabled( true );
+ }
onPreviewChk();
}
if (myPreviewActor != 0)
erasePreview();
+ SUIT_OverrideCursor aWaitCursor;
// get Ids of elements
SMESH::SMESH_IDSource_var obj;
SMESH::long_array_var anElemIds = getIds(obj);
return;
}
+ if ( anElemIds->length() == 0 ) {
+ anElemIds = obj->GetIDs();
+ }
+
//Create grid
vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::New();
const SMESH::long_array& theIds,
SMESH::SMESH_IDSource_ptr theObj)
{
- SMESH::SMESH_IDSource_var obj = theObj;
+ SMESH::SMESH_IDSource_wrap obj = theObj;
if ( CORBA::is_nil( obj ))
obj = theEditor->MakeIDSource( theIds, myEntityType ? SMESH::VOLUME : SMESH::FACE );
+ else
+ obj->Register();
try {
theEditor->SplitVolumesIntoTetra( obj, myGroupChoice->checkedId()+1 );
}
SalomeApp_Tools::QtCatchCorbaException( S_ex );
return false;
}
+ catch(...) {
+ return false;
+ }
return true;
}