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,106 +116,105 @@ 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();
if (!app) return;
SUIT_Application* app = SUIT_Session::session()->activeApplication(); SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
if ( !app ) return; if (!ActiveStudy) return;
SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ); _PTR(Study) aStudy(ActiveStudy->studyDS());
if ( !ActiveStudy ) return; _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
_PTR(Study) aStudy(ActiveStudy->studyDS()); GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen();
_PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); if (CORBA::is_nil(Geom))
return;
GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); string aFatherIOR;
if ( CORBA::is_nil( Geom ) ) _PTR(SComponent) father = aStudy->FindComponent("GEOM");
return; aStudyBuilder->DefineComponentInstance
(father, SalomeApp_Application::orb()->object_to_string(Geom));
father->ComponentIOR(aFatherIOR);
string aFatherIOR; _PTR(SObject) obj = aStudy->FindObjectID(myEntry);
_PTR(SComponent) father = aStudy->FindComponent("GEOM"); _PTR(GenericAttribute) anAttr;
aStudyBuilder->DefineComponentInstance( father, SalomeApp_Application::orb()->object_to_string(Geom) );
father->ComponentIOR(aFatherIOR);
_PTR(SObject) obj = aStudy->FindObjectID(Entry); // Create new actor
_PTR(GenericAttribute) anAttr; if (!obj->FindAttribute(anAttr, "AttributeIOR"))
return;
_PTR(AttributeIOR) anIOR(anAttr);
string anIORValue = anIOR->Value();
// Create new actor GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(anIORValue.c_str());
if ( !obj->FindAttribute(anAttr, "AttributeIOR")) TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape);
return;
_PTR(AttributeIOR) anIOR(anAttr);
string anIORValue = anIOR->Value();
GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(anIORValue.c_str()); if (obj) {
TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape); 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 ) { _PTR(SObject) newObj1 = aStudyBuilder->NewObject(father);
if (obj->FindAttribute(anAttr, "AttributeName")) { aStudyBuilder->Addreference(newObj1, obj);
_PTR(AttributeName) aName ( anAttr ); // commit transaction
string aNameValue = aName->Value(); op->commit();*/
// open transaction
/*jfa for bug IPAL9384 3)c):SUIT_Operation* op = new SalomeApp_ImportOperation( app );
op->start();
_PTR(SObject) newObj1 = aStudyBuilder->NewObject(father); Handle(GEOM_InteractiveObject) anIO =
aStudyBuilder->Addreference(newObj1, obj); new GEOM_InteractiveObject (const_cast<char*>(anIORValue.c_str()),
// commit transaction const_cast<char*>(aFatherIOR.c_str()),
op->commit();*/ "GEOM",
const_cast<char*>( obj->GetID().c_str()));
Handle(GEOM_InteractiveObject) anIO = new GEOM_InteractiveObject(const_cast<char*>(anIORValue.c_str()), if (SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(app)) {
const_cast<char*>(aFatherIOR.c_str()), SVTK_RenderWindowInteractor* aRenderInter= svtkViewWindow->getRWInteractor();
"GEOM", int aMode = aRenderInter->GetDisplayMode();
const_cast<char*>( obj->GetID().c_str() ));
class TEvent: public SALOME_Event{ vtkActorCollection* theActors =
SUIT_Application* myApp; GEOM_AssemblyBuilder::BuildActors(Shape,0,aMode,true);
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);
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));
} }