unsigned int anEntityMode = myActor->GetEntityMode();
myActor->SetEntityMode(SMESH_Actor::eVolumes | anEntityMode);
}
- ConstructorsClicked( GetConstructorId() );
+ //ConstructorsClicked( GetConstructorId() );
busy = false;
}
}
void SMESHGUI_CreatePolyhedralVolumeDlg::onTextChange(const QString& theNewText)
{
if ( busy ) return;
+ if (checkEditLine() == -1) return;
busy = true;
mySimulation->SetVisibility(false);
}
busy = true;
myEditCurrentArgument->setText( aString );
+ if (checkEditLine() == -1) {busy = false;return;}
busy = false;
break;
}
}
busy = true;
myEditCurrentArgument->setText( aString );
+ if (checkEditLine() == -1) {busy = false;return;}
busy = false;
// OK
displaySimulation();
}
+/*\brief int SMESHGUI_CreatePolyhedralVolumeDlg::checkEditLine()
+ * Checking of indices in edit line.
+ * If incorecct indices in edit line warning message appear and myEditCurrentArgument remove last index.
+ * \retval 1 - if all ok(or no indices in edit line), -1 - if there are incorrect indices.
+ */
+int SMESHGUI_CreatePolyhedralVolumeDlg::checkEditLine(bool checkLast)
+{
+ QString aString = "";
+ SMDS_Mesh* aMesh = 0;
+
+ if(myMesh->_is_nil()) return 1;
+ if(!myActor){
+ myActor = SMESH::FindActorByObject(myMesh);
+ if(!myActor)
+ return 1;
+ }
+
+ aMesh = myActor->GetObject()->GetMesh();
+
+ // checking for nodes
+ if (checkLast && myEditCurrentArgument->text().right(1) != QString(" ") ) return 1;
+ QStringList aListId = QStringList::split( " ", myEditCurrentArgument->text() );
+ for ( int i = 0; i < aListId.count(); i++ ){
+ switch (GetConstructorId()){
+ case 0:{ // nodes
+ const SMDS_MeshNode * aNode = aMesh->FindNode( aListId[ i ].toInt() );
+ if( !aNode ){
+ std::string aWarning;
+ aWarning = "The incorrect indices of nodes!";
+ SUIT_MessageBox::warn1(SMESHGUI::desktop(),
+ QObject::tr("SMESH_POLYEDRE_CREATE_ERROR"),
+ QObject::tr(aWarning.c_str()),
+ QObject::tr("SMESH_BUT_OK"));
+
+ myEditCurrentArgument->clear();
+ myEditCurrentArgument->setText( aString );
+ return -1;
+ }
+
+ break;
+ }
+ case 1:{ // faces
+ bool aElemIsOK = true;
+ const SMDS_MeshElement * aElem = aMesh->FindElement( aListId[ i ].toInt() );
+ if (!aElem)
+ {
+ aElemIsOK = false;
+ }
+ else
+ {
+ SMDSAbs_ElementType aType = aMesh->GetElementType( aElem->GetID(),true );
+ if (aType != SMDSAbs_Face){
+ aElemIsOK = false;
+ }
+ }
+ if (!aElemIsOK){
+ std::string aWarning;
+ aWarning = "The incorrect indices of faces!";
+ SUIT_MessageBox::warn1(SMESHGUI::desktop(),
+ QObject::tr("SMESH_POLYEDRE_CREATE_ERROR"),
+ QObject::tr(aWarning.c_str()),
+ QObject::tr("SMESH_BUT_OK"));
+
+ myEditCurrentArgument->clear();
+ myEditCurrentArgument->setText( aString );
+ return -1;
+ }
+ break;
+ }
+ }
+ aString += aListId[ i ] + " ";
+ }
+
+ return 1;
+}
+
//=======================================================================
//function : displaySimulation
//purpose :
{
SMESH::TPolySimulation::TVTKIds aVTKIds;
vtkIdType aType = VTK_CONVEX_POINT_SET ;
- if (GetConstructorId() == 0){
+ SMDS_Mesh* aMesh = 0;
+ if ( myActor ){
+ aMesh = myActor->GetObject()->GetMesh();
+ }
+ if (GetConstructorId() == 0 && aMesh){
if (!AddButton->isEnabled()){
QListBoxItem* anItem;
mySimulation->ResetGrid(true);
QStringList anIds = QStringList::split(" ", anItem->text());
SMESH::TPolySimulation::TVTKIds aVTKIds_faces;
for (QStringList::iterator it = anIds.begin(); it != anIds.end(); ++it){
+ const SMDS_MeshNode * aNode = aMesh->FindNode( (*it).toInt() );
+ if (!aNode) continue;
vtkIdType aId = myActor->GetObject()->GetNodeVTKId( (*it).toInt() ) ;
aVTKIds.push_back(aId);
aVTKIds_faces.push_back(aId);
aType = VTK_POLYGON;
mySimulation->SetPosition(myActor, aType, aVTKIds);
}
- }else if(GetConstructorId() == 1){
- SMDS_Mesh* aMesh = 0;
- if ( myActor ){
- aMesh = myActor->GetObject()->GetMesh();
- }
- if ( aMesh ) {
- QStringList aListId = QStringList::split( " ", myEditCurrentArgument->text(), false);
- for ( int i = 0; i < aListId.count(); i++ )
- {
- const SMDS_MeshElement * anElem = aMesh->FindElement( aListId[ i ].toInt() );
- if ( !anElem )
- return;
+ }else if(GetConstructorId() == 1 && aMesh){
+ QStringList aListId = QStringList::split( " ", myEditCurrentArgument->text(), false);
+ for ( int i = 0; i < aListId.count(); i++ )
+ {
+ const SMDS_MeshElement * anElem = aMesh->FindElement( aListId[ i ].toInt() );
+ if ( !anElem ) continue;
+ SMDSAbs_ElementType aFaceType = aMesh->GetElementType( anElem->GetID(),true );
+ if (aFaceType != SMDSAbs_Face) continue;
- SMDS_ElemIteratorPtr anIter = anElem->nodesIterator();
- SMESH::TPolySimulation::TVTKIds aVTKIds_faces;
- while( anIter->more() )
+ SMDS_ElemIteratorPtr anIter = anElem->nodesIterator();
+ SMESH::TPolySimulation::TVTKIds aVTKIds_faces;
+ while( anIter->more() )
if ( const SMDS_MeshNode* aNode = (SMDS_MeshNode*)anIter->next() ){
vtkIdType aId = myActor->GetObject()->GetNodeVTKId( aNode->GetID() ) ;
aVTKIds.push_back(aId);
aVTKIds_faces.push_back(aId);
}
- if(!Preview->isChecked()){
- aType = VTK_POLYGON;
- mySimulation->SetPosition(myActor, aType, aVTKIds_faces);
- }
+ if(!Preview->isChecked()){
+ aType = VTK_POLYGON;
+ mySimulation->SetPosition(myActor, aType, aVTKIds_faces);
}
- if(Preview->isChecked())
- mySimulation->SetPosition(myActor, aType, aVTKIds);
- }
+ }
+ if(Preview->isChecked())
+ mySimulation->SetPosition(myActor, aType, aVTKIds);
}
SMESH::UpdateView();
}
mySelectionMgr->selectedObjects( selected );
int aNbSel = selected.Extent();
if (aNbSel == 0 || !myActor || myMesh->_is_nil()) return;
+
+ if (this->checkEditLine(false) == -1) return;
busy = true;
-
if ( !(myEditCurrentArgument->text().isEmpty()) )
{
myFacesByNodes->insertItem(myEditCurrentArgument->text());