mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-13 18:20:35 +05:00
1. Unify behavior of UnionList, DifferentList, UnionIDs, DifferenceIDs functions when empty list is passed as parameter - no exception should be raised in this case.
2. Avoid raising exception in DifferenceList, DifferenceIDs functions if the group is empty 3. Fix bug in DifferenceIDs function - bad list of IDs is contained when the group is cleared.
This commit is contained in:
parent
8e9aa9b888
commit
88ffbe62e8
@ -397,7 +397,8 @@ void GEOMImpl_IGroupOperations::DifferenceList (Handle(GEOM_Object) theGroup,
|
||||
|
||||
Standard_Integer aLen = theSubShapes->Length();
|
||||
if (aLen < 1) {
|
||||
SetErrorCode("The list is empty");
|
||||
//SetErrorCode("The list is empty");
|
||||
SetErrorCode(OK);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -414,8 +415,9 @@ void GEOMImpl_IGroupOperations::DifferenceList (Handle(GEOM_Object) theGroup,
|
||||
if (aSeq.IsNull()) return;
|
||||
Standard_Integer aLength = aSeq->Length();
|
||||
|
||||
if (aLength == 1 && aSeq->Value(1) == -1) // empty group
|
||||
return;
|
||||
// VSR 28/04/2011 commented to allow operation even for empty group
|
||||
// if (aLength == 1 && aSeq->Value(1) == -1) // empty group
|
||||
// return;
|
||||
|
||||
TColStd_MapOfInteger mapIDsCurrent;
|
||||
Standard_Integer j = 1;
|
||||
@ -449,7 +451,7 @@ void GEOMImpl_IGroupOperations::DifferenceList (Handle(GEOM_Object) theGroup,
|
||||
// 1. If aShape_i is sub-shape of aMainShape - remove it
|
||||
if (mapIndices.Contains(aShape_i)) {
|
||||
rem_id = mapIndices.FindIndex(aShape_i);
|
||||
if (mapIDsCurrent.Contains(rem_id)) {
|
||||
if (rem_id > 0 && mapIDsCurrent.Contains(rem_id)) {
|
||||
mapIDsToRemove.Add(rem_id);
|
||||
}
|
||||
}
|
||||
@ -463,7 +465,7 @@ void GEOMImpl_IGroupOperations::DifferenceList (Handle(GEOM_Object) theGroup,
|
||||
TopoDS_Shape aSubShape_i = mapIndices_i.FindKey(ii);
|
||||
if (mapIndices.Contains(aSubShape_i)) {
|
||||
rem_id = mapIndices.FindIndex(aSubShape_i);
|
||||
if (mapIDsCurrent.Contains(rem_id)) {
|
||||
if (rem_id > 0 && mapIDsCurrent.Contains(rem_id)) {
|
||||
mapIDsToRemove.Add(rem_id);
|
||||
}
|
||||
}
|
||||
@ -476,7 +478,7 @@ void GEOMImpl_IGroupOperations::DifferenceList (Handle(GEOM_Object) theGroup,
|
||||
TopoDS_Shape aSubShape_i = aSubShapes_i.Current();
|
||||
if (mapIndices.Contains(aSubShape_i)) {
|
||||
rem_id = mapIndices.FindIndex(aSubShape_i);
|
||||
if (mapIDsCurrent.Contains(rem_id)) {
|
||||
if (rem_id > 0 && mapIDsCurrent.Contains(rem_id)) {
|
||||
mapIDsToRemove.Add(rem_id);
|
||||
}
|
||||
}
|
||||
@ -537,7 +539,8 @@ void GEOMImpl_IGroupOperations::UnionIDs (Handle(GEOM_Object) theGroup,
|
||||
|
||||
Standard_Integer aLen = theSubShapes->Length();
|
||||
if (aLen < 1) {
|
||||
SetErrorCode("The list is empty");
|
||||
//SetErrorCode("The list is empty");
|
||||
SetErrorCode(OK);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -629,7 +632,8 @@ void GEOMImpl_IGroupOperations::DifferenceIDs (Handle(GEOM_Object) theGroup,
|
||||
|
||||
Standard_Integer aLen = theSubShapes->Length();
|
||||
if (aLen < 1) {
|
||||
SetErrorCode("The list is empty");
|
||||
//SetErrorCode("The list is empty");
|
||||
SetErrorCode(OK);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -646,8 +650,9 @@ void GEOMImpl_IGroupOperations::DifferenceIDs (Handle(GEOM_Object) theGroup,
|
||||
if (aSeq.IsNull()) return;
|
||||
Standard_Integer aLength = aSeq->Length();
|
||||
|
||||
if (aLength == 1 && aSeq->Value(1) == -1) // empty group
|
||||
return;
|
||||
// VSR 28/04/2011 commented to allow operation even for empty group
|
||||
// if (aLength == 1 && aSeq->Value(1) == -1) // empty group
|
||||
// return;
|
||||
|
||||
TColStd_MapOfInteger mapIDsCurrent;
|
||||
Standard_Integer j = 1;
|
||||
@ -672,21 +677,27 @@ void GEOMImpl_IGroupOperations::DifferenceIDs (Handle(GEOM_Object) theGroup,
|
||||
Standard_Integer i, rem_id;
|
||||
for (i = 1; i <= aLen; i++) {
|
||||
rem_id = theSubShapes->Value(i);
|
||||
if (mapIDsCurrent.Contains(rem_id)) {
|
||||
if (rem_id > 0 && mapIDsCurrent.Contains(rem_id)) {
|
||||
mapIDsToRemove.Add(rem_id);
|
||||
}
|
||||
}
|
||||
|
||||
if (mapIDsToRemove.Extent() > 0) {
|
||||
Standard_Integer k = 1, aRemLength = mapIDsToRemove.Extent();
|
||||
Handle(TColStd_HArray1OfInteger) aNewSeq = new TColStd_HArray1OfInteger(1, aLength - aRemLength);
|
||||
|
||||
for (j = 1; j <= aLength; j++) {
|
||||
if (!mapIDsToRemove.Contains(aSeq->Value(j))) {
|
||||
aNewSeq->SetValue(k, aSeq->Value(j));
|
||||
k++;
|
||||
Handle(TColStd_HArray1OfInteger) aNewSeq;
|
||||
if ( aLength - aRemLength > 0 ) {
|
||||
aNewSeq = new TColStd_HArray1OfInteger(1, aLength - aRemLength);
|
||||
for (j = 1; j <= aLength; j++) {
|
||||
if (!mapIDsToRemove.Contains(aSeq->Value(j))) {
|
||||
aNewSeq->SetValue(k, aSeq->Value(j));
|
||||
k++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
aNewSeq = new TColStd_HArray1OfInteger(1,1);
|
||||
aNewSeq->SetValue(1, -1);
|
||||
}
|
||||
|
||||
aSSI.SetIndices(aNewSeq);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user