Fix for bug PAL14047(EDF PAL 334 : Problem to select merged face with Create group window).

This commit is contained in:
mzn 2006-12-01 10:44:29 +00:00
parent 93f9a2030c
commit 840600758d

View File

@ -329,15 +329,36 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
GEOM::ListOfGO anObjects; GEOM::ListOfGO anObjects;
GEOMBase::ConvertListOfIOInListOfGO(selectedIO(), anObjects); GEOMBase::ConvertListOfIOInListOfGO(selectedIO(), anObjects);
GEOM::GEOM_ILocalOperations_var aLocOp = getGeomEngine()->GetILocalOperations( getStudyId() ); GEOM::GEOM_ILocalOperations_var aLocOp = getGeomEngine()->GetILocalOperations( getStudyId() );
for (int i = 0; i < anObjects.length(); i++) { GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
TopoDS_Shape aShape;
if ( GEOMBase::GetShape(anObjects[i], aShape, getShapeType()) ) { for (int i = 0; i < anObjects.length(); i++)
CORBA::Long anIndex = aLocOp->GetSubShapeIndex( myMainObj, anObjects[i] ); {
if ( anIndex >= 0 ) GEOM::GEOM_Object_var aGeomObj = anObjects[i];
aMapIndex.Add( anIndex ); GEOM::ListOfGO_var aSubObjects = new GEOM::ListOfGO();
} TopoDS_Shape aShape;
} if ( GEOMBase::GetShape(aGeomObj, aShape, getShapeType()) )
{
aSubObjects->length(1);
aSubObjects[0] = aGeomObj;
}
else if (aGeomObj->GetType() == GEOM_GROUP)
aSubObjects = aShapesOp->MakeExplode( aGeomObj, getShapeType(), false);
else
continue;
for (int i = 0; i < aSubObjects->length(); i++)
{
TopoDS_Shape aShape;
if ( GEOMBase::GetShape(aSubObjects[i], aShape, getShapeType()) )
{
CORBA::Long anIndex = aLocOp->GetSubShapeIndex( myMainObj, aSubObjects[i] );
if ( anIndex >= 0 )
aMapIndex.Add( anIndex );
}
}
}
if ( !myMainObj->_is_nil() ) if ( !myMainObj->_is_nil() )
localSelection( myMainObj, getShapeType() ); localSelection( myMainObj, getShapeType() );
@ -432,15 +453,36 @@ void GroupGUI_GroupDlg::add()
if ( !aMapIndex.Extent() ) { if ( !aMapIndex.Extent() ) {
GEOM::ListOfGO anObjects; GEOM::ListOfGO anObjects;
GEOMBase::ConvertListOfIOInListOfGO(selectedIO(), anObjects); GEOMBase::ConvertListOfIOInListOfGO(selectedIO(), anObjects);
GEOM::GEOM_ILocalOperations_var aLocOp = getGeomEngine()->GetILocalOperations( getStudyId() ); GEOM::GEOM_ILocalOperations_var aLocOp = getGeomEngine()->GetILocalOperations( getStudyId() );
for (int i = 0; i < anObjects.length(); i++) { GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
TopoDS_Shape aShape;
if ( GEOMBase::GetShape(anObjects[i], aShape, getShapeType()) ) { for (int i = 0; i < anObjects.length(); i++)
CORBA::Long anIndex = aLocOp->GetSubShapeIndex( myMainObj, anObjects[i] ); {
if ( anIndex >= 0 ) GEOM::GEOM_Object_var aGeomObj = anObjects[i];
aMapIndex.Add( anIndex ); GEOM::ListOfGO_var aSubObjects = new GEOM::ListOfGO();
TopoDS_Shape aShape;
if ( GEOMBase::GetShape(aGeomObj, aShape, getShapeType()) )
{
aSubObjects->length(1);
aSubObjects[0] = aGeomObj;
}
else if (aGeomObj->GetType() == GEOM_GROUP)
aSubObjects = aShapesOp->MakeExplode( aGeomObj, getShapeType(), false);
else
break;
for (int i = 0; i < aSubObjects->length(); i++)
{
TopoDS_Shape aShape;
if ( GEOMBase::GetShape(aSubObjects[i], aShape, getShapeType()) )
{
CORBA::Long anIndex = aLocOp->GetSubShapeIndex( myMainObj, aSubObjects[i] );
if ( anIndex >= 0 )
aMapIndex.Add( anIndex );
}
}
} }
}
} }
if ( aMapIndex.Extent() >= 1 ) { if ( aMapIndex.Extent() >= 1 ) {
@ -555,29 +597,57 @@ void GroupGUI_GroupDlg::updateState()
// try to find out and process the object browser selection // try to find out and process the object browser selection
if ( !aMapIndex.Extent() && !CORBA::is_nil( myMainObj ) ) { if ( !aMapIndex.Extent() && !CORBA::is_nil( myMainObj ) ) {
isAdd = true;
GEOM::ListOfGO anObjects; GEOM::ListOfGO anObjects;
GEOMBase::ConvertListOfIOInListOfGO(selectedIO(), anObjects); GEOMBase::ConvertListOfIOInListOfGO(selectedIO(), anObjects);
GEOM::GEOM_ILocalOperations_var aLocOp = getGeomEngine()->GetILocalOperations( getStudyId() ); GEOM::GEOM_ILocalOperations_var aLocOp = getGeomEngine()->GetILocalOperations( getStudyId() );
for (int i = 0; i < anObjects.length(); i++) { GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
TopoDS_Shape aShape;
if ( GEOMBase::GetShape(anObjects[i], aShape, getShapeType()) ) {
CORBA::Long anIndex = aLocOp->GetSubShapeIndex( myMainObj, anObjects[i] );
if ( anIndex >= 0 )
aMapIndex.Add( anIndex );
else
isAdd = false;
}
else
isAdd = false;
if ( !isAdd ) { isAdd = true;
aMapIndex.Clear();
break; for (int i = 0; i < anObjects.length(); i++)
} {
} GEOM::GEOM_Object_var aGeomObj = anObjects[i];
GEOM::ListOfGO_var aSubObjects = new GEOM::ListOfGO();
TopoDS_Shape aShape;
if ( GEOMBase::GetShape(aGeomObj, aShape, getShapeType()) )
{
aSubObjects->length(1);
aSubObjects[0] = aGeomObj;
}
else if (aGeomObj->GetType() == GEOM_GROUP)
aSubObjects = aShapesOp->MakeExplode( aGeomObj, getShapeType(), false);
else
break;
for (int i = 0; i < aSubObjects->length(); i++)
{
TopoDS_Shape aShape;
aSubObjects[i];
if ( GEOMBase::GetShape(aSubObjects[i], aShape, getShapeType()) )
{
CORBA::Long anIndex = aLocOp->GetSubShapeIndex( myMainObj, aSubObjects[i] );
if ( anIndex >= 0 )
aMapIndex.Add( anIndex );
else
isAdd = false;
}
else
isAdd = false;
if ( !isAdd ) {
aMapIndex.Clear();
break;
}
}
if ( !isAdd ) {
aMapIndex.Clear();
break;
}
}
} }
isAdd = aMapIndex.Extent() > 0; isAdd = aMapIndex.Extent() > 0;
myAddBtn->setEnabled( !myEditCurrentArgument && !CORBA::is_nil( myMainObj ) && isAdd ); myAddBtn->setEnabled( !myEditCurrentArgument && !CORBA::is_nil( myMainObj ) && isAdd );
@ -734,3 +804,4 @@ GEOM::GEOM_Object_ptr GroupGUI_GroupDlg::getFather( GEOM::GEOM_Object_ptr theObj
} }
return aFatherObj._retn(); return aFatherObj._retn();
} }