-// GEOM GEOMGUI : GUI for Geometry component
+// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
//
-// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+
+// Copyright (C) 2003-2007 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
// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+// GEOM GEOMGUI : GUI for Geometry component
+// File : GeometryGUI_Swig.cxx
+// Author : Nicolas REJNERI, Paul RASCLE
//
-// File : GeometryGUI_Swig.cxx
-// Author : Nicolas REJNERI, Paul RASCLE
-// Module : GEOM
-// $Header$
-
#include "GeometryGUI_Swig.hxx"
-#include "SALOMEGUI_Swig.hxx"
#include "GeometryGUI.h"
+#include "SUIT_Desktop.h"
#include "SUIT_Session.h"
#include "SalomeApp_Application.h"
#include "SalomeApp_Study.h"
-#include "SalomeApp_ImportOperation.h"
#include "OB_Browser.h"
#include "OCCViewer_ViewWindow.h"
#include "OCCViewer_ViewManager.h"
#include "SOCC_ViewModel.h"
+#include <SOCC_Prs.h>
#include "SVTK_ViewModel.h"
#include "SVTK_ViewWindow.h"
#include "SVTK_View.h"
#include "SVTK_Renderer.h"
+#include <SVTK_Prs.h>
#include "GEOM_Actor.h"
#include "GEOM_Client.hxx"
#include "GEOM_AISShape.hxx"
-#include "GEOM_AssemblyBuilder.h"
#include "GEOM_InteractiveObject.hxx"
#include "GEOM_Displayer.h"
-#include "SALOME_Event.hxx"
-
-#include "utilities.h"
-
-#include "SALOMEDSClient.hxx"
+#include "SALOME_Event.h"
// OCCT Includes
#include <TopAbs.hxx>
#include <AIS_ListOfInteractive.hxx>
#include <AIS_ListIteratorOfListOfInteractive.hxx>
#include <AIS_Drawer.hxx>
+#include <BRepTools.hxx>
// IDL Headers
#include <SALOMEconfig.h>
// MESSAGE("Destructeur");
}
-void GEOM_Swig::createAndDisplayGO (const char* Entry)
+void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated)
{
class TEvent: public SALOME_Event
{
std::string myEntry;
+ bool myUpdateViewer;
public:
- TEvent(const char* theEntry):
- myEntry(theEntry)
+ TEvent(const char* theEntry, bool toUpdateViewer):
+ myEntry(theEntry),
+ myUpdateViewer(toUpdateViewer)
{}
virtual void Execute()
{
if (!father)
return;
if (!father->ComponentIOR(aFatherIOR)) {
- aStudyBuilder->LoadWith(father, SalomeApp_Application::orb()->object_to_string(Geom));
+ CORBA::String_var objStr = SalomeApp_Application::orb()->object_to_string(Geom);
+ aStudyBuilder->LoadWith(father, objStr.in());
father->ComponentIOR(aFatherIOR);
}
"GEOM",
const_cast<char*>( obj->GetID().c_str()));
- GEOM_Displayer(ActiveStudy).Display(anIO, true);
+ GEOM_Displayer(ActiveStudy).Display(anIO, myUpdateViewer);
/*if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) {
SVTK_View* aView = aViewWindow->getView();
int aMode = aView->GetDisplayMode();
};
// MESSAGE("createAndDisplayGO");
- ProcessVoidEvent(new TEvent (Entry));
+ ProcessVoidEvent(new TEvent (Entry, isUpdated));
class TEventUpdateBrowser: public SALOME_Event
{
}
};
- ProcessVoidEvent(new TEventUpdateBrowser ());
+ if (isUpdated)
+ ProcessVoidEvent(new TEventUpdateBrowser ());
}
void GEOM_Swig::createAndDisplayFitAllGO (const char* Entry)
ProcessVoidEvent(new TEventFitAll());
}
+void GEOM_Swig::UpdateViewer()
+{
+ class TEventUpdateViewer: public SALOME_Event
+ {
+ public:
+ TEventUpdateViewer() {}
+ virtual void Execute() {
+ SUIT_Application* app = SUIT_Session::session()->activeApplication();
+ if (!app) return;
+ SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
+ if (!ActiveStudy) return;
+
+ GEOM_Displayer(ActiveStudy).UpdateViewer();
+ }
+ };
+
+ ProcessVoidEvent(new TEventUpdateViewer());
+}
+
int GEOM_Swig::getIndexTopology(const char* SubIOR, const char* IOR)
{
GEOM::GEOM_Gen_var aGeomGen = GeometryGUI::GetGeomGen();
return "None";
}
-void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode)
+void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode, bool isUpdated)
{
class TEvent: public SALOME_Event {
std::string myEntry;
int myMode;
+ bool myUpdateViewer;
public:
- TEvent(const char* theEntryArg, int theModeArg):
- myEntry(theEntryArg), myMode(theModeArg)
+ TEvent(const char* theEntryArg, int theModeArg, bool theUpdated):
+ myEntry(theEntryArg), myMode(theModeArg), myUpdateViewer(theUpdated)
{}
virtual void Execute() {
SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) {
SVTK_View* aView = aViewWindow->getView();
aView->SetDisplayMode(anIO, myMode);
- aView->Repaint();
+ if (myUpdateViewer)
+ aView->Repaint();
}
else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
if (soccViewer)
- soccViewer->switchRepresentation(anIO, myMode);
+ soccViewer->switchRepresentation(anIO, myMode, myUpdateViewer);
}
}
};
- ProcessVoidEvent(new TEvent (theEntry, theMode));
+ ProcessVoidEvent(new TEvent (theEntry, theMode, isUpdated));
}
-void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue)
+void GEOM_Swig::setVectorsMode(const char* theEntry, bool isOn, bool isUpdated)
+{
+ class TEvent: public SALOME_Event {
+ std::string myEntry;
+ bool myOn;
+ bool myUpdateViewer;
+ public:
+ TEvent(const char* theEntryArg, bool theOn, bool theUpdated):
+ myEntry(theEntryArg), myOn(theOn), myUpdateViewer(theUpdated)
+ {}
+ virtual void Execute() {
+ SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
+ if (!anApp) return;
+
+ Handle(SALOME_InteractiveObject) anIO =
+ new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
+
+ if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) {
+ SVTK_View* aView = aViewWindow->getView();
+ SVTK_Viewer* stvkViewer = dynamic_cast<SVTK_Viewer*>(aViewWindow->getViewManager()->getViewModel());
+ SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( stvkViewer->CreatePrs( myEntry.c_str() ) );
+ vtkActorCollection* anActors = vtkPrs->GetObjects();
+ anActors->InitTraversal();
+ while (vtkActor* anAct = anActors->GetNextActor()) {
+ GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(anAct);
+ aGeomActor->SetVectorMode(!aGeomActor->GetVectorMode());
+ }
+ if (myUpdateViewer)
+ aView->Repaint();
+ }
+ else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
+ Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
+ SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
+ if (soccViewer) {
+ SOCC_Prs* occPrs = dynamic_cast<SOCC_Prs*>( soccViewer->CreatePrs( myEntry.c_str() ) );
+ if ( occPrs && !occPrs->IsNull() ) {
+ AIS_ListOfInteractive shapes; occPrs->GetObjects( shapes );
+ AIS_ListIteratorOfListOfInteractive interIter( shapes );
+ for ( ; interIter.More(); interIter.Next() ) {
+ Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() );
+ aSh->SetDisplayVectors(myOn);
+ ic->RecomputePrsOnly(interIter.Value());
+ }
+ }
+ }
+ }
+ }
+ };
+
+ ProcessVoidEvent(new TEvent (theEntry, isOn, isUpdated));
+}
+
+void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, bool isUpdated)
{
class TEvent: public SALOME_Event {
std::string myEntry;
int myRed;
int myGreen;
int myBlue;
+ bool myUpdateViewer;
public:
- TEvent(const char* theEntryArg, int theR, int theG, int theB):
- myEntry(theEntryArg), myRed(theR), myGreen(theG), myBlue(theB)
+ TEvent(const char* theEntryArg, int theR, int theG, int theB, bool theUpdated):
+ myEntry(theEntryArg), myRed(theR), myGreen(theG), myBlue(theB), myUpdateViewer(theUpdated)
{}
virtual void Execute() {
SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
SVTK_View* aView = aViewWindow->getView();
QColor aColor (myRed, myGreen, myBlue);
aView->SetColor(anIO, aColor);
- aView->Repaint();
+ if (myUpdateViewer)
+ aView->Repaint();
} else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
AIS_ListOfInteractive List;
ite.Value()->SetColor(CSFColor);
if (ite.Value()->IsKind(STANDARD_TYPE(GEOM_AISShape)))
Handle(GEOM_AISShape)::DownCast(ite.Value())->SetShadingColor(CSFColor);
- ite.Value()->Redisplay(Standard_True);
- occViewer->update();
+ ic->Redisplay(ite.Value(), true, true);
+ if (myUpdateViewer)
+ occViewer->update();
break;
}
}
}
}
};
- ProcessVoidEvent(new TEvent(theEntry, red, green, blue));
+ ProcessVoidEvent(new TEvent(theEntry, red, green, blue, isUpdated));
}
-void GEOM_Swig::setTransparency(const char* theEntry, float transp)
+void GEOM_Swig::setTransparency(const char* theEntry, float transp, bool isUpdated)
{
class TEvent: public SALOME_Event {
std::string myEntry;
float myParam;
+ bool myUpdateViewer;
public:
- TEvent(const char* theEntryArg, float theParam):
- myEntry(theEntryArg), myParam(theParam)
+ TEvent(const char* theEntryArg, float theParam, bool theUpdated):
+ myEntry(theEntryArg), myParam(theParam), myUpdateViewer(theUpdated)
{}
virtual void Execute() {
SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) {
SVTK_View* aView = aViewWindow->getView();
aView->SetTransparency(anIO, myParam);
- aView->Repaint();
+ if (myUpdateViewer)
+ aView->Repaint();
} else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
if (soccViewer)
- soccViewer->setTransparency(anIO, myParam);
+ soccViewer->setTransparency(anIO, myParam, myUpdateViewer);
}
}
};
- ProcessVoidEvent(new TEvent (theEntry, transp));
+ ProcessVoidEvent(new TEvent (theEntry, transp, isUpdated));
}
if ((!aObj.IsNull()) && aObj->hasEntry() && aObj->isSame(anIO)) {
Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast(it.Value());
if (!aShape.IsNull()) {
- Handle(AIS_Drawer) aDrawer = aShape->Attributes();
- if (aDrawer.IsNull())
- aDrawer = new AIS_Drawer();
- aDrawer->SetDeviationCoefficient(myParam);
- aShape->SetAttributes(aDrawer);
- aContext->Redisplay(aShape, true, true);
- aContext->UpdateCurrentViewer();
+ TopoDS_Shape aSh = aShape->Shape();
+ if (!aSh.IsNull())
+ BRepTools::Clean(aSh);
+
+ aShape->SetOwnDeviationCoefficient( myParam );
+ aShape->SetOwnHLRDeviationAngle( 1.57 );
+ aContext->Redisplay(aShape);
return;
}
}