+//================================================================================
+/*!
+ * \brief Create a sub-mesh on a geometry that is not a sub-shape of the main shape
+ * for the case where a valid sub-shape not found by CopyMeshWithGeom().
+ * The invalid sub-mesh has GetId() < 0.
+ */
+//================================================================================
+
+SMESH::SMESH_subMesh_ptr
+SMESH_Gen_i::createInvalidSubMesh(SMESH::SMESH_Mesh_ptr theMesh,
+ GEOM::GEOM_Object_ptr theStrangerGeom,
+ const char* theName)
+{
+ SMESH::SMESH_subMesh_var subMesh;
+
+ try
+ {
+ SMESH_Mesh_i* mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( theMesh );
+ subMesh = mesh_i->createSubMesh( theStrangerGeom );
+
+ if ( !subMesh->_is_nil() && CanPublishInStudy( subMesh ))
+ {
+ SALOMEDS::SObject_wrap so = PublishSubMesh( theMesh, subMesh, theStrangerGeom, theName );
+
+ // hide a reference to geometry
+ if ( !so->_is_nil() )
+ {
+ SALOMEDS::SObject_wrap refSO;
+ if ( so->FindSubObject( GetRefOnShapeTag(), refSO.inout() ))
+ {
+ SALOMEDS::StudyBuilder_var studyBuilder = getStudyServant()->NewBuilder();
+ SALOMEDS::GenericAttribute_wrap attr =
+ studyBuilder->FindOrCreateAttribute( refSO, "AttributeDrawable" );
+ SALOMEDS::AttributeDrawable_wrap ga = attr;
+ ga->SetDrawable( false );
+ }
+ }
+ }
+ }
+ catch (...) {
+ }
+
+ return subMesh._retn();
+}