groupData._indices.insert( ids[i] );
// SMESH object
groupData._smeshObject = CORBA::Object::_duplicate( theSmeshObj );
+ // shape index in SMESHDS
+ // TopoDS_Shape shape = _gen_i->GeomObjectToShape( theGeomObj );
+ // groupData._dsID = shape.IsNull() ? 0 : _impl->GetSubMesh( shape )->GetId();
}
//================================================================================
GEOM::GEOM_Object_var mainGO = _gen_i->ShapeToGeomObject( _impl->GetShapeToMesh() );
if ( mainGO->_is_nil() ) return;
- if ( mainGO->GetType() == GEOM_GROUP )
+ if ( mainGO->GetType() == GEOM_GROUP ||
+ mainGO->GetTick() == _mainShapeTick )
{
CheckGeomGroupModif();
return;
}
- if ( mainGO->GetTick() == _mainShapeTick )
- return;
GEOM_Client* geomClient = _gen_i->GetShapeReader();
if ( !geomClient ) return;
geomClient->RemoveShapeFromBuffer( ior.in() );
// Update data taking into account that
- // all sub-shapes change but IDs of sub-shapes remain
+ // all sub-shapes change but IDs of sub-shapes remain (except for geom groups)
_impl->Clear();
TopoDS_Shape newShape = _gen_i->GeomObjectToShape( mainGO );
}
// change shape to mesh
+ int oldNbSubShapes = meshDS->MaxShapeIndex();
_impl->ShapeToMesh( TopoDS_Shape() );
_impl->ShapeToMesh( newShape );
+ // re-add shapes of geom groups
+ list<TGeomGroupData>::iterator data = _geomGroupData.begin();
+ for ( ; data != _geomGroupData.end(); ++data )
+ {
+ TopoDS_Shape newShape = newGroupShape( *data );
+ if ( !newShape.IsNull() )
+ {
+ if ( meshDS->ShapeToIndex( newShape ) > 0 ) // a group reduced to one sub-shape
+ {
+ TopoDS_Compound compound;
+ BRep_Builder().MakeCompound( compound );
+ BRep_Builder().Add( compound, newShape );
+ newShape = compound;
+ }
+ _impl->GetSubMesh( newShape );
+ }
+ }
+ if ( oldNbSubShapes != meshDS->MaxShapeIndex() )
+ THROW_SALOME_CORBA_EXCEPTION( "SMESH_Mesh_i::CheckGeomModif() bug",
+ SALOME::INTERNAL_ERROR );
+
// re-assign hypotheses
for ( size_t i = 0; i < ids2Hyps.size(); ++i )
{
}
else
{
- gr_i->changeLocalId( id );
g->GetGroupDS()->SetColor( data._color );
+ gr_i->changeLocalId( id );
+ _mapGroups[ id ] = i2g->second;
+ if ( data._oldID != id )
+ _mapGroups.erase( i2g );
}
}
{
aMeshName = prepareMeshNameAndGroups(file, overwrite);
_impl->ExportMED( file, aMeshName.c_str(), auto_groups,
- version, 0, autoDimension, have0dField);
+ version, 0, autoDimension, /*addODOnVertices=*/have0dField);
meshDS = _impl->GetMeshDS();
}
else
}
SMESH_MeshPartDS* partDS = new SMESH_MeshPartDS( meshPart );
_impl->ExportMED( file, aMeshName.c_str(), auto_groups,
- version, partDS, autoDimension, have0dField);
+ version, partDS, autoDimension, /*addODOnVertices=*/have0dField);
meshDS = tmpDSDeleter._obj = partDS;
}
name.in(),
elemType,
comps->length(),
- ( dataType == GEOM::FDT_Int )))
+ /*isIntData=*/false ))//( dataType == GEOM::FDT_Int )))
continue;
for ( size_t iC = 0; iC < comps->length(); ++iC )
const SMDS_MeshElement* e = elemIt->next();
const int shapeID = e->getshapeId();
if ( shapeID < 1 || shapeID >= intVals.size() )
- fieldWriter.AddValue( noneIntValue );
+ fieldWriter.AddValue( (double) noneIntValue );
else
- fieldWriter.AddValue( intVals[ shapeID ]);
+ fieldWriter.AddValue( (double) intVals[ shapeID ]);
}
// write a step
std::vector< std::string > compNames;
switch ( geomAssocFields[ iF ]) {
case 'v': case 'V':
- fieldWriter.Set( meshDS, "_vertices_", SMDSAbs_Node, /*nbComps=*/2, /*isInt=*/true );
+ fieldWriter.Set( meshDS, "_vertices_", SMDSAbs_Node, /*nbComps=*/2, /*isInt=*/false );
compNames.push_back( "dim" );
break;
case 'e': case 'E':
- fieldWriter.Set( meshDS, "_edges_", SMDSAbs_Edge, /*nbComps=*/1, /*isInt=*/true );
+ fieldWriter.Set( meshDS, "_edges_", SMDSAbs_Edge, /*nbComps=*/1, /*isInt=*/false );
break;
case 'f': case 'F':
- fieldWriter.Set( meshDS, "_faces_", SMDSAbs_Face, /*nbComps=*/1, /*isInt=*/true );
+ fieldWriter.Set( meshDS, "_faces_", SMDSAbs_Face, /*nbComps=*/1, /*isInt=*/false );
break;
case 's': case 'S':
- fieldWriter.Set( meshDS, "_solids_", SMDSAbs_Volume, /*nbComps=*/1, /*isInt=*/true );
+ fieldWriter.Set( meshDS, "_solids_", SMDSAbs_Volume, /*nbComps=*/1, /*isInt=*/false );
break;
default: continue;
}
const int shapeID = e->getshapeId();
if ( shapeID < 1 )
{
- fieldWriter.AddValue( -1 );
- fieldWriter.AddValue( -1 );
+ fieldWriter.AddValue( (double) -1 );
+ fieldWriter.AddValue( (double) -1 );
}
else
{
const TopoDS_Shape& S = meshDS->IndexToShape( shapeID );
- fieldWriter.AddValue( S.IsNull() ? -1 : shapeDim[ S.ShapeType() ]);
- fieldWriter.AddValue( shapeID );
+ fieldWriter.AddValue( (double) ( S.IsNull() ? -1 : shapeDim[ S.ShapeType() ]));
+ fieldWriter.AddValue( (double) shapeID );
}
}
else
const SMDS_MeshElement* e = elemIt->next();
const int shapeID = e->getshapeId();
if ( shapeID < 1 )
- fieldWriter.AddValue( -1 );
+ fieldWriter.AddValue( (double) -1 );
else
- fieldWriter.AddValue( shapeID );
+ fieldWriter.AddValue( (double) shapeID );
}
// write a step