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 "utilities.h"
#include "SALOMEDSClient.hxx"
#include "SALOMEDS_SObject.hxx"
#include "SALOMEDS_Study.hxx"
// OCCT Includes
#include <TopExp_Explorer.hxx>
#include <TopTools_MapOfShape.hxx>
#include <TopTools_ListOfShape.hxx>
@ -72,13 +79,8 @@
#include <AIS_ListIteratorOfListOfInteractive.hxx>
#include <V3d_Viewer.hxx>
#include "utilities.h"
using namespace std;
#include "SALOMEDSClient.hxx"
#include "SALOMEDS_SObject.hxx"
#include "SALOMEDS_Study.hxx"
static GEOM_Client ShapeReader;
@ -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");
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;
SUIT_Application* app = SUIT_Session::session()->activeApplication();
if ( !app ) return;
SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
if (!ActiveStudy) return;
SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
if ( !ActiveStudy ) return;
_PTR(Study) aStudy(ActiveStudy->studyDS());
_PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
_PTR(Study) aStudy(ActiveStudy->studyDS());
_PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen();
if (CORBA::is_nil(Geom))
return;
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);
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;
_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();
// 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);
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();
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();*/
_PTR(SObject) newObj1 = aStudyBuilder->NewObject(father);
aStudyBuilder->Addreference(newObj1, obj);
// commit transaction
op->commit();*/
Handle(GEOM_InteractiveObject) anIO =
new GEOM_InteractiveObject (const_cast<char*>(anIORValue.c_str()),
const_cast<char*>(aFatherIOR.c_str()),
"GEOM",
const_cast<char*>( obj->GetID().c_str()));
Handle(GEOM_InteractiveObject) anIO = new GEOM_InteractiveObject(const_cast<char*>(anIORValue.c_str()),
const_cast<char*>(aFatherIOR.c_str()),
"GEOM",
const_cast<char*>( obj->GetID().c_str() ));
if (SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(app)) {
SVTK_RenderWindowInteractor* aRenderInter= svtkViewWindow->getRWInteractor();
int aMode = aRenderInter->GetDisplayMode();
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);
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<char*>(myName));
GActor->setIO(myIO);
myRenderInter->Display(GActor);
GActor->setName(const_cast<char*>(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<char*>(myName));
aSh->setName(const_cast<char*>(myName));
aSh->setIO(myIO);
Handle(GEOM_AISShape) aSh =
new GEOM_AISShape (Shape,const_cast<char*>(aNameValue.c_str()));
aSh->setName(const_cast<char*>(aNameValue.c_str()));
aSh->setIO(anIO);
ic->Display(aSh);
ic->AddOrRemoveCurrentObject(aSh,true);
}
// update object browser
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(myApp);
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(app);
if (app) {
CAM_Module* module = app->module( "Geometry" );
SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>( module );
if ( appMod )
appMod->updateObjBrowser( true );
CAM_Module* module = app->module("Geometry");
SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>(module);
if (appMod)
appMod->updateObjBrowser(true);
}
}
};
ProcessVoidEvent(new TEvent(app,Shape,anIO,aNameValue.c_str()));
}
}
}
};
// MESSAGE("createAndDisplayGO");
ProcessVoidEvent(new TEvent (Entry));
}