Improve GEOM_Displayer; required for features 0021391, 0021830 (part 2)

This commit is contained in:
vsr 2013-01-29 07:37:47 +00:00
parent db1060bcd6
commit ed5cffe2ae
2 changed files with 67 additions and 74 deletions

View File

@ -105,7 +105,7 @@ GEOM_Swig::~GEOM_Swig()
// MESSAGE("Destructeur"); // MESSAGE("Destructeur");
} }
void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated) void GEOM_Swig::createAndDisplayGO (const char* Entry, bool theUpdateViewer)
{ {
class TEvent: public SALOME_Event class TEvent: public SALOME_Event
{ {
@ -214,7 +214,7 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated)
}; };
// MESSAGE("createAndDisplayGO"); // MESSAGE("createAndDisplayGO");
ProcessVoidEvent(new TEvent (Entry, isUpdated)); ProcessVoidEvent(new TEvent (Entry, theUpdateViewer));
class TEventUpdateBrowser: public SALOME_Event class TEventUpdateBrowser: public SALOME_Event
{ {
@ -231,7 +231,7 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated)
} }
}; };
if (isUpdated) if (theUpdateViewer)
ProcessVoidEvent(new TEventUpdateBrowser ()); ProcessVoidEvent(new TEventUpdateBrowser ());
} }
@ -326,46 +326,42 @@ const char* GEOM_Swig::getShapeTypeString(const char* IOR)
} }
const char* GEOM_Swig::getShapeTypeIcon(const char* IOR) const char* GEOM_Swig::getShapeTypeIcon( const char* theIOR )
{ {
GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); static const char* icons[] = {
if ( CORBA::is_nil( Geom ) ) "ICON_OBJBROWSER_COMPOUND",
return "None"; "ICON_OBJBROWSER_COMPSOLID",
"ICON_OBJBROWSER_SOLID",
"ICON_OBJBROWSER_SHELL",
"ICON_OBJBROWSER_FACE",
"ICON_OBJBROWSER_WIRE",
"ICON_OBJBROWSER_EDGE",
"ICON_OBJBROWSER_VERTEX"
};
GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(IOR); const char* anIcon = "None";
TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape);
if( shape.IsNull() ) { try {
return "None" ; CORBA::Object_var anObject = SalomeApp_Application::orb()->string_to_object( theIOR );
if ( !CORBA::is_nil( anObject ) ) {
GEOM::GEOM_Object_var aShape = GEOM::GEOM_Object::_narrow( anObject.in() );
if ( !CORBA::is_nil( aShape ) ) {
GEOM::shape_type aType = aShape->GetShapeType();
if ( aType >= GEOM::COMPOUND && aType < GEOM::SHAPE )
anIcon = icons[ (int)aType ];
}
}
}
catch ( CORBA::Exception& ) {
} }
switch (shape.ShapeType() ) return anIcon;
{
case TopAbs_COMPOUND:
{ return "ICON_OBJBROWSER_COMPOUND" ;}
case TopAbs_COMPSOLID:
{ return "ICON_OBJBROWSER_COMPSOLID" ;}
case TopAbs_SOLID:
{ return "ICON_OBJBROWSER_SOLID" ;}
case TopAbs_SHELL:
{ return "ICON_OBJBROWSER_SHELL" ;}
case TopAbs_FACE:
{ return "ICON_OBJBROWSER_FACE" ;}
case TopAbs_WIRE:
{ return "ICON_OBJBROWSER_WIRE" ;}
case TopAbs_EDGE:
{ return "ICON_OBJBROWSER_EDGE" ;}
case TopAbs_VERTEX:
{ return "ICON_OBJBROWSER_VERTEX" ;}
} }
return "None"; void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode, bool theUpdateViewer)
}
void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode, bool isUpdated)
{ {
class TEvent: public SALOME_Event { class TEvent: public SALOME_Event {
std::string myEntry; QString myEntry;
int myMode; int myMode;
bool myUpdateViewer; bool myUpdateViewer;
public: public:
@ -373,30 +369,33 @@ void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode, bool isUpdated
myEntry(theEntryArg), myMode(theModeArg), myUpdateViewer(theUpdated) myEntry(theEntryArg), myMode(theModeArg), myUpdateViewer(theUpdated)
{} {}
virtual void Execute() { virtual void Execute() {
SUIT_Application* anApp = SUIT_Session::session()->activeApplication(); SUIT_Application* app = SUIT_Session::session()->activeApplication();
if (!anApp) return; if ( !app ) return;
Handle(SALOME_InteractiveObject) anIO = SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", ""); if ( !study ) return;
if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) { GEOM_Displayer displayer( study );
SVTK_View* aView = aViewWindow->getView();
aView->SetDisplayMode(anIO, myMode); SALOME_View* window = displayer.GetActiveView();
if (myUpdateViewer) if ( !window ) return;
aView->Repaint();
} int mgrId = dynamic_cast<SUIT_ViewModel*>( window )->getViewManager()->getGlobalId();
else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) { study->setObjectProperty( mgrId, myEntry, GEOM::propertyName( GEOM::DisplayMode ), myMode );
SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
if (soccViewer) Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject( myEntry.toLatin1().data(), "GEOM" );
soccViewer->switchRepresentation(anIO, myMode, myUpdateViewer); if ( window->isVisible( io ) ) {
SALOME_Prs* prs = displayer.buildPresentation( myEntry, window );
displayer.Redisplay( io );
delete prs;
} }
} }
}; };
ProcessVoidEvent(new TEvent (theEntry, theMode, isUpdated)); ProcessVoidEvent( new TEvent( theEntry, theMode, theUpdateViewer ) );
} }
void GEOM_Swig::setVectorsMode(const char* theEntry, bool isOn, bool isUpdated) void GEOM_Swig::setVectorsMode(const char* theEntry, bool isOn, bool theUpdateViewer)
{ {
class TEvent: public SALOME_Event { class TEvent: public SALOME_Event {
std::string myEntry; std::string myEntry;
@ -445,10 +444,10 @@ void GEOM_Swig::setVectorsMode(const char* theEntry, bool isOn, bool isUpdated)
} }
}; };
ProcessVoidEvent(new TEvent (theEntry, isOn, isUpdated)); ProcessVoidEvent(new TEvent (theEntry, isOn, theUpdateViewer));
} }
void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, bool isUpdated) void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, bool theUpdateViewer)
{ {
class TEvent: public SALOME_Event { class TEvent: public SALOME_Event {
QString myEntry; QString myEntry;
@ -466,10 +465,10 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, boo
GEOMToolsGUI::SetColor( myEntry, QColor( myRed, myGreen, myBlue), myUpdateViewer ); GEOMToolsGUI::SetColor( myEntry, QColor( myRed, myGreen, myBlue), myUpdateViewer );
} }
}; };
ProcessVoidEvent(new TEvent(theEntry, red, green, blue, isUpdated)); ProcessVoidEvent(new TEvent(theEntry, red, green, blue, theUpdateViewer));
} }
void GEOM_Swig::setIsos(const char* Entry, int nbU, int nbV, bool isUpdated ) void GEOM_Swig::setIsos(const char* Entry, int nbU, int nbV, bool theUpdateViewer )
{ {
class TEvent: public SALOME_Event { class TEvent: public SALOME_Event {
std::string myEntry; std::string myEntry;
@ -499,9 +498,9 @@ void GEOM_Swig::setIsos(const char* Entry, int nbU, int nbV, bool isUpdated )
int aIsos[2]={myNbU,myNbV}; int aIsos[2]={myNbU,myNbV};
anActor->SetNbIsos(aIsos); anActor->SetNbIsos(aIsos);
anActor->StoreIsoNumbers(); anActor->StoreIsoNumbers();
QString anIsos = QString("%1%2%3").arg(myNbU).arg(DIGIT_SEPARATOR).arg(myNbV); QString anIsos = QString("%1%2%3").arg(myNbU).arg(GEOM::subSectionSeparator()).arg(myNbV);
int aMgrId = aView->getViewManager()->getGlobalId(); int aMgrId = aView->getViewManager()->getGlobalId();
study->setObjectProperty(aMgrId, myEntry.c_str(), ISOS_PROP, anIsos); study->setObjectProperty(aMgrId, myEntry.c_str(), GEOM::propertyName( GEOM::NbIsos ), anIsos);
} }
} }
@ -521,15 +520,15 @@ void GEOM_Swig::setIsos(const char* Entry, int nbU, int nbV, bool isUpdated )
Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() ); Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() );
if ( !aSh.IsNull() ) { if ( !aSh.IsNull() ) {
Handle(AIS_Drawer) drawer = aSh->Attributes(); Handle(AIS_Drawer) drawer = aSh->Attributes();
QVariant v = study->getObjectProperty( aMgrId, myEntry.c_str(), EDGE_WIDTH_PROP, QVariant() ); QVariant v = study->getObjectProperty( aMgrId, myEntry.c_str(), GEOM::propertyName( GEOM::LineWidth ), QVariant() );
int width = v.isValid() ? v.toInt() : 1; int width = v.isValid() ? v.toInt() : 1;
drawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbU) ); drawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbU) );
drawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbV) ); drawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbV) );
aSh->storeIsoNumbers(); aSh->storeIsoNumbers();
ic->SetLocalAttributes(aSh, drawer); ic->SetLocalAttributes(aSh, drawer);
ic->Redisplay(aSh); ic->Redisplay(aSh);
QString anIsos = QString("%1%2%3").arg(myNbU).arg(DIGIT_SEPARATOR).arg(myNbV); QString anIsos = QString("%1%2%3").arg(myNbU).arg(GEOM::subSectionSeparator()).arg(myNbV);
study->setObjectProperty(aMgrId, myEntry.c_str(), ISOS_PROP, anIsos); study->setObjectProperty(aMgrId, myEntry.c_str(), GEOM::propertyName( GEOM::NbIsos ), anIsos);
} }
} }
} }
@ -538,10 +537,10 @@ void GEOM_Swig::setIsos(const char* Entry, int nbU, int nbV, bool isUpdated )
} }
}; };
ProcessVoidEvent(new TEvent (Entry, nbU, nbV, isUpdated)); ProcessVoidEvent(new TEvent (Entry, nbU, nbV, theUpdateViewer));
} }
void GEOM_Swig::setTransparency(const char* theEntry, float transp, bool isUpdated) void GEOM_Swig::setTransparency(const char* theEntry, float transp, bool theUpdateViewer)
{ {
class TEvent: public SALOME_Event { class TEvent: public SALOME_Event {
std::string myEntry; std::string myEntry;
@ -571,7 +570,7 @@ void GEOM_Swig::setTransparency(const char* theEntry, float transp, bool isUpdat
} }
}; };
ProcessVoidEvent(new TEvent (theEntry, transp, isUpdated)); ProcessVoidEvent(new TEvent (theEntry, transp, theUpdateViewer));
} }

