- QString meshName = myDlg->needNewMesh() ? myDlg->getNewMeshName() : QString();
- QString groupName = myDlg->needGroup() ? myDlg->getGroupName() : QString();
- bool copySrc = myDlg->copySource();
- bool copyAll = !myDlg->copyMissingOnly();
-
- SMESH::SMESH_Mesh_var srcMesh = SMESH::SMESH_Mesh::_narrow( obj );
- if ( CORBA::is_nil( srcMesh ) ) {
- SMESH::SMESH_subMesh_var subMesh = SMESH::SMESH_subMesh::_narrow( obj );
- if ( !CORBA::is_nil( subMesh ) )
- srcMesh = subMesh->GetFather();
- }
- if ( CORBA::is_nil( srcMesh ) ) {
- SMESH::SMESH_GroupBase_var grp = SMESH::SMESH_GroupBase::_narrow( obj );
- if ( !CORBA::is_nil( grp ) )
- srcMesh = grp->GetMesh();
+ QString meshName = myDlg->needNewMesh() ? myDlg->getNewMeshName() : QString();
+ QString groupName = myDlg->needGroup() ? myDlg->getGroupName() : QString();
+ bool copyAll = myDlg->copySource();
+
+ QStringList entries;
+ dlg()->selectedObject( SMESHGUI_Make2DFrom3DDlg::MeshOrGroups, entries );
+ SMESH::ListOfIDSources_var groups = new SMESH::ListOfIDSources;
+ QString wrongGroups = "";
+
+ if ( mySrcMesh->_is_nil() ) // get selected groups, find groups of wrong type
+ {
+ int nbGroups = 0;
+ int goodType = ( mode == SMESH::BND_2DFROM3D ? SMESH::VOLUME : SMESH::FACE );
+ groups->length( entries.count() );
+ for ( int i = 0; i < entries.count(); ++i )
+ {
+ _PTR(SObject) sobj =
+ SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() );
+ SMESH::SMESH_IDSource_var grp = SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( sobj );
+ SMESH::array_of_ElementType_var types = grp->GetTypes();
+ if ( types->length() < 1 || types[0] != goodType )
+ {
+ if ( !wrongGroups.isEmpty() )
+ wrongGroups += ", ";
+ wrongGroups += sobj->GetName().c_str();
+ }
+ else
+ {
+ groups[ nbGroups++ ] = grp;
+ }
+ }
+ groups->length( nbGroups );
+ mySrcMesh = groups[0]->GetMesh();