X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i_1.cxx;h=c3123b3f5a79293b2f7b5fd0c563799bbdb73615;hb=e5ed5aa5ac8420179aa37e3bf3a175e22ef3f69a;hp=2021f22e2df7a4c43c62934b4ee3757577eb3a6e;hpb=c63ee099ad2b149bd70136839c973e8910137bc5;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 2021f22e2..c3123b3f5 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -1,39 +1,38 @@ -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses // File : SMESH_Gen_i_1.cxx // Created : Thu Oct 21 17:24:06 2004 // Author : Edward AGAPOV (eap) // Module : SMESH // $Header: - +// #include "SMESH_Gen_i.hxx" #include "SMESH_Mesh_i.hxx" #include "SMESH_Hypothesis_i.hxx" #include "SMESH_Algo_i.hxx" #include "SMESH_Group_i.hxx" - -#include "SMESH.hxx" +#include "SMESH_subMesh_i.hxx" #include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) @@ -44,8 +43,10 @@ #ifdef _DEBUG_ static int MYDEBUG = 0; +static int VARIABLE_DEBUG = 0; #else static int MYDEBUG = 0; +static int VARIABLE_DEBUG = 0; #endif //============================================================================= @@ -58,82 +59,82 @@ static int MYDEBUG = 0; long SMESH_Gen_i::GetHypothesisRootTag() { - return Tag_HypothesisRoot; + return SMESH::Tag_HypothesisRoot; } long SMESH_Gen_i::GetAlgorithmsRootTag() { - return Tag_AlgorithmsRoot; + return SMESH::Tag_AlgorithmsRoot; } long SMESH_Gen_i::GetRefOnShapeTag() { - return Tag_RefOnShape; + return SMESH::Tag_RefOnShape; } long SMESH_Gen_i::GetRefOnAppliedHypothesisTag() { - return Tag_RefOnAppliedHypothesis; + return SMESH::Tag_RefOnAppliedHypothesis; } long SMESH_Gen_i::GetRefOnAppliedAlgorithmsTag() { - return Tag_RefOnAppliedAlgorithms; + return SMESH::Tag_RefOnAppliedAlgorithms; } long SMESH_Gen_i::GetSubMeshOnVertexTag() { - return Tag_SubMeshOnVertex; + return SMESH::Tag_SubMeshOnVertex; } long SMESH_Gen_i::GetSubMeshOnEdgeTag() { - return Tag_SubMeshOnEdge; + return SMESH::Tag_SubMeshOnEdge; } long SMESH_Gen_i::GetSubMeshOnFaceTag() { - return Tag_SubMeshOnFace; + return SMESH::Tag_SubMeshOnFace; } long SMESH_Gen_i::GetSubMeshOnSolidTag() { - return Tag_SubMeshOnSolid; + return SMESH::Tag_SubMeshOnSolid; } long SMESH_Gen_i::GetSubMeshOnCompoundTag() { - return Tag_SubMeshOnCompound; + return SMESH::Tag_SubMeshOnCompound; } long SMESH_Gen_i::GetSubMeshOnWireTag() { - return Tag_SubMeshOnWire; + return SMESH::Tag_SubMeshOnWire; } long SMESH_Gen_i::GetSubMeshOnShellTag() { - return Tag_SubMeshOnShell; + return SMESH::Tag_SubMeshOnShell; } long SMESH_Gen_i::GetNodeGroupsTag() { - return Tag_NodeGroups; + return SMESH::Tag_NodeGroups; } long SMESH_Gen_i::GetEdgeGroupsTag() { - return Tag_EdgeGroups; + return SMESH::Tag_EdgeGroups; } long SMESH_Gen_i::GetFaceGroupsTag() { - return Tag_FaceGroups; + return SMESH::Tag_FaceGroups; } long SMESH_Gen_i::GetVolumeGroupsTag() { - return Tag_VolumeGroups; + return SMESH::Tag_VolumeGroups; } //============================================================================= @@ -180,7 +181,10 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(SALOMEDS::Study_ptr theStudy, { SALOMEDS::SObject_var aSO; if ( !CORBA::is_nil( theStudy ) && !CORBA::is_nil( theObject )) - aSO = theStudy->FindObjectIOR( SMESH_Gen_i::GetORB()->object_to_string( theObject ) ); + { + CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject ); + aSO = theStudy->FindObjectIOR( objStr.in() ); + } return aSO._retn(); } @@ -206,8 +210,10 @@ GEOM::GEOM_Object_ptr SMESH_Gen_i::ShapeToGeomObject (const TopoDS_Shape& theSha GEOM_Client* aClient = GetShapeReader(); TCollection_AsciiString IOR; if ( aClient && aClient->Find( theShape, IOR )) - aShapeObj = GEOM::GEOM_Object::_narrow - ( GetORB()->string_to_object( IOR.ToCString() ) ); + { + CORBA::Object_var obj = GetORB()->string_to_object( IOR.ToCString() ); + aShapeObj = GEOM::GEOM_Object::_narrow ( obj ); + } } return aShapeObj._retn(); } @@ -222,7 +228,7 @@ TopoDS_Shape SMESH_Gen_i::GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject) TopoDS_Shape S; if ( !theGeomObject->_is_nil() ) { GEOM_Client* aClient = GetShapeReader(); - GEOM::GEOM_Gen_var aGeomEngine = GetGeomEngine(); + GEOM::GEOM_Gen_ptr aGeomEngine = GetGeomEngine(); if ( aClient && !aGeomEngine->_is_nil () ) S = aClient->GetShape( aGeomEngine, theGeomObject ); } @@ -253,12 +259,13 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, SALOMEDS::GenericAttribute_var anAttr; if ( !CORBA::is_nil( theIOR )) { anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributeIOR" ); - SALOMEDS::AttributeIOR::_narrow(anAttr)->SetValue - ( SMESH_Gen_i::GetORB()->object_to_string( theIOR ) ); + CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theIOR ); + SALOMEDS::AttributeIOR::_narrow(anAttr)->SetValue( objStr.in() ); } if ( thePixMap ) { anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" ); - SALOMEDS::AttributePixMap::_narrow( anAttr )->SetPixMap( thePixMap ); + SALOMEDS::AttributePixMap_var pm = SALOMEDS::AttributePixMap::_narrow( anAttr ); + pm->SetPixMap( thePixMap ); } if ( !theSelectable ) { anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributeSelectable" ); @@ -294,6 +301,25 @@ void SMESH_Gen_i::SetName(SALOMEDS::SObject_ptr theSObject, } } +//======================================================================= +//function : SetPixMap +//purpose : +//======================================================================= + +void SMESH_Gen_i::SetPixMap(SALOMEDS::SObject_ptr theSObject, + const char* thePixMap) +{ + if ( !theSObject->_is_nil() && thePixMap && strlen( thePixMap )) + { + SALOMEDS::Study_var aStudy = theSObject->GetStudy(); + SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); + SALOMEDS::GenericAttribute_var anAttr = + aStudyBuilder->FindOrCreateAttribute( theSObject, "AttributePixMap" ); + SALOMEDS::AttributePixMap_var aPMAttr = SALOMEDS::AttributePixMap::_narrow( anAttr ); + aPMAttr->SetPixMap( thePixMap ); + } +} + //======================================================================= //function : addReference //purpose : @@ -345,9 +371,9 @@ static void addReference (SALOMEDS::Study_ptr theStudy, //============================================================================= SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject, - CORBA::Object_ptr theIOR, - const char* theName) + SALOMEDS::SObject_ptr theSObject, + CORBA::Object_ptr theIOR, + const char* theName) throw (SALOME::SALOME_Exception) { Unexpect aCatch(SALOME_SalomeException); @@ -442,9 +468,9 @@ static long findMaxChildTag( SALOMEDS::SObject_ptr theSObject ) if ( !aStudy->_is_nil() ) { SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator( theSObject ); for ( ; anIter->More(); anIter->Next() ) { - long nTag = anIter->Value()->Tag(); - if ( nTag > aTag ) - aTag = nTag; + long nTag = anIter->Value()->Tag(); + if ( nTag > aTag ) + aTag = nTag; } } } @@ -495,13 +521,12 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr theStudy, // Publish global hypotheses - SMESH::ListOfHypothesis * hypList = theMesh->GetHypothesisList( aShapeObject ); - if ( hypList ) - for ( int i = 0; i < hypList->length(); i++ ) { - SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( (*hypList)[ i ]); - PublishHypothesis( theStudy, aHyp ); - AddHypothesisToShape( theStudy, theMesh, aShapeObject, aHyp ); - } + SMESH::ListOfHypothesis_var hypList = theMesh->GetHypothesisList( aShapeObject ); + for ( int i = 0; i < hypList->length(); i++ ) { + SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( hypList[ i ]); + PublishHypothesis( theStudy, aHyp ); + AddHypothesisToShape( theStudy, theMesh, aShapeObject, aHyp ); + } } // Publish submeshes @@ -565,7 +590,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr theS } // Find submesh sub-tree tag long aRootTag; - char* aRootName = ""; + const char* aRootName = ""; switch ( theShapeObject->GetShapeType() ) { case GEOM::VERTEX: aRootTag = GetSubMeshOnVertexTag(); @@ -651,8 +676,8 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr theStudy } int aType = (int)theGroup->GetType(); const char* aRootNames[] = { - "Compound Groups", "Groups of Nodes", - "Groups of Edges", "Groups of Faces", "Groups of Volumes" }; + "Compound Groups", "Groups of Nodes", "Groups of Edges", + "Groups of Faces", "Groups of Volumes", "Groups of 0D Elements" }; // Currently, groups with heterogenous content are not supported if ( aType != SMESH::ALL ) { @@ -661,7 +686,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr theStudy // Find or create groups root SALOMEDS::SObject_var aRootSO = publish (theStudy, CORBA::Object::_nil(), aMeshSO, aRootTag, 0, false ); - if ( aType < 5 ) + if ( aType < 6 ) SetName( aRootSO, aRootNames[aType] ); // Add new group to corresponding sub-tree @@ -712,6 +737,10 @@ SALOMEDS::SObject_ptr // Add New Hypothesis string aPmName = isAlgo ? "ICON_SMESH_TREE_ALGO_" : "ICON_SMESH_TREE_HYPO_"; aPmName += theHyp->GetName(); + // prepend plugin name to pixmap name + string pluginName = myHypCreatorMap[string(theHyp->GetName())]->GetModuleName(); + if ( pluginName != "StdMeshers" ) + aPmName = pluginName + "::" + aPmName; aHypSO = publish( theStudy, theHyp, aRootSO, 0, aPmName.c_str() ); } @@ -720,6 +749,9 @@ SALOMEDS::SObject_ptr SetName( aHypSO, theName, aHypName ); } + if( SMESH_Hypothesis_i* aServant = dynamic_cast( GetServant( theHyp ).in() ) ) + aServant->UpdateStringAttribute(); + if(MYDEBUG) MESSAGE("PublishHypothesis--END") return aHypSO._retn(); } @@ -736,10 +768,15 @@ SALOMEDS::SObject_ptr { if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape") SALOMEDS::SObject_var aMeshOrSubMesh; - if ( theShape->_is_nil() || theMesh->_is_nil() ) + if (theMesh->_is_nil() || ( theShape->_is_nil() && theMesh->HasShapeToMesh())) return aMeshOrSubMesh._retn(); + + TopoDS_Shape aShape; + if(theMesh->HasShapeToMesh()) + aShape = GeomObjectToShape( theShape ); + else + aShape = SMESH_Mesh::PseudoShape(); - TopoDS_Shape aShape = GeomObjectToShape( theShape ); SMESH_Mesh_i* mesh_i = objectToServant( theMesh ); if ( !aShape.IsNull() && mesh_i && mesh_i->GetImpl().GetMeshDS() ) { @@ -769,7 +806,8 @@ bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr theStudy, { if(MYDEBUG) MESSAGE("AddHypothesisToShape") if (theStudy->_is_nil() || theMesh->_is_nil() || - theHyp->_is_nil() || theShape->_is_nil() ) + theHyp->_is_nil() || (theShape->_is_nil() + && theMesh->HasShapeToMesh()) ) return false; SALOMEDS::SObject_var aMeshSO = ObjectToSObject( theStudy, theMesh ); @@ -823,7 +861,8 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy SMESH::SMESH_Hypothesis_ptr theHyp) { if (theStudy->_is_nil() || theMesh->_is_nil() || - theHyp->_is_nil() || theShape->_is_nil() ) + theHyp->_is_nil() || (theShape->_is_nil() + && theMesh->HasShapeToMesh())) return false; SALOMEDS::SObject_var aHypSO = ObjectToSObject( theStudy, theHyp ); @@ -849,4 +888,3 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy } return true; } -