View File

@ -30,27 +30,21 @@
#include "GEOM_GEOMGUI.hxx" #include "GEOM_GEOMGUI.hxx"
// IDL Headers
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(GEOM_Gen)
#include CORBA_SERVER_HEADER(SALOMEDS)
#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
class GEOMGUI_EXPORT GEOM_Swig class GEOMGUI_EXPORT GEOM_Swig
{ {
public: public:
GEOM_Swig(); GEOM_Swig();
~GEOM_Swig(); ~GEOM_Swig();
void createAndDisplayGO(const char* Entry, bool isUpdated = true); void createAndDisplayGO(const char* Entry, bool theUpdateViewer = true);
void eraseGO(const char* Entry, bool allWindows); void eraseGO(const char* Entry, bool allWindows);
void createAndDisplayFitAllGO(const char* Entry); void createAndDisplayFitAllGO(const char* Entry);
void UpdateViewer(); void UpdateViewer();
void setDisplayMode(const char* Entry, int mode, bool isUpdated = true); void setDisplayMode(const char* Entry, int mode, bool theUpdateViewer = true);
void setVectorsMode(const char* Entry, bool isSet, bool isUpdated = true); void setVectorsMode(const char* Entry, bool isSet, bool theUpdateViewer = true);
void setColor(const char* Entry, int red, int green, int blue, bool isUpdated = true); void setColor(const char* Entry, int red, int green, int blue, bool theUpdateViewer = true);
void setTransparency(const char* Entry, float transp, bool isUpdated = true); void setTransparency(const char* Entry, float transp, bool theUpdateViewer = true);
void setIsos(const char* Entry, int nbU, int nbV, bool isUpdated =true); void setIsos(const char* Entry, int nbU, int nbV, bool theUpdateViewer =true);
void setDeflection(const char* Entry, float deflect); void setDeflection(const char* Entry, float deflect);
int getIndexTopology(const char *SubEntry, const char *Entry); int getIndexTopology(const char *SubEntry, const char *Entry);