23028: EDF 10508 SMESH: GroupOnFilter returns an empty group when the geometry is not published

This commit is contained in:
eap 2015-03-24 14:35:25 +03:00
parent 5b4a1f8a3a
commit 588493c920

View File

@ -756,7 +756,8 @@ void BelongToGeom_i::SetGeom( const TopoDS_Shape& theShape )
myBelongToGeomPtr->SetGeom( theShape ); myBelongToGeomPtr->SetGeom( theShape );
} }
void BelongToGeom_i::SetElementType(ElementType theType){ void BelongToGeom_i::SetElementType(ElementType theType)
{
myBelongToGeomPtr->SetType(SMDSAbs_ElementType(theType)); myBelongToGeomPtr->SetType(SMDSAbs_ElementType(theType));
TPythonDump()<<this<<".SetElementType("<<theType<<")"; TPythonDump()<<this<<".SetElementType("<<theType<<")";
} }
@ -777,17 +778,24 @@ void BelongToGeom_i::SetShapeName( const char* theName )
void BelongToGeom_i::SetShape( const char* theID, const char* theName ) void BelongToGeom_i::SetShape( const char* theID, const char* theName )
{ {
delete myShapeName; delete myShapeName;
myShapeName = strdup( theName );
delete myShapeID; delete myShapeID;
if ( theID ) myShapeName = strdup( theName );
myShapeID = strdup( theID ); myShapeID = strdup( theID );
else bool hasName = ( theName && theName[0] );
myShapeID = 0; bool hasID = ( theID && theID[0] );
if ( myShapeID && myShapeName == getShapeNameByID(myShapeID)) TopoDS_Shape S;
myBelongToGeomPtr->SetGeom( getShapeByID(myShapeID) ); if ( hasName && hasID )
{
S = getShapeByID( myShapeID );
if ( S.IsNull() )
S = getShapeByName( myShapeName );
}
else else
myBelongToGeomPtr->SetGeom( getShapeByName( myShapeName ) ); {
S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
}
myBelongToGeomPtr->SetGeom( S );
} }
char* BelongToGeom_i::GetShapeName() char* BelongToGeom_i::GetShapeName()
@ -862,17 +870,24 @@ void BelongToSurface_i::SetShapeName( const char* theName, ElementType theType )
void BelongToSurface_i::SetShape( const char* theID, const char* theName, ElementType theType ) void BelongToSurface_i::SetShape( const char* theID, const char* theName, ElementType theType )
{ {
delete myShapeName; delete myShapeName;
myShapeName = strdup( theName );
delete myShapeID; delete myShapeID;
if ( theID ) myShapeName = strdup( theName );
myShapeID = strdup( theID ); myShapeID = strdup( theID );
bool hasName = ( theName && theName[0] );
bool hasID = ( theID && theID[0] );
TopoDS_Shape S;
if ( hasName && hasID )
{
S = getShapeByID( myShapeID );
if ( S.IsNull() )
S = getShapeByName( myShapeName );
}
else else
myShapeID = 0; {
S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
if ( myShapeID && myShapeName == getShapeNameByID(myShapeID)) }
myElementsOnSurfacePtr->SetSurface( getShapeByID(myShapeID), (SMDSAbs_ElementType)theType ); myElementsOnSurfacePtr->SetSurface( S, (SMDSAbs_ElementType)theType );
else
myElementsOnSurfacePtr->SetSurface( getShapeByName( myShapeName ), (SMDSAbs_ElementType)theType );
} }
char* BelongToSurface_i::GetShapeName() char* BelongToSurface_i::GetShapeName()
@ -1032,17 +1047,24 @@ void LyingOnGeom_i::SetShapeName( const char* theName )
void LyingOnGeom_i::SetShape( const char* theID, const char* theName ) void LyingOnGeom_i::SetShape( const char* theID, const char* theName )
{ {
delete myShapeName; delete myShapeName;
myShapeName = strdup( theName );
delete myShapeID; delete myShapeID;
if ( theID ) myShapeName = strdup( theName );
myShapeID = strdup( theID ); myShapeID = strdup( theID );
bool hasName = ( theName && theName[0] );
bool hasID = ( theID && theID[0] );
TopoDS_Shape S;
if ( hasName && hasID )
{
S = getShapeByID( myShapeID );
if ( S.IsNull() )
S = getShapeByName( myShapeName );
}
else else
myShapeID = 0; {
S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
if ( myShapeID && myShapeName == getShapeNameByID(myShapeID)) }
myLyingOnGeomPtr->SetGeom( getShapeByID(myShapeID) ); myLyingOnGeomPtr->SetGeom( S );
else
myLyingOnGeomPtr->SetGeom( getShapeByName( myShapeName ) );
} }
char* LyingOnGeom_i::GetShapeName() char* LyingOnGeom_i::GetShapeName()