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;
@ -116,8 +118,15 @@ GEOM_Swig::~GEOM_Swig()
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;
@ -133,10 +142,11 @@ void GEOM_Swig::createAndDisplayGO(const char* Entry)
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
@ -153,7 +163,7 @@ void GEOM_Swig::createAndDisplayGO(const char* Entry)
_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));
} }