X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOM_I%2FGEOM_Gen_i.cc;h=76f133190a950d5fd09f95c23da7a46c08bd585b;hb=22b9c99081495ff0b7c053b9b7e779b105a73044;hp=5128552807e1701769c589ec9e7caf8c54b24cb1;hpb=aaa5aa61bb2d64fa3da6f8c907070200c4575ba0;p=modules%2Fgeom.git diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 512855280..76f133190 100644 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2010 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 @@ -18,6 +18,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #ifdef WNT #pragma warning( disable:4786 ) @@ -66,11 +67,11 @@ // function : GEOM_Gen_i() // purpose : constructor to be called for servant creation. //============================================================================ -GEOM_Gen_i::GEOM_Gen_i(CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - PortableServer::ObjectId * contId, - const char *instanceName, - const char *interfaceName) : +GEOM_Gen_i::GEOM_Gen_i(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId* contId, + const char* instanceName, + const char* interfaceName) : Engines_Component_i(orb, poa, contId, instanceName, interfaceName) { _thisObj = this; @@ -182,9 +183,12 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, anAttr = aStudyBuilder->FindOrCreateAttribute(aFather, "AttributeName"); SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr); aName->SetValue("Geometry"); + aName->Destroy(); anAttr = aStudyBuilder->FindOrCreateAttribute(aFather, "AttributePixMap"); - SALOMEDS::AttributePixMap::_narrow(anAttr)->SetPixMap("ICON_OBJBROWSER_Geometry"); - aStudyBuilder->DefineComponentInstance(aFather, GEOM_Gen::_this()); + SALOMEDS::AttributePixMap_var aPixMap=SALOMEDS::AttributePixMap::_narrow(anAttr); + aPixMap->SetPixMap("ICON_OBJBROWSER_Geometry"); + aPixMap->Destroy(); + aStudyBuilder->DefineComponentInstance(aFather, (GEOM::GEOM_Gen_var)GEOM_Gen::_this()); } if (aFather->_is_nil()) return aResultSO; @@ -197,10 +201,9 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, } anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributeIOR"); SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - //char *aGeomObjIOR = _orb->object_to_string(theObject); - CORBA::String_var aGeomObjIOR = _orb->object_to_string(theObject); - //anIOR->SetValue(CORBA::string_dup(aGeomObjIOR)); + CORBA::String_var aGeomObjIOR = _orb->object_to_string(theObject); anIOR->SetValue(aGeomObjIOR); + anIOR->Destroy(); anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributePixMap"); SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr); @@ -229,6 +232,12 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, } else if ( aShape->GetType() == GEOM_MARKER ) { aPixmap->SetPixMap( "ICON_OBJBROWSER_LCS" ); aShapeName = "LocalCS_"; + } else if ( aShape->GetType() > ADVANCED_BASE ) { + char buf[20]; + sprintf( buf, "%d", aShape->GetType() ); + std::string advId = "ICON_OBJBROWSER_ADVANCED_"; advId += buf; + aPixmap->SetPixMap( advId.c_str() ); + aShapeName = "Advanced_"; } else if ( aShape->GetShapeType() == GEOM::COMPOUND ) { aPixmap->SetPixMap( "ICON_OBJBROWSER_COMPOUND" ); aShapeName = "Compound_"; @@ -254,6 +263,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, aPixmap->SetPixMap( "ICON_OBJBROWSER_VERTEX" ); aShapeName = "Vertex_"; } + aPixmap->Destroy(); //if (strlen(theName) == 0) aShapeName += TCollection_AsciiString(aResultSO->Tag()); //else aShapeName = TCollection_AsciiString(CORBA::string_dup(theName)); @@ -264,8 +274,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, Handle(GEOM_Object) aGShape = _impl->GetObject(aShape->GetStudyID(), entry); TopoDS_Shape TopoSh = aGShape->GetValue(); // find label of main shape - GEOM::GEOM_Object_var aMainShVar = aShape; - GEOM::GEOM_Object_ptr aMainSh = aMainShVar._retn(); + GEOM::GEOM_Object_var aMainSh = aShape; while( !aMainSh->IsMainShape() ) { aMainSh = aMainSh->GetMainShape(); } @@ -309,16 +318,19 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, } //Set the study entry as a name of the published GEOM_Object - aShape->SetStudyEntry(aResultSO->GetID()); + CORBA::String_var anID =aResultSO->GetID(); + aShape->SetStudyEntry(anID.in()); //Set a name of the added shape anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributeName"); SALOMEDS::AttributeName_var aNameAttrib = SALOMEDS::AttributeName::_narrow(anAttr); aNameAttrib->SetValue(aShapeName.ToCString()); + aNameAttrib->Destroy(); //Set NoteBook variables used in the object creation TCollection_AsciiString aVars; - SALOMEDS::ListOfListOfStrings_var aSections = theStudy->ParseVariables(aShape->GetParameters()); + CORBA::String_var aString=aShape->GetParameters(); + SALOMEDS::ListOfListOfStrings_var aSections = theStudy->ParseVariables(aString); for(int i = 0, n = aSections->length(); i < n; i++) { SALOMEDS::ListOfStrings aListOfVars = aSections[i]; for(int j = 0, m = aListOfVars.length(); j < m; j++) { @@ -333,6 +345,9 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, anAttr = aStudyBuilder->FindOrCreateAttribute(aResultSO, "AttributeString"); SALOMEDS::AttributeString_var aStringAttrib = SALOMEDS::AttributeString::_narrow(anAttr); aStringAttrib->SetValue(aVars.ToCString()); + aStringAttrib->Destroy(); + + aFather->Destroy(); //Set a name of the GEOM object aShape->SetName(theName); @@ -362,27 +377,30 @@ void GEOM_Gen_i::CreateAndPublishGroup(SALOMEDS::Study_ptr theStudy, GEOM::GEOM_Object_ptr GrObj = GOp->CreateGroup( theMainShape, SeqS.Value(1).ShapeType() ); AddInStudy(theStudy, GrObj, GrName, theMainShape._retn()); + CORBA::String_var GrEntry = GrObj->GetEntry(); + Handle(GEOM_Object) HGrObj = _impl->GetObject(GrObj->GetStudyID(), GrEntry); // add named objects - Handle(GEOM_Object) anObj; + //Handle(GEOM_Object) anObj; for(int i=1; i<=SeqS.Length(); i++) { TopoDS_Shape aValue = SeqS.Value(i); - anArray = new TColStd_HArray1OfInteger(1,1); + //anArray = new TColStd_HArray1OfInteger(1,1); Standard_Integer anIndex = anIndices.FindIndex(aValue); - anArray->SetValue(1, anIndex); - anObj = GEOM_Engine::GetEngine()->AddObject(aMainShape->GetDocID(), GEOM_SUBSHAPE); - if (anObj.IsNull()) continue; - Handle(GEOM_Function) aFunction = anObj->AddFunction(GEOM_Object::GetSubShapeID(), 1); - if (aFunction.IsNull()) continue; - GEOM_ISubShape aSSI(aFunction); - aSSI.SetMainShape(aMainShape->GetLastFunction()); - aSSI.SetIndices(anArray); - aFunction->SetValue(aValue); - GOp->UnionIDs(GrObj, anIndex); - SALOMEDS::SObject_var aResultSO; - TCollection_AsciiString anEntry; - TDF_Tool::Entry(anObj->GetEntry(),anEntry); - GEOM::GEOM_Object_var aGObj = GetObject(anObj->GetDocID(), anEntry.ToCString()); - AddInStudy(theStudy, aGObj._retn(), SeqN.Value(i).ToCString(), GrObj); + //anArray->SetValue(1, anIndex); + GOp->AddObject(GrObj,anIndex); + //anObj = GEOM_Engine::GetEngine()->AddObject(aMainShape->GetDocID(), GEOM_SUBSHAPE); + //if (anObj.IsNull()) continue; + //Handle(GEOM_Function) aFunction = anObj->AddFunction(GEOM_Object::GetSubShapeID(), 1); + //if (aFunction.IsNull()) continue; + //GEOM_ISubShape aSSI(aFunction); + //aSSI.SetMainShape(aMainShape->GetLastFunction()); + //aSSI.SetIndices(anArray); + //aFunction->SetValue(aValue); + //GOp->UnionIDs(GrObj, anIndex); + //SALOMEDS::SObject_var aResultSO; + //TCollection_AsciiString anEntry; + //TDF_Tool::Entry(anObj->GetEntry(),anEntry); + //GEOM::GEOM_Object_var aGObj = GetObject(anObj->GetDocID(), anEntry.ToCString()); + //AddInStudy(theStudy, aGObj._retn(), SeqN.Value(i).ToCString(), GrObj); } } } @@ -588,7 +606,8 @@ CORBA::Boolean GEOM_Gen_i::LoadASCII(SALOMEDS::SComponent_ptr theComponent, //============================================================================ void GEOM_Gen_i::Close(SALOMEDS::SComponent_ptr theComponent) { - _impl->Close(theComponent->GetStudy()->StudyId()); + SALOMEDS::Study_var aStudy= theComponent->GetStudy(); + _impl->Close(aStudy->StudyId()); } //============================================================================ @@ -602,7 +621,10 @@ CORBA::Boolean GEOM_Gen_i::CanCopy(SALOMEDS::SObject_ptr theObject) { SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow(_orb->string_to_object(anIOR->Value())); + CORBA::String_var aString=anIOR->Value(); + anIOR->Destroy(); + CORBA::Object_var anObj = _orb->string_to_object(aString); + GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow(anObj); // If the object is null one it can't be copied: return false if (anObject->_is_nil()) return false; return true; @@ -657,7 +679,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PasteInto(const SALOMEDS::TMPFile& theStream, // Retrieve a TopoDS_Shape from byte stream TopoDS_Shape aTopology; - istrstream aStreamedBrep((char*) &theStream[0], theStream.length()); + std::istrstream aStreamedBrep((char*) &theStream[0], theStream.length()); BRep_Builder aBuilder; try { BRepTools::Read(aTopology, aStreamedBrep, aBuilder); @@ -689,6 +711,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PasteInto(const SALOMEDS::TMPFile& theStream, SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); CORBA::String_var objStr = _orb->object_to_string(obj); anIOR->SetValue(objStr.in()); + anIOR->Destroy(); // Return the created in the Study SObject return aNewSO._retn(); @@ -723,6 +746,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy (SALOMEDS::Study_ptr theStudy, SALOMEDS::SObject_var aFatherSO = theStudy->FindObjectIOR(IOR.in()); if(aFatherSO->_is_nil()) return aResultSO._retn(); aResultSO = aStudyBuilder->NewObject(aFatherSO); + aFatherSO->Destroy(); //aStudyBuilder->Addreference(aResultSO, aResultSO); } @@ -742,6 +766,8 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy (SALOMEDS::Study_ptr theStudy, if(aSO->_is_nil()) continue; SALOMEDS::SObject_var aSubSO = aStudyBuilder->NewObject(aResultSO); aStudyBuilder->Addreference(aSubSO, aSO); + aSO->Destroy(); + aSubSO->Destroy(); } return aResultSO._retn(); @@ -756,7 +782,8 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesO (SALOMEDS::Study_ptr theStudy, GEOM::GEOM_Object_ptr theObject, const GEOM::ListOfGO& theArgs, GEOM::find_shape_method theFindMethod, - CORBA::Boolean theInheritFirstArg) + CORBA::Boolean theInheritFirstArg, + CORBA::Boolean theAddPrefix) { GEOM::ListOfGO_var aParts = new GEOM::ListOfGO; if (CORBA::is_nil(theStudy) || CORBA::is_nil(theObject)) @@ -770,7 +797,9 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesO (SALOMEDS::Study_ptr theStudy, // if (CORBA::is_nil(aSO)) // return aParts._retn(); - aParts = RestoreSubShapes(theStudy, theObject, aSO, theArgs, theFindMethod, theInheritFirstArg); + aParts = RestoreSubShapes(theStudy, theObject, aSO, theArgs, + theFindMethod, theInheritFirstArg, theAddPrefix); + if (!CORBA::is_nil(aSO)) aSO->Destroy(); return aParts._retn(); } @@ -780,10 +809,11 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesO (SALOMEDS::Study_ptr theStudy, // To be used from GUI and from geompy.addToStudy //============================================================================ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesSO (SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject, - const GEOM::ListOfGO& theArgs, - GEOM::find_shape_method theFindMethod, - CORBA::Boolean theInheritFirstArg) + SALOMEDS::SObject_ptr theSObject, + const GEOM::ListOfGO& theArgs, + GEOM::find_shape_method theFindMethod, + CORBA::Boolean theInheritFirstArg, + CORBA::Boolean theAddPrefix) { GEOM::ListOfGO_var aParts = new GEOM::ListOfGO; if (CORBA::is_nil(theStudy) || CORBA::is_nil(theSObject)) @@ -801,34 +831,35 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesSO (SALOMEDS::Study_ptr theStudy if (CORBA::is_nil(anO)) return aParts._retn(); - aParts = RestoreSubShapes(theStudy, anO, theSObject, theArgs, theFindMethod, theInheritFirstArg); - aParts._retn(); + aParts = RestoreSubShapes(theStudy, anO, theSObject, theArgs, + theFindMethod, theInheritFirstArg, theAddPrefix); + return aParts._retn(); } //============================================================================ // function : addToListOfGO // purpose : static local function //============================================================================ -static void addToListOfGO( const GEOM::GEOM_Object_var& theObject, - GEOM::ListOfGO_var& theList ) +static void addToListOfGO( GEOM::GEOM_Object_ptr theObject, + GEOM::ListOfGO& theList ) { - const int oldLen = theList->length(); - theList->length(oldLen + 1); - theList[ oldLen ] = theObject; + const int oldLen = theList.length(); + theList.length(oldLen + 1); + theList[ oldLen ] = GEOM::GEOM_Object::_duplicate( theObject ); } //============================================================================ // function : addToListOfGO // purpose : static local function //============================================================================ -static void addToListOfGO( GEOM::ListOfGO_var& theSrcList, - GEOM::ListOfGO_var& theTrgList ) +static void addToListOfGO( const GEOM::ListOfGO& theSrcList, + GEOM::ListOfGO& theTrgList ) { - const int oldLen = theTrgList->length(); - const int srcLen = theSrcList->length(); - theTrgList->length(oldLen + srcLen); + const int oldLen = theTrgList.length(); + const int srcLen = theSrcList.length(); + theTrgList.length(oldLen + srcLen); for( int i = 0; i < srcLen; i++ ) - theTrgList[ oldLen + i ] = theSrcList[ i ]; + theTrgList[ oldLen + i ] = GEOM::GEOM_Object::_duplicate( theSrcList[ i ] ); } //============================================================================ @@ -836,12 +867,13 @@ static void addToListOfGO( GEOM::ListOfGO_var& theSrcList, // purpose : Private method. Works only if both theObject and theSObject // are defined, and does not check, if they correspond to each other. //============================================================================ -GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, +GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr theStudy, GEOM::GEOM_Object_ptr theObject, SALOMEDS::SObject_ptr theSObject, const GEOM::ListOfGO& theArgs, GEOM::find_shape_method theFindMethod, - CORBA::Boolean theInheritFirstArg) + CORBA::Boolean theInheritFirstArg, + CORBA::Boolean theAddPrefix) { GEOM::ListOfGO_var aParts = new GEOM::ListOfGO; //PTv, IMP 0020001, The salome object @@ -860,7 +892,7 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, aList = new GEOM::ListOfGO; aList->length(aLength); for (int i = 0; i < aLength; i++) { - aList[i] = theArgs[i]; + aList[i] = GEOM::GEOM_Object::_duplicate( theArgs[i] ); } } else { @@ -877,14 +909,14 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, // Do not publish argument's reflection, // but only reconstruct its published sub-shapes - GEOM::GEOM_Object_var anArgO = aList[0]; - CORBA::String_var anIOR = _orb->object_to_string(anArgO); + CORBA::String_var anIOR = _orb->object_to_string(aList[0]); SALOMEDS::SObject_var anArgSO = theStudy->FindObjectIOR(anIOR.in()); - aParts = RestoreSubShapesOneLevel(theStudy, anArgSO, theSObject, theObject, theFindMethod); + aParts = RestoreSubShapesOneLevel(theStudy, anArgSO, theSObject, theObject, theFindMethod, theAddPrefix); // set the color of the transformed shape to the color of initial shape theObject->SetColor(aList[0]->GetColor()); + anArgSO->Destroy(); } else { // Get interface, containing method, which we will use to reconstruct sub-shapes @@ -928,7 +960,7 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, if (!CORBA::is_nil(aSubO)) aGroupOp->UnionIDs(aSubO, anIDs); } - else { + else if (anIDs->length() > 0) { // single sub-shape aSubO = aShapesOp->GetSubShape(theObject, anIDs[0]); } @@ -963,8 +995,11 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, // Publish the sub-shape SALOMEDS::SObject_var aSubSO; - if (!CORBA::is_nil(theSObject)) { - TCollection_AsciiString aSubName ("from_"); + if (!CORBA::is_nil(theSObject)) { + TCollection_AsciiString aSubName; + if (theAddPrefix) { + aSubName = "from_"; + } aSubName += anArgName; aSubSO = aStudyBuilder->NewObject(theSObject); aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString()); @@ -977,9 +1012,11 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, GEOM::ListOfGO_var aSubParts; if (theFindMethod == GEOM::FSM_GetInPlaceByHistory) // pass theObject, because only it has the history - aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, theObject, theFindMethod); + aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, + theObject, theFindMethod, theAddPrefix); else - aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, aSubO, theFindMethod); + aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, + aSubO, theFindMethod, theAddPrefix); // add to parts list addToListOfGO( aSubParts, aParts ); } @@ -987,12 +1024,13 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, else { // GetInPlace failed, try to build from published parts if (!CORBA::is_nil(anArgSO)) { SALOMEDS::SObject_var aSubSO; - if (!CORBA::is_nil(theSObject)) + if (!CORBA::is_nil(theSObject)) aSubSO = aStudyBuilder->NewObject(theSObject); // Restore published sub-shapes of the argument GEOM::ListOfGO_var aSubParts = - RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, theObject, theFindMethod); + RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO, + theObject, theFindMethod, theAddPrefix); // add to parts list addToListOfGO( aSubParts, aParts ); @@ -1010,7 +1048,10 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, } if (!CORBA::is_nil(aSubO) && !CORBA::is_nil(aSubSO)) { // Publish the sub-shape - TCollection_AsciiString aSubName ("from_parts_of_"); + TCollection_AsciiString aSubName; + if (theAddPrefix) { + aSubName = "from_parts_of_"; + } aSubName += anArgName; aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString()); // Restore color @@ -1023,16 +1064,17 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, } } } // try to build from published parts + anArgSO->Destroy(); } } // process arguments } - set anObjEntryMap; - GEOM::ListOfGO_var aResParts = new GEOM::ListOfGO; - int nbRes = 0; - int nb = aParts->length(); - aResParts->length(nb); - if (nb > 0) - { + std::set anObjEntryMap; + GEOM::ListOfGO_var aResParts = new GEOM::ListOfGO; + int nbRes = 0; + int nb = aParts->length(); + aResParts->length(nb); + if (nb > 0) + { Handle(GEOM_Object) aMainObj = _impl->GetObject(theObject->GetStudyID(), theObject->GetEntry()); Handle(GEOM_Function) aFunction = aMainObj->GetLastFunction(); GEOM::TPythonDump pd (aFunction, true); @@ -1040,7 +1082,7 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, int i = 0, j = 0; for ( ; i < nb; i++ ) { - const GEOM::GEOM_Object_var& anObj = aParts[ i ]; + GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_duplicate( aParts[ i ] ); if (CORBA::is_nil(anObj)) continue; char* anEntry = anObj->GetEntry(); @@ -1085,7 +1127,7 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes (SALOMEDS::Study_ptr theStudy, default: pd << "FSM_GetInPlaceByHistory"; break; } - pd << ", " << theInheritFirstArg << ")"; + pd << ", " << theInheritFirstArg << ", " << theAddPrefix << ")"; } aResParts->length(nbRes); return aResParts._retn(); @@ -1099,7 +1141,8 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr th SALOMEDS::SObject_ptr theOldSO, SALOMEDS::SObject_ptr theNewSO, GEOM::GEOM_Object_ptr theNewO, - GEOM::find_shape_method theFindMethod) + GEOM::find_shape_method theFindMethod, + CORBA::Boolean theAddPrefix) { int i = 0; GEOM::ListOfGO_var aParts = new GEOM::ListOfGO; @@ -1192,7 +1235,10 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr th SALOMEDS::SObject_var aNewSubSO; if (!CORBA::is_nil(theNewSO)) { // Publish the sub-shape - TCollection_AsciiString aSubName ("from_"); + TCollection_AsciiString aSubName; + if (theAddPrefix) { + aSubName = "from_"; + } aSubName += anArgName; aNewSubSO = aStudyBuilder->NewObject(theNewSO); aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString()); @@ -1203,9 +1249,11 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr th GEOM::ListOfGO_var aSubParts; if (theFindMethod == GEOM::FSM_GetInPlaceByHistory) // pass the main shape as Object, because only it has the history - aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, theNewO, theFindMethod); + aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, + theNewO, theFindMethod, theAddPrefix); else - aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, aNewSubO, theFindMethod); + aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, + aNewSubO, theFindMethod, theAddPrefix); // add to parts list addToListOfGO( aSubParts, aNewParts ); } @@ -1216,7 +1264,8 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr th // Restore published sub-shapes of the argument GEOM::ListOfGO_var aSubParts = - RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, theNewO, theFindMethod); + RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO, + theNewO, theFindMethod, theAddPrefix); // add to parts list addToListOfGO( aSubParts, aNewParts ); @@ -1239,7 +1288,10 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr th // Publish the sub-shape if (!CORBA::is_nil(aNewSubSO)) { - TCollection_AsciiString aSubName = "from_parts_of_"; + TCollection_AsciiString aSubName; + if (theAddPrefix) { + aSubName = "from_parts_of_"; + } aSubName += anArgName; aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString()); // Restore color @@ -1306,6 +1358,7 @@ GEOM::GEOM_IBasicOperations_ptr GEOM_Gen_i::GetIBasicOperations(CORBA::Long theS GEOM_IBasicOperations_i* aServant = new GEOM_IBasicOperations_i(_poa, engine, _impl->GetIBasicOperations(theStudyID)); + PortableServer::ObjectId_var id = _poa->activate_object(aServant); // activate the CORBA servant GEOM::GEOM_IBasicOperations_var operations = aServant->_this(); return operations._retn(); @@ -1345,6 +1398,7 @@ GEOM::GEOM_I3DPrimOperations_ptr GEOM_Gen_i::GetI3DPrimOperations(CORBA::Long th GEOM_I3DPrimOperations_i* aServant = new GEOM_I3DPrimOperations_i(_poa, engine, _impl->GetI3DPrimOperations(theStudyID)); + PortableServer::ObjectId_var id = _poa->activate_object(aServant); // activate the CORBA servant GEOM::GEOM_I3DPrimOperations_var operations = aServant->_this(); @@ -1531,6 +1585,26 @@ GEOM::GEOM_IGroupOperations_ptr GEOM_Gen_i::GetIGroupOperations(CORBA::Long theS return operations._retn(); } +//============================================================================ +// function : GetIAdvancedOperations +// purpose : +//============================================================================ +GEOM::GEOM_IAdvancedOperations_ptr GEOM_Gen_i::GetIAdvancedOperations(CORBA::Long theStudyID) + throw ( SALOME::SALOME_Exception ) +{ + Unexpect aCatch(SALOME_SalomeException); + MESSAGE( "GEOM_Gen_i::GetIAdvancedOperations" ); + + GEOM::GEOM_Gen_ptr engine = _this(); + + GEOM_IAdvancedOperations_i* aServant = + new GEOM_IAdvancedOperations_i(_poa, engine, _impl->GetIAdvancedOperations(theStudyID)); + + // activate the CORBA servant + GEOM::GEOM_IAdvancedOperations_var operations = aServant->_this(); + return operations._retn(); +} + //============================================================================= /*! * AddSubShape @@ -1564,7 +1638,7 @@ GEOM::GEOM_Object_ptr GEOM_Gen_i::AddSubShape (GEOM::GEOM_Object_ptr theMainShap void GEOM_Gen_i::RemoveObject(GEOM::GEOM_Object_ptr theObject) { CORBA::String_var anEntry = theObject->GetEntry(); - Handle(GEOM_Object) anObject = _impl->GetObject(theObject->GetStudyID(), anEntry); + Handle(GEOM_Object) anObject = _impl->GetObject(theObject->GetStudyID(), anEntry, false); if (anObject.IsNull()) return; _impl->RemoveObject(anObject); return; @@ -1612,7 +1686,9 @@ GEOM::GEOM_Object_ptr GEOM_Gen_i::GetObject (CORBA::Long theStudyID, const char* } GEOM::GEOM_Gen_ptr engine = _this(); + //transfer the reference to GEOM_Object_i GEOM_Object_i* servant = new GEOM_Object_i (_poa, engine, handle_object); + PortableServer::ObjectId_var id = _poa->activate_object(servant); obj = servant->_this(); CORBA::String_var objStr = _orb->object_to_string(obj); @@ -1650,9 +1726,12 @@ char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry) if (!aSObj->_is_nil() && aSObj->FindAttribute(anAttr, "AttributeIOR")) { SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); CORBA::String_var aVal = anIOR->Value(); + anIOR->Destroy(); CORBA::Object_var anObject = aStudy->ConvertIORToObject(aVal); aGeomObject = GEOM::GEOM_Object::_narrow(anObject); } + if (!aSObj->_is_nil() ) + aSObj->Destroy(); const char* aTypeInfo = "Object"; if ( !aGeomObject->_is_nil() ) { @@ -1741,7 +1820,7 @@ char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry) aTypeInfo = "Circle"; break; case GEOM::GEOM_IKindOfShape::ARC_CIRCLE: - aTypeInfo = "Ark"; + aTypeInfo = "Arc Circle"; break; case GEOM::GEOM_IKindOfShape::ELLIPSE: aTypeInfo = "Ellipse"; @@ -1780,16 +1859,19 @@ char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry) //===================================================================================== extern "C" { -GEOM_I_EXPORT - PortableServer::ObjectId * GEOMEngine_factory(CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - PortableServer::ObjectId * contId, - const char *instanceName, - const char * interfaceName) + /* + GEOM_I_EXPORT + PortableServer::ObjectId* GEOMEngine_factory(CORBA::ORB*, PortableServer::POA*, PortableServer::ObjectId*, const char*, const char*); + */ + + GEOM_I_EXPORT + PortableServer::ObjectId* GEOMEngine_factory(CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + PortableServer::ObjectId* contId, + const char* instanceName, + const char* interfaceName) { - GEOM_Gen_i * myGEOM_Gen_i = new GEOM_Gen_i(orb, poa, contId, instanceName, interfaceName); - // Don't understand the reason of this register ???? -// myGEOM_Gen_i->register_name("/myGEOM_Gen"); // NRI : 11/07/2002 : Add for Supervision example - return myGEOM_Gen_i->getId(); + GEOM_Gen_i* myGEOM_Gen_i = new GEOM_Gen_i(orb, poa, contId, instanceName, interfaceName); + return myGEOM_Gen_i->getId(); } }