X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i_1.cxx;h=a7567450f5f94174f07ecd5a6e5969494e33b712;hp=5a82382d6b1905b033738566dbb925dbf49a0ae0;hb=d4a710ce52f6e76786a7b3845e2f7975dc9a00b1;hpb=d8f644ca3d4ce62f2ef41d4aacb52f5bb1221df3 diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 5a82382d6..a7567450f 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -1,31 +1,28 @@ -// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 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 +// 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 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. +// 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 +// 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 +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // 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" @@ -44,10 +41,10 @@ #ifdef _DEBUG_ static int MYDEBUG = 0; -static int VARIABLE_DEBUG = 0; +//static int VARIABLE_DEBUG = 0; #else static int MYDEBUG = 0; -static int VARIABLE_DEBUG = 0; +//static int VARIABLE_DEBUG = 0; #endif //============================================================================= @@ -138,6 +135,11 @@ long SMESH_Gen_i::GetVolumeGroupsTag() return SMESH::Tag_VolumeGroups; } +long SMESH_Gen_i::Get0DElementsGroupsTag() +{ + return SMESH::Tag_0DElementsGroups; +} + //============================================================================= /*! * SMESH_Gen_i::CanPublishInStudy @@ -629,7 +631,10 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr theS SetName( aRootSO, aRootName ); // Add new submesh to corresponding sub-tree - aSubMeshSO = publish (theStudy, theSubMesh, aRootSO, 0, "ICON_SMESH_TREE_MESH_WARN"); + SMESH::array_of_ElementType_var elemTypes = theSubMesh->GetTypes(); + const int isEmpty = ( elemTypes->length() == 0 ); + const char* pm[2] = { "ICON_SMESH_TREE_MESH", "ICON_SMESH_TREE_MESH_WARN" }; + aSubMeshSO = publish (theStudy, theSubMesh, aRootSO, 0, pm[isEmpty] ); if ( aSubMeshSO->_is_nil() ) return aSubMeshSO._retn(); } @@ -691,7 +696,20 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr theStudy SetName( aRootSO, aRootNames[aType] ); // Add new group to corresponding sub-tree - aGroupSO = publish (theStudy, theGroup, aRootSO, 0, "ICON_SMESH_TREE_GROUP" ); + SMESH::array_of_ElementType_var elemTypes = theGroup->GetTypes(); + int isEmpty = ( elemTypes->length() == 0 ); + std::string pm[2] = { "ICON_SMESH_TREE_GROUP", "ICON_SMESH_TREE_MESH_WARN" }; + if ( SMESH::DownCast< SMESH_GroupOnFilter_i* > ( theGroup )) + { + pm[0] = "ICON_SMESH_TREE_GROUP_ON_FILTER"; + } + else if ( SMESH::DownCast< SMESH_Group_i* > ( theGroup )) + { + SMESH::array_of_ElementType_var allElemTypes = theMesh->GetTypes(); + for ( size_t i =0; i < allElemTypes->length() && isEmpty; ++i ) + isEmpty = ( allElemTypes[i] != theGroup->GetType() ); + } + aGroupSO = publish (theStudy, theGroup, aRootSO, 0, pm[isEmpty].c_str() ); } if ( aGroupSO->_is_nil() ) return aGroupSO._retn(); @@ -891,76 +909,104 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy //function : UpdateParameters //purpose : //======================================================================= -void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theParameters) +void SMESH_Gen_i::UpdateParameters(/*CORBA::Object_ptr theObject,*/ const char* theParameters) { - - if(VARIABLE_DEBUG) - cout<<"UpdateParameters : "<_is_nil() || CORBA::is_nil(theObject)) + if ( aStudy->_is_nil() ) return; - - SALOMEDS::SObject_var aSObj = ObjectToSObject(aStudy,theObject); - if(aSObj->_is_nil()) - return; - - SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); - - SALOMEDS::GenericAttribute_var aFindAttr; - bool hasAttr = aSObj->FindAttribute(aFindAttr, "AttributeString"); - if(VARIABLE_DEBUG) - cout<<"Find Attribute "<FindOrCreateAttribute( aSObj, "AttributeString"); - SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr); - - CORBA::String_var oldparVar = aStringAttr->Value(); - CORBA::String_var inpparVar = ParseParameters(theParameters); - TCollection_AsciiString aNewParams; - TCollection_AsciiString aOldParameters(oldparVar.inout()); - TCollection_AsciiString anInputParams(inpparVar.inout()); - if(!hasAttr) - aNewParams = anInputParams; - else + myLastParameters.clear(); + int pos = 0, prevPos = 0, len = strlen( theParameters ); + if ( len == 0 ) return; + while ( pos <= len ) + { + if ( pos == len || theParameters[pos] == ':' ) { - int pos = aOldParameters.SearchFromEnd("|"); - if(pos==-1) pos = 0; - TCollection_AsciiString previousParamFull(aOldParameters.Split(pos)); - TCollection_AsciiString previousParam(previousParamFull); - TCollection_AsciiString theRepet("1"); - pos = previousParam.SearchFromEnd(";*="); - if(pos >= 0) - { - theRepet = previousParam.Split(pos+2); - pos = pos-1; - if(pos==-1) pos = 0; - previousParam.Split(pos); - } - if(previousParam == anInputParams) - { - theRepet = theRepet.IntegerValue()+1; - aNewParams = aOldParameters + previousParam + ";*=" + theRepet; - } + if ( prevPos < pos ) + { + string val(theParameters + prevPos, theParameters + pos ); + if ( !aStudy->IsVariable( val.c_str() )) + val.clear(); + myLastParameters.push_back( val ); + } else - { - aNewParams = aOldParameters + previousParamFull + "|" + anInputParams; - } + { + myLastParameters.push_back(""); + } + prevPos = pos+1; } - - if(VARIABLE_DEBUG) - { - cout<<"Input Parameters : "<SetValue( aNewParams.ToCString() ); + return; + + // OLD VARIANT + + // if(VARIABLE_DEBUG) + // cout<<"UpdateParameters : "<_is_nil() || CORBA::is_nil(theObject)) + // return; + + // SALOMEDS::SObject_var aSObj = ObjectToSObject(aStudy,theObject); + // if(aSObj->_is_nil()) + // return; + + // SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); + + // SALOMEDS::GenericAttribute_var aFindAttr; + // bool hasAttr = aSObj->FindAttribute(aFindAttr, "AttributeString"); + // if(VARIABLE_DEBUG) + // cout<<"Find Attribute "<FindOrCreateAttribute( aSObj, "AttributeString"); + // SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr); + + // CORBA::String_var oldparVar = aStringAttr->Value(); + // CORBA::String_var inpparVar = ParseParameters(theParameters); + // TCollection_AsciiString aNewParams; + // TCollection_AsciiString aOldParameters(oldparVar.inout()); + // TCollection_AsciiString anInputParams(inpparVar.inout()); + // if(!hasAttr) + // aNewParams = anInputParams; + // else + // { + // int pos = aOldParameters.SearchFromEnd("|"); + // if(pos==-1) pos = 0; + // TCollection_AsciiString previousParamFull(aOldParameters.Split(pos)); + // TCollection_AsciiString previousParam(previousParamFull); + // TCollection_AsciiString theRepet("1"); + // pos = previousParam.SearchFromEnd(";*="); + // if(pos >= 0) + // { + // theRepet = previousParam.Split(pos+2); + // pos = pos-1; + // if(pos==-1) pos = 0; + // previousParam.Split(pos); + // } + // if(previousParam == anInputParams) + // { + // theRepet = theRepet.IntegerValue()+1; + // aNewParams = aOldParameters + previousParam + ";*=" + theRepet; + // } + // else + // { + // aNewParams = aOldParameters + previousParamFull + "|" + anInputParams; + // } + // } + + // if(VARIABLE_DEBUG) + // { + // cout<<"Input Parameters : "<SetValue( aNewParams.ToCString() ); } //======================================================================= //function : ParseParameters -//purpose : +//purpose : Replace variables by their values //======================================================================= char* SMESH_Gen_i::ParseParameters(const char* theParameters) {