Fix crash of BugRevolution.py import: apply the same patch, as on V2_2_0_maintainance

This commit is contained in:
jfa 2005-08-02 09:03:51 +00:00
parent 60efe138c3
commit 40a7e07f71

View File

@ -56,6 +56,13 @@
#include <SALOME_Event.hxx> #include <SALOME_Event.hxx>
#include "utilities.h"
#include "SALOMEDSClient.hxx"
#include "SALOMEDS_SObject.hxx"
#include "SALOMEDS_Study.hxx"
// OCCT Includes
#include <TopExp_Explorer.hxx> #include <TopExp_Explorer.hxx>
#include <TopTools_MapOfShape.hxx> #include <TopTools_MapOfShape.hxx>
#include <TopTools_ListOfShape.hxx> #include <TopTools_ListOfShape.hxx>
@ -72,13 +79,8 @@
#include <AIS_ListIteratorOfListOfInteractive.hxx> #include <AIS_ListIteratorOfListOfInteractive.hxx>
#include <V3d_Viewer.hxx> #include <V3d_Viewer.hxx>
#include "utilities.h"
using namespace std; using namespace std;
#include "SALOMEDSClient.hxx"
#include "SALOMEDS_SObject.hxx"
#include "SALOMEDS_Study.hxx"
static GEOM_Client ShapeReader; static GEOM_Client ShapeReader;
@ -114,33 +116,41 @@ GEOM_Swig::~GEOM_Swig()
// MESSAGE("Destructeur"); // MESSAGE("Destructeur");
} }
void GEOM_Swig::createAndDisplayGO(const char* Entry) void GEOM_Swig::createAndDisplayGO (const char* Entry)
{ {
// MESSAGE("createAndDisplayGO"); 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(); SUIT_Application* app = SUIT_Session::session()->activeApplication();
if ( !app ) return; if (!app) return;
SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ); SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
if ( !ActiveStudy ) return; if (!ActiveStudy) return;
_PTR(Study) aStudy(ActiveStudy->studyDS()); _PTR(Study) aStudy(ActiveStudy->studyDS());
_PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen();
if ( CORBA::is_nil( Geom ) ) if (CORBA::is_nil(Geom))
return; return;
string aFatherIOR; string aFatherIOR;
_PTR(SComponent) father = aStudy->FindComponent("GEOM"); _PTR(SComponent) father = aStudy->FindComponent("GEOM");
aStudyBuilder->DefineComponentInstance( father, SalomeApp_Application::orb()->object_to_string(Geom) ); aStudyBuilder->DefineComponentInstance
(father, SalomeApp_Application::orb()->object_to_string(Geom));
father->ComponentIOR(aFatherIOR); father->ComponentIOR(aFatherIOR);
_PTR(SObject) obj = aStudy->FindObjectID(Entry); _PTR(SObject) obj = aStudy->FindObjectID(myEntry);
_PTR(GenericAttribute) anAttr; _PTR(GenericAttribute) anAttr;
// Create new actor // Create new actor
if ( !obj->FindAttribute(anAttr, "AttributeIOR")) if (!obj->FindAttribute(anAttr, "AttributeIOR"))
return; return;
_PTR(AttributeIOR) anIOR(anAttr); _PTR(AttributeIOR) anIOR(anAttr);
string anIORValue = anIOR->Value(); string anIORValue = anIOR->Value();
@ -148,12 +158,12 @@ void GEOM_Swig::createAndDisplayGO(const char* Entry)
GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(anIORValue.c_str()); GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(anIORValue.c_str());
TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape); TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape);
if ( obj ) { if (obj) {
if (obj->FindAttribute(anAttr, "AttributeName")) { if (obj->FindAttribute(anAttr, "AttributeName")) {
_PTR(AttributeName) aName ( anAttr ); _PTR(AttributeName) aName (anAttr);
string aNameValue = aName->Value(); string aNameValue = aName->Value();
// open transaction // open transaction
/*jfa for bug IPAL9384 3)c):SUIT_Operation* op = new SalomeApp_ImportOperation( app ); /*SUIT_Operation* op = new SalomeApp_ImportOperation (app);
op->start(); op->start();
_PTR(SObject) newObj1 = aStudyBuilder->NewObject(father); _PTR(SObject) newObj1 = aStudyBuilder->NewObject(father);
@ -161,59 +171,50 @@ void GEOM_Swig::createAndDisplayGO(const char* Entry)
// commit transaction // commit transaction
op->commit();*/ op->commit();*/
Handle(GEOM_InteractiveObject) anIO = new GEOM_InteractiveObject(const_cast<char*>(anIORValue.c_str()), Handle(GEOM_InteractiveObject) anIO =
new GEOM_InteractiveObject (const_cast<char*>(anIORValue.c_str()),
const_cast<char*>(aFatherIOR.c_str()), const_cast<char*>(aFatherIOR.c_str()),
"GEOM", "GEOM",
const_cast<char*>( obj->GetID().c_str() )); const_cast<char*>( obj->GetID().c_str()));
class TEvent: public SALOME_Event{ if (SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(app)) {
SUIT_Application* myApp; SVTK_RenderWindowInteractor* aRenderInter= svtkViewWindow->getRWInteractor();
TopoDS_Shape myShape; int aMode = aRenderInter->GetDisplayMode();
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); vtkActorCollection* theActors =
GEOM_AssemblyBuilder::BuildActors(Shape,0,aMode,true);
theActors->InitTraversal(); theActors->InitTraversal();
while(vtkActor* anActor = theActors->GetNextActor()){ while (vtkActor* anActor = theActors->GetNextActor()) {
GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor); GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor);
GActor->setName(const_cast<char*>(myName)); GActor->setName(const_cast<char*>(aNameValue.c_str()));
GActor->setIO(myIO); GActor->setIO(anIO);
myRenderInter->Display(GActor); aRenderInter->Display(GActor);
} }
myRenderInter->Update(); aRenderInter->Update();
}else if( OCCViewer_Viewer* occViewer = GetOCCViewer(myApp)){ } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) {
Handle(AIS_InteractiveContext) ic = occViewer->getAISContext(); Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
Handle(GEOM_AISShape) aSh = new GEOM_AISShape(myShape,const_cast<char*>(myName)); Handle(GEOM_AISShape) aSh =
aSh->setName(const_cast<char*>(myName)); new GEOM_AISShape (Shape,const_cast<char*>(aNameValue.c_str()));
aSh->setIO(myIO); aSh->setName(const_cast<char*>(aNameValue.c_str()));
aSh->setIO(anIO);
ic->Display(aSh); ic->Display(aSh);
ic->AddOrRemoveCurrentObject(aSh,true); ic->AddOrRemoveCurrentObject(aSh,true);
} }
// update object browser // update object browser
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(myApp); SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(app);
if (app) { if (app) {
CAM_Module* module = app->module( "Geometry" ); CAM_Module* module = app->module("Geometry");
SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>( module ); SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>(module);
if ( appMod ) if (appMod)
appMod->updateObjBrowser( true ); appMod->updateObjBrowser(true);
}
}
} }
} }
}; };
ProcessVoidEvent(new TEvent(app,Shape,anIO,aNameValue.c_str()));
} // MESSAGE("createAndDisplayGO");
} ProcessVoidEvent(new TEvent (Entry));
} }