X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGeometryGUI_Swig.cxx;h=eac49114490bc7e845aee8481c0c4b9c54a66b54;hb=144524d7be0c8389b25a57b7fcf831f0724e9e22;hp=36c28fa2447aa889f63d65678992fbae687a9c67;hpb=7842cbd70affcdb5232fe0b1397f75fbdadc495d;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GeometryGUI_Swig.cxx b/src/GEOMGUI/GeometryGUI_Swig.cxx index 36c28fa24..eac491144 100644 --- a/src/GEOMGUI/GeometryGUI_Swig.cxx +++ b/src/GEOMGUI/GeometryGUI_Swig.cxx @@ -1,25 +1,52 @@ -using namespace std; -// File : GeometryGUI_Swig.cxx -// Created : Tue Mar 26 15:08:38 2002 -// Author : Nicolas REJNERI, Paul RASCLE -// Project : SALOME -// Module : GEOM -// Copyright : Open CASCADE, EDF 2002 +// GEOM GEOMGUI : GUI for Geometry component +// +// Copyright (C) 2003 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 +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// +// +// +// File : GeometryGUI_Swig.cxx +// Author : Nicolas REJNERI, Paul RASCLE +// Module : GEOM // $Header$ #include "GeometryGUI_Swig.hxx" -#include "utilities.h" +#include "SALOMEGUI_Swig.hxx" + +#include "GeometryGUI.h" + +#include +#include +#include +#include + +#include -#include "QAD_Application.h" -#include "QAD_Desktop.h" -#include "QAD_Study.h" -#include "QAD_StudyFrame.h" -#include "QAD_RightFrame.h" -#include "SALOMEGUI_ImportOperation.h" +#include +#include +#include -#include "OCCViewer_Viewer3d.h" -#include "VTKViewer_RenderWindowInteractor.h" -#include "VTKViewer_ViewFrame.h" +#include +#include +#include +#include +#include #include "GEOM_Actor.h" #include "GEOM_Client.hxx" @@ -27,8 +54,12 @@ using namespace std; #include "GEOM_AssemblyBuilder.h" #include "GEOM_InteractiveObject.hxx" +#include + #include #include +#include +#include #include #include #include @@ -36,9 +67,43 @@ using namespace std; #include #include #include +#include +#include +#include +#include + +#include "utilities.h" + +using namespace std; + +#include "SALOMEDSClient.hxx" +#include "SALOMEDS_SObject.hxx" +#include "SALOMEDS_Study.hxx" static GEOM_Client ShapeReader; +inline OCCViewer_Viewer* GetOCCViewer(SUIT_Application* theApp){ + SUIT_ViewWindow* window = theApp->desktop()->activeWindow(); + if(window && window->getViewManager()->getType() == OCCViewer_Viewer::Type()){ + OCCViewer_ViewWindow* vw = dynamic_cast( window ); + if ( vw ) { + OCCViewer_ViewManager* vm = dynamic_cast( vw->getViewManager() ); + if ( vm ) + return vm->getOCCViewer(); + } + } + + return 0; +} + +inline SVTK_ViewWindow* GetSVTKViewWindow(SUIT_Application* theApp){ + SUIT_ViewWindow* window = theApp->desktop()->activeWindow(); + if(window && window->getViewManager()->getType() == VTKViewer_Viewer::Type()) + return dynamic_cast( window ); + + return 0; +} + GEOM_Swig::GEOM_Swig() { // MESSAGE("Constructeur"); @@ -52,118 +117,159 @@ GEOM_Swig::~GEOM_Swig() void GEOM_Swig::createAndDisplayGO(const char* Entry) { // MESSAGE("createAndDisplayGO"); - QAD_Study* ActiveStudy = QAD_Application::getDesktop()->getActiveStudy(); - SALOMEDS::Study_var aStudy = ActiveStudy->getStudyDocument(); - SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); - - Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "GEOM"); - GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp); - - Standard_CString Fatherior = ""; - SALOMEDS::SComponent_var father = aStudy->FindComponent("GEOM"); - aStudyBuilder->DefineComponentInstance( father, Geom ); - father->ComponentIOR( Fatherior ); + + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) return; + + SalomeApp_Study* ActiveStudy = dynamic_cast( app->activeStudy() ); + if ( !ActiveStudy ) return; + + _PTR(Study) aStudy(ActiveStudy->studyDS()); + _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); + + GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); + if ( CORBA::is_nil( Geom ) ) + return; - SALOMEDS::SObject_var fatherSF = aStudy->FindObjectID(ActiveStudy->getActiveStudyFrame()->entry()); + string aFatherIOR; + _PTR(SComponent) father = aStudy->FindComponent("GEOM"); + aStudyBuilder->DefineComponentInstance( father, SalomeApp_Application::orb()->object_to_string(Geom) ); + father->ComponentIOR(aFatherIOR); - SALOMEDS::SObject_var obj = aStudy->FindObjectID(Entry); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeName_var aName; - SALOMEDS::AttributeIOR_var anIOR; + _PTR(SObject) obj = aStudy->FindObjectID(Entry); + _PTR(GenericAttribute) anAttr; + // Create new actor if ( !obj->FindAttribute(anAttr, "AttributeIOR")) return; - anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr); - GEOM::GEOM_Shape_var aShape = Geom->GetIORFromString(anIOR->Value()); + _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); - if ( !obj->_is_nil() ) { + if ( obj ) { if (obj->FindAttribute(anAttr, "AttributeName")) { - aName = SALOMEDS::AttributeName::_narrow(anAttr); + _PTR(AttributeName) aName ( anAttr ); + string aNameValue = aName->Value(); // open transaction - QAD_Operation* op = new SALOMEGUI_ImportOperation( ActiveStudy ); + /*jfa for bug IPAL9384 3)c):SUIT_Operation* op = new SalomeApp_ImportOperation( app ); op->start(); - SALOMEDS::SObject_var newObj1 = aStudyBuilder->NewObject(fatherSF); + _PTR(SObject) newObj1 = aStudyBuilder->NewObject(father); aStudyBuilder->Addreference(newObj1, obj); // commit transaction - op->finish(); + op->commit();*/ - if ( ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK - //vtkQGLRenderWindowInteractor* myRenderInter = ActiveStudy->getActiveStudyFrame()->getRightFrame()->getVTKView()->getRWInteractor(); - VTKViewer_RenderWindowInteractor* myRenderInter= ((VTKViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor(); - int themode = myRenderInter->GetDisplayMode(); + Handle(GEOM_InteractiveObject) anIO = new GEOM_InteractiveObject(const_cast(anIORValue.c_str()), + const_cast(aFatherIOR.c_str()), + "GEOM", + const_cast( obj->GetID().c_str() )); - vtkActorCollection* theActors = - GEOM_AssemblyBuilder::BuildActors(Shape,0,themode,Standard_True); - theActors->InitTraversal(); - vtkActor* anActor = (vtkActor*)theActors->GetNextActor(); - while(!(anActor==NULL)) { - GEOM_Actor* GActor = GEOM_Actor::SafeDownCast( anActor ); - Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(), - Fatherior, - "GEOM"); - IO->setEntry(obj->GetID()); - GActor->setIO( IO ); - GActor->setName( aName->Value() ); + 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); + theActors->InitTraversal(); + while(vtkActor* anActor = theActors->GetNextActor()){ + GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor); + GActor->setName(const_cast(myName)); + GActor->setIO(myIO); + myRenderInter->Display(GActor); + } + myRenderInter->Update(); + }else if( OCCViewer_Viewer* occViewer = GetOCCViewer(myApp)){ + Handle(AIS_InteractiveContext) ic = occViewer->getAISContext(); + Handle(GEOM_AISShape) aSh = new GEOM_AISShape(myShape,const_cast(myName)); + aSh->setName(const_cast(myName)); + aSh->setIO(myIO); + ic->Display(aSh); + ic->AddOrRemoveCurrentObject(aSh,true); + } + // update object browser + SalomeApp_Application* app = dynamic_cast(myApp); + if (app) { + CAM_Module* module = app->module( "Geometry" ); + SalomeApp_Module* appMod = dynamic_cast( module ); + if ( appMod ) + appMod->updateObjBrowser( true ); + } - myRenderInter->Display(GActor); - anActor = (vtkActor*)theActors->GetNextActor(); - } - myRenderInter->Update(); - } - else if ( ActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC - { - OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)ActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer(); - // QAD_Viewer3d* v3d = ActiveStudy->getActiveStudyFrame()->getViewerOCC(); - Handle(AIS_InteractiveContext) ic = v3d->getAISContext(); - Handle(GEOM_AISShape) aSh = new GEOM_AISShape(Shape, aName->Value()); - Handle(GEOM_InteractiveObject) IO = new GEOM_InteractiveObject(anIOR->Value(), - Fatherior, - "GEOM"); - - IO->setEntry(obj->GetID()); - aSh->setIO( IO ); - aSh->setName( aName->Value() ); - ic->Display (aSh); - ic->AddOrRemoveCurrentObject(aSh, true); } + }; + ProcessVoidEvent(new TEvent(app,Shape,anIO,aNameValue.c_str())); } } - ActiveStudy->updateObjBrowser( true ); } + int GEOM_Swig::getIndexTopology(const char* SubIOR, const char* IOR) { - Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "GEOM"); - GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp); - - GEOM::GEOM_Shape_var aMainShape = Geom->GetIORFromString(IOR); - TopoDS_Shape shape = ShapeReader.GetShape(Geom, aMainShape); + GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); + if ( CORBA::is_nil( Geom ) ) + return -1; + + GEOM::GEOM_Object_var aMainShape = Geom->GetIORFromString(IOR); + TopoDS_Shape shape = ShapeReader.GetShape(Geom, aMainShape); - GEOM::GEOM_Shape_var aSubShape = Geom->GetIORFromString(SubIOR); - TopoDS_Shape subshape = ShapeReader.GetShape(Geom, aSubShape); + GEOM::GEOM_Object_var aSubShape = Geom->GetIORFromString(SubIOR); + TopoDS_Shape subshape = ShapeReader.GetShape(Geom, aSubShape); - TopExp_Explorer Exp ( shape, subshape.ShapeType() ); int index = 1; - TopTools_MapOfShape M; - while ( Exp.More() ) { - if ( M.Add(Exp.Current()) ) { - if ( Exp.Current().IsSame(subshape) ) - return index; - index++; - } - Exp.Next(); - } + if(subshape.ShapeType() == TopAbs_COMPOUND) { + TopoDS_Iterator it; + TopTools_ListOfShape CL; + CL.Append(shape); + TopTools_ListIteratorOfListOfShape itC; + for(itC.Initialize(CL); itC.More(); itC.Next()) { + for(it.Initialize(itC.Value()); it.More(); it.Next()) { + if (it.Value().ShapeType() == TopAbs_COMPOUND) { + if (it.Value().IsSame(subshape)) + return index; + else + index++; + CL.Append(it.Value()); + } + } + } + } + else { + TopExp_Explorer Exp(shape, subshape.ShapeType()); + TopTools_MapOfShape M; + while(Exp.More()) { + if(M.Add(Exp.Current())) { + if(Exp.Current().IsSame(subshape)) + return index; + index++; + } + Exp.Next(); + } + } + return -1; } const char* GEOM_Swig::getShapeTypeString(const char* IOR) { - Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "GEOM"); - GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp); + GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); + if ( CORBA::is_nil( Geom ) ) + return 0; - GEOM::GEOM_Shape_var aShape = Geom->GetIORFromString(IOR); + GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(IOR); TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape); if( shape.IsNull() ) { @@ -222,21 +328,24 @@ const char* GEOM_Swig::getShapeTypeString(const char* IOR) case TopAbs_SHAPE: { return "Shape" ;} } + return 0; } const char* GEOM_Swig::getShapeTypeIcon(const char* IOR) { - Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "GEOM"); - GEOM::GEOM_Gen_var Geom = GEOM::GEOM_Gen::_narrow(comp); - - GEOM::GEOM_Shape_var aShape = Geom->GetIORFromString(IOR); + GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen(); + if ( CORBA::is_nil( Geom ) ) + return "None"; + + GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(IOR); + TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape); - if( aShape->_is_nil() ) { + if( shape.IsNull() ) { return "None" ; } - switch (aShape->ShapeType() ) + switch (shape.ShapeType() ) { case TopAbs_COMPOUND: { return "ICON_OBJBROWSER_COMPOUND" ;} @@ -255,64 +364,124 @@ const char* GEOM_Swig::getShapeTypeIcon(const char* IOR) case TopAbs_VERTEX: { return "ICON_OBJBROWSER_VERTEX" ;} } + return "None"; } -void GEOM_Swig::setDisplayMode(const char* Entry, int mode) +void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode) { - QAD_Study* myStudy = QAD_Application::getDesktop()->getActiveStudy(); - Handle(SALOME_InteractiveObject) IO = - myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->FindIObject( Entry ); - - if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK - VTKViewer_RenderWindowInteractor* myRenderInter = - ((VTKViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor(); - - myRenderInter->SwitchRepresentation(IO, mode); - myRenderInter->Update(); - } - else if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC - { - OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer(); - v3d->SwitchRepresentation(IO, mode); + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) return; + + Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(theEntry, "GEOM", ""); + + class TEvent: public SALOME_Event{ + SUIT_Application* myApp; + Handle(SALOME_InteractiveObject) myIO; + int myParam; + public: + TEvent(SUIT_Application* theApp, const Handle(SALOME_InteractiveObject)& theIO, int theParam): + myApp(theApp), myIO(theIO), myParam(theParam) + {} + virtual void Execute(){ + if(SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(myApp)){ + SVTK_RenderWindowInteractor* myRenderInter= svtkViewWindow->getRWInteractor(); + myRenderInter->SetDisplayMode(myIO,myParam); + myRenderInter->Update(); + } + else if(OCCViewer_Viewer* occViewer = GetOCCViewer(myApp)) { + SOCC_Viewer* soccViewer = dynamic_cast( occViewer ); + if (soccViewer) + soccViewer->switchRepresentation(myIO,myParam); + } } + }; + + ProcessVoidEvent(new TEvent(app,anIO,theMode)); } -void GEOM_Swig::setColor(const char* Entry, int red, int green, int blue) +void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue) { - QAD_Study* myStudy = QAD_Application::getDesktop()->getActiveStudy(); - QColor c = QColor (red, green, blue); - Handle(SALOME_InteractiveObject) IO = - myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->FindIObject( Entry ); - - if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK - VTKViewer_RenderWindowInteractor* myRenderInter = - ((VTKViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor(); - myRenderInter->SetColor(IO,c); - myRenderInter->Update(); - } - else if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC - { - OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer(); - v3d->SetColor(IO,c); + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) return; + + Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(theEntry, "GEOM", ""); + + QColor aColor(red,green,blue); + + class TEvent: public SALOME_Event{ + SUIT_Application* myApp; + Handle(SALOME_InteractiveObject) myIO; + QColor myParam; + public: + TEvent(SUIT_Application* theApp, const Handle(SALOME_InteractiveObject)& theIO, const QColor& theParam): + myApp(theApp), myIO(theIO), myParam(theParam) + {} + virtual void Execute(){ + if(SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(myApp)){ + SVTK_RenderWindowInteractor* myRenderInter= svtkViewWindow->getRWInteractor(); + myRenderInter->SetColor(myIO,myParam); + myRenderInter->Update(); + }else if(OCCViewer_Viewer* occViewer = GetOCCViewer(myApp)){ + Handle(AIS_InteractiveContext) ic = occViewer->getAISContext(); + AIS_ListOfInteractive List; + ic->DisplayedObjects(List); + AIS_ListIteratorOfListOfInteractive ite(List); + for ( ; ite.More(); ite.Next() ) { + Handle(SALOME_InteractiveObject) anObj = + Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); + if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( myIO ) ) { + Quantity_Color CSFColor = Quantity_Color ( myParam.red() / 255., + myParam.green() / 255., + myParam.blue() / 255., + Quantity_TOC_RGB ); + 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(); + break; + } + } + } } + }; + ProcessVoidEvent(new TEvent(app,anIO,aColor)); } -void GEOM_Swig::setTransparency(const char* Entry, float transp) +void GEOM_Swig::setTransparency(const char* theEntry, float transp) { - QAD_Study* myStudy = QAD_Application::getDesktop()->getActiveStudy(); - Handle(SALOME_InteractiveObject) IO = - myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->FindIObject( Entry ); - - if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK - VTKViewer_RenderWindowInteractor* myRenderInter = - ((VTKViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor(); - myRenderInter->SetTransparency(IO,transp); - myRenderInter->Update(); - } - else if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC - { - OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer(); - v3d->SetTransparency(IO,transp); + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) return; + + Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(theEntry, "GEOM", ""); + + class TEvent: public SALOME_Event{ + SUIT_Application* myApp; + Handle(SALOME_InteractiveObject) myIO; + float myParam; + public: + TEvent(SUIT_Application* theApp, const Handle(SALOME_InteractiveObject)& theIO, float theParam): + myApp(theApp), myIO(theIO), myParam(theParam) + {} + virtual void Execute(){ + if(SVTK_ViewWindow* svtkViewWindow = GetSVTKViewWindow(myApp)){ + SVTK_RenderWindowInteractor* myRenderInter= svtkViewWindow->getRWInteractor(); + myRenderInter->SetTransparency(myIO,myParam); + myRenderInter->Update(); + }else if(OCCViewer_Viewer* occViewer = GetOCCViewer(myApp)) { + SOCC_Viewer* soccViewer = dynamic_cast( occViewer ); + if (soccViewer) + soccViewer->setTransparency(myIO,myParam); + } } + }; + + ProcessVoidEvent(new TEvent(app,anIO,transp)); +} + + +bool GEOM_Swig::initGeomGen() +{ + return GeometryGUI::InitGeomGen(); }