X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_AddMeshElementDlg.cxx;h=b1082076dbbc2dc3ba473403ebe94cb879b53b21;hp=00f8467b28ad77b6c8a0e07c4c783f90d1f529cd;hb=a274ade365bd0f0e19d56c577acc4a13aa1972a7;hpb=a17b36970bc61da1d664453c615754997c925b18 diff --git a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx index 00f8467b2..b1082076d 100644 --- a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 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 @@ -40,7 +40,7 @@ #include #include -// SALOME GUI inclues +// SALOME GUI includes #include #include #include @@ -56,7 +56,7 @@ #include -// IDL incldues +// IDL includes #include CORBA_SERVER_HEADER(SMESH_MeshEditor) // OCCT includes @@ -217,6 +217,7 @@ namespace SMESH void SetBallPosition(SMESH_Actor* theActor,TVTKIds& theIds, double theDiameter) { vtkUnstructuredGrid *aGrid = theActor->GetUnstructuredGrid(); + myBallPolyData->SetPoints(NULL); myBallPolyData->Reset(); myBallPolyData->DeleteCells(); myBallPolyData->SetPoints(aGrid->GetPoints()); @@ -307,68 +308,68 @@ SMESHGUI_AddMeshElementDlg::SMESHGUI_AddMeshElementDlg( SMESHGUI* theMo myNbNodes = 1; myElementType = SMDSAbs_0DElement; elemName = "ELEM0D"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_0delems_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-0delems-anchor"; break; case SMDSEntity_Ball: myNbNodes = 1; myElementType = SMDSAbs_Ball; elemName = "BALL"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_ball_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-balls-anchor"; break; case SMDSEntity_Edge: myNbNodes = 2; myElementType = SMDSAbs_Edge; elemName = "EDGE"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_edges_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-edges-anchor"; break; case SMDSEntity_Triangle: myNbNodes = 3; elemName = "TRIANGLE"; myElementType = SMDSAbs_Face; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_triangles_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-triangles-anchor"; break; case SMDSEntity_Quadrangle: myNbNodes = 4; myElementType = SMDSAbs_Face; elemName = "QUADRANGLE"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_quadrangles_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-quadrangles-anchor"; break; case SMDSEntity_Polygon: myNbNodes = 0; myElementType = SMDSAbs_Face; elemName = "POLYGON"; myIsPoly = true; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_polygons_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-polygons-anchor"; break; case SMDSEntity_Tetra: myNbNodes = 4; elemName = "TETRAS"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_tetrahedrons_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-tetrahedrons-anchor"; break; case SMDSEntity_Pyramid: myNbNodes = 5; elemName = "PYRAMID"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_pyramids_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-pyramids-anchor"; break; case SMDSEntity_Hexa: myNbNodes = 8; elemName = "HEXAS"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_hexahedrons_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-hexahedrons-anchor"; break; case SMDSEntity_Penta: myNbNodes = 6; elemName = "PENTA"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_pentahedrons_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-pentahedrons-anchor"; break; case SMDSEntity_Hexagonal_Prism: myNbNodes = 12; elemName = "OCTA"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_octahedrons_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-octahedrons-anchor"; break; default: myNbNodes = 2; elemName = "EDGE"; - myHelpFileName = "adding_nodes_and_elements_page.html#adding_edges_anchor"; + myHelpFileName = "adding_nodes_and_elements.html#adding-edges-anchor"; } QString iconName = tr(QString("ICON_DLG_%1").arg(elemName).toLatin1().data()); @@ -413,7 +414,9 @@ SMESHGUI_AddMeshElementDlg::SMESHGUI_AddMeshElementDlg( SMESHGUI* theMo LineEditC1A1->setValidator (new SMESHGUI_IdValidator(this, ( myIsPoly || myNbNodes == 1 ) ? 1000 : myNbNodes)); - Reverse = (myElementType == SMDSAbs_Face || myElementType == SMDSAbs_Volume ) ? new QCheckBox(tr("SMESH_REVERSE"), GroupC1) : 0; + ReverseOrDulicate = (myElementType == SMDSAbs_Face || myElementType == SMDSAbs_Volume ) ? new QCheckBox(tr("SMESH_REVERSE"), GroupC1) : 0; + if ( myElementType == SMDSAbs_0DElement ) + ReverseOrDulicate = new QCheckBox(tr("SMESH_DUPLICATE_0D"), GroupC1); DiameterSpinBox = ( myGeomType == SMDSEntity_Ball ) ? new SMESHGUI_SpinBox(GroupC1) : 0; QLabel* diameterLabel = DiameterSpinBox ? new QLabel( tr("BALL_DIAMETER"),GroupC1) : 0; @@ -421,8 +424,8 @@ SMESHGUI_AddMeshElementDlg::SMESHGUI_AddMeshElementDlg( SMESHGUI* theMo GroupC1Layout->addWidget(TextLabelC1A1, 0, 0); GroupC1Layout->addWidget(SelectButtonC1A1, 0, 1); GroupC1Layout->addWidget(LineEditC1A1, 0, 2); - if ( Reverse ) { - GroupC1Layout->addWidget(Reverse, 1, 0, 1, 3); + if ( ReverseOrDulicate ) { + GroupC1Layout->addWidget(ReverseOrDulicate, 1, 0, 1, 3); } if ( DiameterSpinBox ) { GroupC1Layout->addWidget(diameterLabel, 1, 0); @@ -524,8 +527,8 @@ void SMESHGUI_AddMeshElementDlg::Init() connect(mySMESHGUI, SIGNAL(SignalActivatedViewManager()), SLOT(onOpenView())); connect(mySMESHGUI, SIGNAL(SignalCloseView()), SLOT(onCloseView())); - if (Reverse) - connect(Reverse, SIGNAL(stateChanged(int)), SLOT(CheckBox(int))); + if (ReverseOrDulicate) + connect(ReverseOrDulicate, SIGNAL(stateChanged(int)), SLOT(CheckBox(int))); // set selection mode SMESH::SetPointRepresentation(true); @@ -547,16 +550,16 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply() if( !isValid() ) return; - if (myNbOkNodes && !mySMESHGUI->isActiveStudyLocked()) { + if (myNbOkNodes && !SMESHGUI::isStudyLocked()) { myBusy = true; QStringList aListId = myEditCurrentArgument->text().split(" ", QString::SkipEmptyParts); SMESH::long_array_var anArrayOfIndices = new SMESH::long_array; anArrayOfIndices->length(aListId.count()); const std::vector& revIndex = SMDS_MeshCell::reverseSmdsOrder( myGeomType ); - if ( Reverse && Reverse->isChecked() && !revIndex.empty() ) + if ( ReverseOrDulicate && ReverseOrDulicate->isChecked() && (int)revIndex.size() == aListId.count() ) for (int i = 0; i < aListId.count(); i++) anArrayOfIndices[i] = aListId[ revIndex[i] ].toInt(); - else if ( Reverse && Reverse->isChecked() && revIndex.empty() ) // polygon + else if ( ReverseOrDulicate && ReverseOrDulicate->isChecked() && revIndex.empty() ) // polygon for (int i = 0; i < aListId.count(); i++) anArrayOfIndices[i] = aListId[ aListId.count()-1 - i ].toInt(); else @@ -598,16 +601,23 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply() SMESH::long_array_var anIdList = new SMESH::long_array; anIdList->length( 1 ); anIdList[0] = -1; - //const bool onlyNodesInMesh = ( myMesh->NbElements() == 0 ); int nbElemsBefore = 0; switch (myElementType) { - case SMDSAbs_0DElement: + case SMDSAbs_0DElement: { + bool duplicateElements = ReverseOrDulicate->isChecked(); nbElemsBefore = myMesh->Nb0DElements(); anIdList->length( anArrayOfIndices->length() ); for ( size_t i = 0; i < anArrayOfIndices->length(); ++i ) - anIdList[i] = aMeshEditor->Add0DElement(anArrayOfIndices[i]); + anIdList[i] = aMeshEditor->Add0DElement(anArrayOfIndices[i], duplicateElements); + + CORBA::ULong nbAdded = myMesh->Nb0DElements() - nbElemsBefore; + if ( !duplicateElements && nbAdded < anArrayOfIndices->length() ) + SUIT_MessageBox::information(SMESHGUI::desktop(), + tr("SMESH_INFORMATION"), + tr("NB_ADDED").arg( nbAdded )); break; + } case SMDSAbs_Ball: if ( myGeomType == SMDSEntity_Ball ) { nbElemsBefore = myMesh->NbBalls(); @@ -672,8 +682,7 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply() mySelectionMgr->setSelectedObjects( aList, false ); mySimulation->SetVisibility(false); - // if ( onlyNodesInMesh ) - // myActor->SetRepresentation( SMESH_Actor::eEdge ); // wireframe + if ( nbElemsBefore == 0 ) { // 1st element of the type has been added, update actor to show this entity @@ -769,7 +778,7 @@ void SMESHGUI_AddMeshElementDlg::onTextChange (const QString& theNewText) mySimulation->SetVisibility(false); - // hilight entered nodes + // highlight entered nodes SMDS_Mesh* aMesh = 0; if (myActor) aMesh = myActor->GetObject()->GetMesh(); @@ -908,10 +917,10 @@ void SMESHGUI_AddMeshElementDlg::displaySimulation() for (int i = 0; i < aListId.count(); i++) anIds.push_back(myActor->GetObject()->GetNodeVTKId(aListId[ i ].toInt())); - if (Reverse && Reverse->isChecked()) + if (ReverseOrDulicate && ReverseOrDulicate->isChecked()) { const std::vector& i = SMDS_MeshCell::reverseSmdsOrder( myGeomType ); - if ( i.empty() ) // polygon + if ( i.size() != anIds.size() ) // polygon std::reverse( anIds.begin(), anIds.end() ); else SMDS_MeshCell::applyInterlace( i, anIds );