From 40a7e07f710d683a2a450c1dac93cbfc29638905 Mon Sep 17 00:00:00 2001 From: jfa Date: Tue, 2 Aug 2005 09:03:51 +0000 Subject: [PATCH] Fix crash of BugRevolution.py import: apply the same patch, as on V2_2_0_maintainance --- src/GEOMGUI/GeometryGUI_Swig.cxx | 301 ++++++++++++++++--------------- 1 file changed, 151 insertions(+), 150 deletions(-) diff --git a/src/GEOMGUI/GeometryGUI_Swig.cxx b/src/GEOMGUI/GeometryGUI_Swig.cxx index eac491144..a99523bb3 100644 --- a/src/GEOMGUI/GeometryGUI_Swig.cxx +++ b/src/GEOMGUI/GeometryGUI_Swig.cxx @@ -1,23 +1,23 @@ // GEOM GEOMGUI : GUI for Geometry component // // 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // // @@ -56,6 +56,13 @@ #include +#include "utilities.h" + +#include "SALOMEDSClient.hxx" +#include "SALOMEDS_SObject.hxx" +#include "SALOMEDS_Study.hxx" + +// OCCT Includes #include #include #include @@ -72,13 +79,8 @@ #include #include -#include "utilities.h" - using namespace std; -#include "SALOMEDSClient.hxx" -#include "SALOMEDS_SObject.hxx" -#include "SALOMEDS_Study.hxx" static GEOM_Client ShapeReader; @@ -88,11 +90,11 @@ inline OCCViewer_Viewer* GetOCCViewer(SUIT_Application* theApp){ OCCViewer_ViewWindow* vw = dynamic_cast( window ); if ( vw ) { OCCViewer_ViewManager* vm = dynamic_cast( vw->getViewManager() ); - if ( vm ) + if ( vm ) return vm->getOCCViewer(); } } - + return 0; } @@ -100,7 +102,7 @@ inline SVTK_ViewWindow* GetSVTKViewWindow(SUIT_Application* theApp){ SUIT_ViewWindow* window = theApp->desktop()->activeWindow(); if(window && window->getViewManager()->getType() == VTKViewer_Viewer::Type()) return dynamic_cast( window ); - + return 0; } @@ -114,106 +116,105 @@ GEOM_Swig::~GEOM_Swig() // MESSAGE("Destructeur"); } -void GEOM_Swig::createAndDisplayGO(const char* Entry) +void GEOM_Swig::createAndDisplayGO (const char* Entry) { - // MESSAGE("createAndDisplayGO"); - - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( !app ) return; - - SalomeApp_Study* ActiveStudy = dynamic_cast( app->activeStudy() ); - if ( !ActiveStudy ) return; - - _PTR(Study) aStudy(ActiveStudy->studyDS()); - _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); - - GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); - if ( CORBA::is_nil( Geom ) ) - return; - - string aFatherIOR; - _PTR(SComponent) father = aStudy->FindComponent("GEOM"); - aStudyBuilder->DefineComponentInstance( father, SalomeApp_Application::orb()->object_to_string(Geom) ); - father->ComponentIOR(aFatherIOR); - - _PTR(SObject) obj = aStudy->FindObjectID(Entry); - _PTR(GenericAttribute) anAttr; - - // Create new actor - if ( !obj->FindAttribute(anAttr, "AttributeIOR")) - return; - _PTR(AttributeIOR) anIOR(anAttr); - string anIORValue = anIOR->Value(); - - GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(anIORValue.c_str()); - TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape); - - if ( obj ) { - if (obj->FindAttribute(anAttr, "AttributeName")) { - _PTR(AttributeName) aName ( anAttr ); - string aNameValue = aName->Value(); - // open transaction - /*jfa for bug IPAL9384 3)c):SUIT_Operation* op = new SalomeApp_ImportOperation( app ); - op->start(); - - _PTR(SObject) newObj1 = aStudyBuilder->NewObject(father); - aStudyBuilder->Addreference(newObj1, obj); - // commit transaction - op->commit();*/ - - Handle(GEOM_InteractiveObject) anIO = new GEOM_InteractiveObject(const_cast(anIORValue.c_str()), - const_cast(aFatherIOR.c_str()), - "GEOM", - const_cast( obj->GetID().c_str() )); - - class TEvent: public SALOME_Event{ - SUIT_Application* myApp; - TopoDS_Shape myShape; - Handle(SALOME_InteractiveObject) myIO; - const char* myName; - public: - TEvent(SUIT_Application* theApp, TopoDS_Shape theShape, - const Handle(SALOME_InteractiveObject)& theIO, - const char* theName): - myApp(theApp), myShape(theShape), - myIO(theIO), myName(theName) - {} - virtual void Execute(){ - if(SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(myApp)){ - SVTK_RenderWindowInteractor* myRenderInter= svtkViewWindow->getRWInteractor(); - int aMode = myRenderInter->GetDisplayMode(); - - vtkActorCollection* theActors = GEOM_AssemblyBuilder::BuildActors(myShape,0,aMode,true); + class TEvent: public SALOME_Event + { + std::string myEntry; + public: + TEvent(const char* theEntry): + myEntry(theEntry) + {} + virtual void Execute() + { + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if (!app) return; + + SalomeApp_Study* ActiveStudy = dynamic_cast(app->activeStudy()); + if (!ActiveStudy) return; + + _PTR(Study) aStudy(ActiveStudy->studyDS()); + _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); + + GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); + if (CORBA::is_nil(Geom)) + return; + + string aFatherIOR; + _PTR(SComponent) father = aStudy->FindComponent("GEOM"); + aStudyBuilder->DefineComponentInstance + (father, SalomeApp_Application::orb()->object_to_string(Geom)); + father->ComponentIOR(aFatherIOR); + + _PTR(SObject) obj = aStudy->FindObjectID(myEntry); + _PTR(GenericAttribute) anAttr; + + // Create new actor + if (!obj->FindAttribute(anAttr, "AttributeIOR")) + return; + _PTR(AttributeIOR) anIOR(anAttr); + string anIORValue = anIOR->Value(); + + GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(anIORValue.c_str()); + TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape); + + if (obj) { + if (obj->FindAttribute(anAttr, "AttributeName")) { + _PTR(AttributeName) aName (anAttr); + string aNameValue = aName->Value(); + // open transaction + /*SUIT_Operation* op = new SalomeApp_ImportOperation (app); + op->start(); + + _PTR(SObject) newObj1 = aStudyBuilder->NewObject(father); + aStudyBuilder->Addreference(newObj1, obj); + // commit transaction + op->commit();*/ + + Handle(GEOM_InteractiveObject) anIO = + new GEOM_InteractiveObject (const_cast(anIORValue.c_str()), + const_cast(aFatherIOR.c_str()), + "GEOM", + const_cast( obj->GetID().c_str())); + + if (SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(app)) { + SVTK_RenderWindowInteractor* aRenderInter= svtkViewWindow->getRWInteractor(); + int aMode = aRenderInter->GetDisplayMode(); + + vtkActorCollection* theActors = + GEOM_AssemblyBuilder::BuildActors(Shape,0,aMode,true); theActors->InitTraversal(); - while(vtkActor* anActor = theActors->GetNextActor()){ + while (vtkActor* anActor = theActors->GetNextActor()) { GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor); - GActor->setName(const_cast(myName)); - GActor->setIO(myIO); - myRenderInter->Display(GActor); + GActor->setName(const_cast(aNameValue.c_str())); + GActor->setIO(anIO); + aRenderInter->Display(GActor); } - myRenderInter->Update(); - }else if( OCCViewer_Viewer* occViewer = GetOCCViewer(myApp)){ + aRenderInter->Update(); + } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) { Handle(AIS_InteractiveContext) ic = occViewer->getAISContext(); - Handle(GEOM_AISShape) aSh = new GEOM_AISShape(myShape,const_cast(myName)); - aSh->setName(const_cast(myName)); - aSh->setIO(myIO); + Handle(GEOM_AISShape) aSh = + new GEOM_AISShape (Shape,const_cast(aNameValue.c_str())); + aSh->setName(const_cast(aNameValue.c_str())); + aSh->setIO(anIO); ic->Display(aSh); ic->AddOrRemoveCurrentObject(aSh,true); } // update object browser - SalomeApp_Application* app = dynamic_cast(myApp); + SalomeApp_Application* app = dynamic_cast(app); if (app) { - CAM_Module* module = app->module( "Geometry" ); - SalomeApp_Module* appMod = dynamic_cast( module ); - if ( appMod ) - appMod->updateObjBrowser( true ); + CAM_Module* module = app->module("Geometry"); + SalomeApp_Module* appMod = dynamic_cast(module); + if (appMod) + appMod->updateObjBrowser(true); } - } - }; - ProcessVoidEvent(new TEvent(app,Shape,anIO,aNameValue.c_str())); + } } - } + }; + + // MESSAGE("createAndDisplayGO"); + ProcessVoidEvent(new TEvent (Entry)); } @@ -222,7 +223,7 @@ int GEOM_Swig::getIndexTopology(const char* SubIOR, const char* IOR) GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); if ( CORBA::is_nil( Geom ) ) return -1; - + GEOM::GEOM_Object_var aMainShape = Geom->GetIORFromString(IOR); TopoDS_Shape shape = ShapeReader.GetShape(Geom, aMainShape); @@ -230,36 +231,36 @@ int GEOM_Swig::getIndexTopology(const char* SubIOR, const char* IOR) TopoDS_Shape subshape = ShapeReader.GetShape(Geom, aSubShape); int index = 1; - if(subshape.ShapeType() == TopAbs_COMPOUND) { - TopoDS_Iterator it; - TopTools_ListOfShape CL; - CL.Append(shape); - TopTools_ListIteratorOfListOfShape itC; + if(subshape.ShapeType() == TopAbs_COMPOUND) { + TopoDS_Iterator it; + TopTools_ListOfShape CL; + CL.Append(shape); + TopTools_ListIteratorOfListOfShape itC; for(itC.Initialize(CL); itC.More(); itC.Next()) { - for(it.Initialize(itC.Value()); it.More(); it.Next()) { + for(it.Initialize(itC.Value()); it.More(); it.Next()) { if (it.Value().ShapeType() == TopAbs_COMPOUND) { if (it.Value().IsSame(subshape)) - return index; - else - index++; - CL.Append(it.Value()); + return index; + else + index++; + CL.Append(it.Value()); } - } - } - } - else { - TopExp_Explorer Exp(shape, subshape.ShapeType()); - TopTools_MapOfShape M; - while(Exp.More()) { + } + } + } + else { + TopExp_Explorer Exp(shape, subshape.ShapeType()); + TopTools_MapOfShape M; + while(Exp.More()) { if(M.Add(Exp.Current())) { - if(Exp.Current().IsSame(subshape)) - return index; - index++; - } - Exp.Next(); - } - } - + if(Exp.Current().IsSame(subshape)) + return index; + index++; + } + Exp.Next(); + } + } + return -1; } @@ -268,7 +269,7 @@ const char* GEOM_Swig::getShapeTypeString(const char* IOR) GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); if ( CORBA::is_nil( Geom ) ) return 0; - + GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(IOR); TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape); @@ -287,7 +288,7 @@ const char* GEOM_Swig::getShapeTypeString(const char* IOR) case TopAbs_SHELL: { return "Shell" ;} case TopAbs_FACE: - { + { BRepAdaptor_Surface surf(TopoDS::Face(shape)); if ( surf.GetType() == GeomAbs_Plane ) { return "Plane" ; @@ -306,10 +307,10 @@ const char* GEOM_Swig::getShapeTypeString(const char* IOR) case TopAbs_WIRE: { return "Wire" ;} case TopAbs_EDGE: - { + { BRepAdaptor_Curve curv(TopoDS::Edge(shape)); if ( curv.GetType() == GeomAbs_Line ) { - if ( (Abs(curv.FirstParameter()) >= 1E6 ) || + if ( (Abs(curv.FirstParameter()) >= 1E6 ) || (Abs(curv.LastParameter()) >= 1E6 )) { return "Line" ; } else @@ -337,14 +338,14 @@ const char* GEOM_Swig::getShapeTypeIcon(const char* IOR) GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); if ( CORBA::is_nil( Geom ) ) return "None"; - + GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(IOR); TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape); if( shape.IsNull() ) { return "None" ; } - + switch (shape.ShapeType() ) { case TopAbs_COMPOUND: @@ -364,7 +365,7 @@ const char* GEOM_Swig::getShapeTypeIcon(const char* IOR) case TopAbs_VERTEX: { return "ICON_OBJBROWSER_VERTEX" ;} } - + return "None"; } @@ -372,9 +373,9 @@ void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode) { SUIT_Application* app = SUIT_Session::session()->activeApplication(); if ( !app ) return; - + Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(theEntry, "GEOM", ""); - + class TEvent: public SALOME_Event{ SUIT_Application* myApp; Handle(SALOME_InteractiveObject) myIO; @@ -453,9 +454,9 @@ void GEOM_Swig::setTransparency(const char* theEntry, float transp) { SUIT_Application* app = SUIT_Session::session()->activeApplication(); if ( !app ) return; - + Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(theEntry, "GEOM", ""); - + class TEvent: public SALOME_Event{ SUIT_Application* myApp; Handle(SALOME_InteractiveObject) myIO; @@ -476,7 +477,7 @@ void GEOM_Swig::setTransparency(const char* theEntry, float transp) } } }; - + ProcessVoidEvent(new TEvent(app,anIO,transp)); } -- 2.39.2