1 // Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_XmlHandler.h"
34 #include "GEOMGUI_OCCSelector.h"
35 #include "GEOMGUI_Selection.h"
36 #include "GEOMGUI_CreationInfoWdg.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
41 #include "GEOM_Actor.h"
43 #include <Material_ResourceMgr.h>
44 #include <Material_Model.h>
46 #include <SUIT_Desktop.h>
47 #include <SUIT_MessageBox.h>
48 #include <SUIT_ResourceMgr.h>
49 #include <SUIT_Session.h>
50 #include <SUIT_ViewManager.h>
52 #include <PyInterp_Interp.h>
54 #include <OCCViewer_ViewWindow.h>
55 #include <OCCViewer_ViewPort3d.h>
56 #include <OCCViewer_ViewModel.h>
57 #include <OCCViewer_ViewManager.h>
59 #include <SOCC_ViewModel.h>
60 #include <SOCC_ViewWindow.h>
62 #include <SVTK_ViewWindow.h>
63 #include <SVTK_RenderWindowInteractor.h>
64 #include <SVTK_InteractorStyle.h>
65 #include <SVTK_ViewModel.h>
67 #include <SalomeApp_Application.h>
68 #include <SalomeApp_DataObject.h>
69 #include <SalomeApp_Study.h>
70 #include <SalomeApp_Tools.h>
72 #include <LightApp_SelectionMgr.h>
73 #include <LightApp_VTKSelector.h>
74 #include <LightApp_DataObject.h>
75 #include <LightApp_Preferences.h>
77 #include <SALOME_LifeCycleCORBA.hxx>
78 // #include <SALOME_ListIO.hxx>
79 #include <SALOME_ListIteratorOfListIO.hxx>
81 #include <SALOMEDSClient_ClientFactory.hxx>
82 #include <SALOMEDSClient_IParameters.hxx>
84 #include <SALOMEDS_SObject.hxx>
86 #include <Basics_OCCTVersion.hxx>
96 #include <QSignalMapper>
98 #include <AIS_Drawer.hxx>
99 #include <AIS_ListOfInteractive.hxx>
100 #include <AIS_ListIteratorOfListOfInteractive.hxx>
101 #include <Prs3d_Drawer.hxx>
102 #include <Prs3d_IsoAspect.hxx>
103 #include <Aspect_TypeOfMarker.hxx>
104 #include <OSD_SharedLibrary.hxx>
105 #include <NCollection_DataMap.hxx>
107 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
108 #include <TColStd_HArray1OfByte.hxx>
110 #include <Graphic3d_HArray1OfBytes.hxx>
113 #include <utilities.h>
115 #include <vtkCamera.h>
116 #include <vtkRenderer.h>
118 #include <Standard_Failure.hxx>
119 #include <Standard_ErrorHandler.hxx>
121 #include "GEOM_version.h"
122 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
125 Standard_EXPORT CAM_Module* createModule() {
126 return new GeometryGUI();
129 Standard_EXPORT char* getModuleVersion() {
130 return (char*)GEOM_VERSION_STR;
134 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
136 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
138 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
140 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
141 if (CORBA::is_nil(myComponentGeom))
143 return GeometryGUI::myComponentGeom;
146 bool GeometryGUI::InitGeomGen()
149 if ( CORBA::is_nil( myComponentGeom ) ) return false;
153 //=======================================================================
154 // function : ClientSObjectToObject
156 //=======================================================================
157 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
159 _PTR(GenericAttribute) anAttr;
160 CORBA::Object_var anObj;
162 std::string aValue = theSObject->GetIOR();
163 if (strcmp(aValue.c_str(), "") != 0) {
164 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
165 anObj = anORB->string_to_object(aValue.c_str());
168 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
170 return anObj._retn();
173 //=======================================================================
174 // function : ClientStudyToStudy
176 //=======================================================================
177 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
179 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
180 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
181 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
182 int aStudyID = theStudy->StudyId();
183 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
184 return aDSStudy._retn();
187 void GeometryGUI::Modified (bool theIsUpdateActions)
189 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
190 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
191 appStudy->Modified();
192 if ( theIsUpdateActions )
193 app->updateActions();
198 //=======================================================================
199 // function : GeometryGUI::GeometryGUI()
200 // purpose : Constructor
201 //=======================================================================
202 GeometryGUI::GeometryGUI() :
203 SalomeApp_Module( "GEOM" ),
206 if ( CORBA::is_nil( myComponentGeom ) )
208 Engines::EngineComponent_var comp =
209 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
210 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
213 myActiveDialogBox = 0;
215 gp_Pnt origin = gp_Pnt(0., 0., 0.);
216 gp_Dir direction = gp_Dir(0., 0., 1.);
217 myWorkingPlane = gp_Ax3(origin, direction);
220 myLocalSelectionMode = GEOM_ALLOBJECTS;
222 myCreationInfoWdg = 0;
224 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
227 //=======================================================================
228 // function : GeometryGUI::~GeometryGUI()
229 // purpose : Destructor
230 //=======================================================================
231 GeometryGUI::~GeometryGUI()
233 while (!myOCCSelectors.isEmpty())
234 delete myOCCSelectors.takeFirst();
236 while (!myVTKSelectors.isEmpty())
237 delete myVTKSelectors.takeFirst();
239 qDeleteAll(myGUIMap);
242 //=======================================================================
243 // function : GeometryGUI::getLibrary()
244 // purpose : get or load GUI library by name [ internal ]
245 //=======================================================================
246 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
247 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
249 if ( !myGUIMap.contains( libraryName ) ) {
250 // try to load library if it is not loaded yet
252 QString dirs = getenv( "LD_LIBRARY_PATH" );
255 QString dirs = getenv( "PATH" );
258 if ( !dirs.isEmpty() ) {
259 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
260 QListIterator<QString> it( dirList ); it.toBack();
261 while ( it.hasPrevious() ) {
262 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
264 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
265 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
267 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
268 continue; // continue search further
270 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
271 if ( osdF != NULL ) {
272 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
273 GEOMGUI* libGUI = (*func)( this );
275 myGUIMap[ libraryName ] = libGUI;
276 break; // found and loaded!
283 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
286 //=======================================================================
287 // function : GeometryGUI::getPluginLibrary()
288 // purpose : get or load GUI Plugin library by name [ internal ]
289 //=======================================================================
290 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
291 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
293 if ( !myGUIMap.contains( libraryName ) ) {
294 // try to load library if it is not loaded yet
296 QString dirs = getenv( "LD_LIBRARY_PATH" );
299 QString dirs = getenv( "PATH" );
302 if ( !dirs.isEmpty() ) {
303 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
304 QListIterator<QString> it( dirList ); it.toBack();
305 while ( it.hasPrevious() ) {
306 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
308 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
309 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
311 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
312 continue; // continue search further
314 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
315 if ( osdF != NULL ) {
316 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
317 GEOMPluginGUI* libGUI = (*func)( this );
319 myGUIMap[ libraryName ] = libGUI;
320 break; // found and loaded!
327 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
330 //=======================================================================
331 // function : GeometryGUI::ActiveWorkingPlane()
332 // purpose : Activate Working Plane View
333 //=======================================================================
334 void GeometryGUI::ActiveWorkingPlane()
336 gp_Dir DZ = myWorkingPlane.Direction();
337 gp_Dir DY = myWorkingPlane.YDirection();
339 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
340 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
341 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
344 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
346 Handle(V3d_View) view3d = vw->getViewPort()->getView();
348 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
349 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
353 else if ( ViewVTK ) {
354 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
356 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
358 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
359 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
360 camera->SetFocalPoint(0,0,0);
367 //=======================================================================
368 // function : GeometryGUI::SetActiveDialogBox()
369 // purpose : Set active dialog box
370 //=======================================================================
371 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
373 myActiveDialogBox = (QDialog*)aDlg;
376 //=======================================================================
377 // function : GeometryGUI::EmitSignalDeactivateDialog()
378 // purpose : Emit a signal to deactivate the active dialog Box
379 //=======================================================================
380 void GeometryGUI::EmitSignalDeactivateDialog()
382 emit SignalDeactivateActiveDialog();
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalCloseAllDialogs()
387 // purpose : Emit a signal to close all non modal dialogs box
388 //=======================================================================
389 void GeometryGUI::EmitSignalCloseAllDialogs()
391 emit SignalCloseAllDialogs();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
396 // purpose : Emit a signal to inform that default real spin box step has
398 //=======================================================================
399 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
401 emit SignalDefaultStepValueChanged(newVal);
404 //=======================================================================
405 // function : GeometryGUI::OnGUIEvent()
406 // purpose : common slot for all menu/toolbar actions
407 //=======================================================================
408 void GeometryGUI::OnGUIEvent()
410 const QObject* obj = sender();
411 if ( !obj || !obj->inherits( "QAction" ) )
413 int id = actionId((QAction*)obj);
418 //=======================================================================
419 // function : GeometryGUI::OnGUIEvent()
420 // purpose : manage all events on GUI [static]
421 //=======================================================================
422 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
424 SUIT_Application* anApp = application();
426 SUIT_Desktop* desk = anApp->desktop();
428 // check type of the active viewframe
429 SUIT_ViewWindow* window = desk->activeWindow();
430 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
431 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
432 // if current viewframe is not of OCC and not of VTK type - return immediately
433 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
434 QList<int> NotViewerDependentCommands;
435 NotViewerDependentCommands << GEOMOp::OpDelete
437 << GEOMOp::OpShowOnly
438 << GEOMOp::OpShowOnlyChildren
439 << GEOMOp::OpDiscloseChildren
440 << GEOMOp::OpConcealChildren
441 << GEOMOp::OpUnpublishObject
442 << GEOMOp::OpPublishObject
443 << GEOMOp::OpPointMarker
444 << GEOMOp::OpCreateFolder
445 << GEOMOp::OpSortChildren;
446 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) {
447 // activate OCC viewer
448 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
451 // fix for IPAL9103, point 2
452 if ( CORBA::is_nil( GetGeomGen() ) ) {
453 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
458 // find corresponding GUI library
460 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
461 createOriginAndBaseVectors(); // internal operation
463 case GEOMOp::OpImport: // MENU FILE - IMPORT
464 case GEOMOp::OpExport: // MENU FILE - EXPORT
465 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
466 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
467 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
468 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
469 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
470 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
471 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
472 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
473 case GEOMOp::OpDelete: // MENU EDIT - DELETE
474 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
475 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
476 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
477 case GEOMOp::OpColor: // POPUP MENU - COLOR
478 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
479 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
480 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
481 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
482 case GEOMOp::OpIsos: // POPUP MENU - ISOS
483 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
484 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
485 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
486 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
487 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
488 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
489 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
490 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
491 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
492 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
493 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
494 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
495 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
496 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
497 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
498 case GEOMOp::OpClsBringToFront: //
499 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
500 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
501 libName = "GEOMToolsGUI";
503 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
504 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
505 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
506 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
507 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
508 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
509 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
510 case GEOMOp::OpHide: // MENU VIEW - ERASE
511 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
512 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
513 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
514 case GEOMOp::OpShading: // POPUP MENU - SHADING
515 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
516 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
517 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
518 libName = "DisplayGUI";
520 case GEOMOp::OpPoint: // MENU BASIC - POINT
521 case GEOMOp::OpLine: // MENU BASIC - LINE
522 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
523 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
524 case GEOMOp::OpArc: // MENU BASIC - ARC
525 case GEOMOp::OpVector: // MENU BASIC - VECTOR
526 case GEOMOp::OpPlane: // MENU BASIC - PLANE
527 case GEOMOp::OpCurve: // MENU BASIC - CURVE
528 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
529 libName = "BasicGUI";
531 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
532 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
533 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
534 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
535 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
536 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
537 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
538 libName = "PrimitiveGUI";
540 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
541 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
542 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
543 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
544 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
545 libName = "GenerationGUI";
547 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
548 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
549 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
550 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
552 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
554 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
555 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
556 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
557 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
558 libName = "EntityGUI";
560 case GEOMOp::OpEdge: // MENU BUILD - EDGE
561 case GEOMOp::OpWire: // MENU BUILD - WIRE
562 case GEOMOp::OpFace: // MENU BUILD - FACE
563 case GEOMOp::OpShell: // MENU BUILD - SHELL
564 case GEOMOp::OpSolid: // MENU BUILD - SOLID
565 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
566 libName = "BuildGUI";
568 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
569 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
570 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
571 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
572 libName = "BooleanGUI";
574 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
575 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
576 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
577 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
578 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
579 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
580 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
581 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
582 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
583 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
584 libName = "TransformationGUI";
586 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
587 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
588 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
589 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
590 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
591 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
592 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
593 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
594 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
595 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
596 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
597 #ifdef DEBUG_CURVE_CREATOR
598 // for debug purposes, to be removed
599 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
601 libName = "OperationGUI";
603 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
604 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
605 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
606 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
607 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
608 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
609 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
610 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
611 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
612 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
613 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
614 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
615 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
616 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
617 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
618 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
619 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
620 libName = "RepairGUI";
622 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
623 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
624 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
625 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
626 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
627 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
628 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
629 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
630 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
631 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
632 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
633 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
634 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
635 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
636 libName = "MeasureGUI";
638 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
639 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
640 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
641 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
642 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
643 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
644 libName = "GroupGUI";
646 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
647 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
648 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
649 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
650 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
651 libName = "BlocksGUI";
653 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
654 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
655 libName = "ImportExportGUI";
657 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
658 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
659 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
660 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
661 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
662 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
663 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
664 //libName = "AdvancedGUI";
667 if (myPluginActions.contains(id)) {
668 libName = myPluginActions[id].first;
670 GEOMPluginGUI* library = 0;
671 if ( !libName.isEmpty() ) {
673 libName = QString( "lib" ) + libName + ".so";
675 libName = libName + ".dll";
677 library = getPluginLibrary( libName );
680 // call method of corresponding GUI library
682 //QString action ("%1");
683 //action = action.arg(id);
685 //if( !theParam.isValid() )
686 library->OnGUIEvent( myPluginActions[id].second, desk );
688 // library->OnGUIEvent( id, desk, theParam);
691 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
693 updateCreationInfo();
699 GEOMGUI* library = 0;
700 if ( !libName.isEmpty() ) {
702 libName = QString( "lib" ) + libName + ".so";
704 libName = libName + ".dll";
706 library = getLibrary( libName );
709 // call method of corresponding GUI library
711 if( !theParam.isValid() )
712 library->OnGUIEvent( id, desk );
714 library->OnGUIEvent( id, desk, theParam);
717 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
719 updateCreationInfo();
722 //=================================================================================
723 // function : GeometryGUI::activateOperation()
725 //=================================================================================
726 bool GeometryGUI::activateOperation( int actionId )
728 OnGUIEvent(actionId);
732 //=================================================================================
733 // function : GeometryGUI::activateOperation()
735 //=================================================================================
736 bool GeometryGUI::activateOperation( const QString& actionId )
740 int id = actionId.toInt(&isOk);
747 //=================================================================================
748 // function : GeometryGUI::activateOperation()
750 //=================================================================================
751 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
755 QString pluginLib = plugin;
756 // TODO: if <plugin> is a plugin name, find plugin library name
757 if (myPluginLibs.contains(plugin))
758 pluginLib = myPluginLibs[plugin];
760 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
761 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
762 const PluginAction& anAction = actionsIter.value();
763 if (anAction.first == pluginLib && anAction.second == actionId) {
764 // activate operation
765 OnGUIEvent(actionsIter.key());
773 //=================================================================================
774 // function : GeometryGUI::OnKeyPress()
775 // purpose : Called when any key is pressed by user [static]
776 //=================================================================================
777 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
779 if ( !application() )
781 foreach ( GEOMGUI* lib, myGUIMap )
782 lib->OnKeyPress( e, application()->desktop(), w );
785 //=================================================================================
786 // function : GeometryGUI::OnMouseMove()
787 // purpose : Manages mouse move events [static]
788 //=================================================================================
789 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
791 if ( !application() )
793 foreach ( GEOMGUI* lib, myGUIMap )
794 lib->OnMouseMove( e, application()->desktop(), w );
797 //=================================================================================
798 // function : GeometryGUI::OnMouseRelease()
799 // purpose : Manages mouse release events [static]
800 //=================================================================================
801 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
803 if ( !application() )
805 foreach ( GEOMGUI* lib, myGUIMap )
806 lib->OnMouseRelease( e, application()->desktop(), w );
809 //=================================================================================
810 // function : GeometryGUI::OnMousePress()
811 // purpose : Manage mouse press events [static]
812 //=================================================================================
813 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
815 if ( !application() )
817 foreach ( GEOMGUI* lib, myGUIMap )
818 lib->OnMousePress( e, application()->desktop(), w );
821 //=======================================================================
822 // function : createGeomAction
824 //=======================================================================
825 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
826 const int accel, const bool toggle, const QString& shortcutAction )
828 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
829 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
830 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
832 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
834 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
835 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
837 application()->desktop(),
839 this, SLOT( OnGUIEvent() ),
843 //=======================================================================
844 // function : createOriginAndBaseVectors
846 //=======================================================================
847 void GeometryGUI::createOriginAndBaseVectors()
849 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
851 _PTR(Study) studyDS = appStudy->studyDS();
852 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
853 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
854 if ( !aBasicOperations->_is_nil() ) {
855 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
856 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
857 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
858 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
859 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
860 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
862 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
863 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
864 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
865 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
866 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
868 getApp()->updateObjectBrowser( true );
874 //=======================================================================
875 // function : GeometryGUI::initialize()
876 // purpose : Called when GEOM module is created
877 //=======================================================================
878 void GeometryGUI::initialize( CAM_Application* app )
880 SalomeApp_Module::initialize( app );
882 // ----- create actions --------------
884 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
885 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
887 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
889 createGeomAction( GEOMOp::OpPoint, "POINT" );
890 createGeomAction( GEOMOp::OpLine, "LINE" );
891 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
892 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
893 createGeomAction( GEOMOp::OpArc, "ARC" );
894 createGeomAction( GEOMOp::OpCurve, "CURVE" );
895 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
896 createGeomAction( GEOMOp::OpVector, "VECTOR" );
897 createGeomAction( GEOMOp::OpPlane, "PLANE" );
898 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
899 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
901 createGeomAction( GEOMOp::OpBox, "BOX" );
902 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
903 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
904 createGeomAction( GEOMOp::OpTorus, "TORUS" );
905 createGeomAction( GEOMOp::OpCone, "CONE" );
906 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
907 createGeomAction( GEOMOp::OpDisk, "DISK" );
909 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
910 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
911 createGeomAction( GEOMOp::OpFilling, "FILLING" );
912 createGeomAction( GEOMOp::OpPipe, "PIPE" );
913 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
915 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
916 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
917 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
918 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
919 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
921 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
922 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
924 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
926 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
927 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
929 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
930 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
931 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
932 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
934 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
936 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
938 createGeomAction( GEOMOp::OpEdge, "EDGE" );
939 createGeomAction( GEOMOp::OpWire, "WIRE" );
940 createGeomAction( GEOMOp::OpFace, "FACE" );
941 createGeomAction( GEOMOp::OpShell, "SHELL" );
942 createGeomAction( GEOMOp::OpSolid, "SOLID" );
943 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
945 createGeomAction( GEOMOp::OpFuse, "FUSE" );
946 createGeomAction( GEOMOp::OpCommon, "COMMON" );
947 createGeomAction( GEOMOp::OpCut, "CUT" );
948 createGeomAction( GEOMOp::OpSection, "SECTION" );
950 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
951 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
952 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
953 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
954 createGeomAction( GEOMOp::OpScale, "SCALE" );
955 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
956 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
957 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
958 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
960 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
961 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
962 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
963 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
964 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
965 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
966 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
967 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
968 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
969 #ifdef DEBUG_CURVE_CREATOR
970 // for debug purposes, to be removed
971 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
973 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
974 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
976 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
977 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
978 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
980 createGeomAction( GEOMOp::OpSewing, "SEWING" );
981 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
982 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
983 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
984 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
985 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
986 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
987 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
988 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
989 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
990 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
991 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
992 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
993 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
994 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
995 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
996 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
998 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
999 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1000 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1001 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1002 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1003 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1004 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1005 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1007 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1008 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1009 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1010 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1011 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1012 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1014 #ifdef _DEBUG_ // PAL16821
1015 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1018 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1019 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1020 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1021 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1022 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1023 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1024 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1025 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1026 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1027 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1028 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1029 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1030 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1031 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1032 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1033 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1034 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1035 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1036 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1037 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1038 createGeomAction( GEOMOp::OpHide, "ERASE" );
1040 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1041 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1042 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1043 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1044 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1045 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1046 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1047 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1048 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1049 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1050 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1051 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1052 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1053 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1054 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1055 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1056 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1057 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1058 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1059 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1060 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1061 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1062 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1063 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1064 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1066 // Create actions for increase/decrease transparency shortcuts
1067 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1068 "Geometry:Increase transparency");
1069 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1070 "Geometry:Decrease transparency");
1072 // Create actions for increase/decrease number of isolines
1073 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1074 "Geometry:Increase number of isolines");
1075 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1076 "Geometry:Decrease number of isolines");
1078 // Import/Export XAO
1079 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1080 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1082 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1083 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1084 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1085 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1086 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1088 // ---- create menus --------------------------
1090 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1091 createMenu( separator(), fileId, 10 );
1092 createMenu( GEOMOp::OpImport, fileId, 10 );
1093 createMenu( GEOMOp::OpExport, fileId, 10 );
1094 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1095 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1096 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1097 createMenu( separator(), fileId, -1 );
1099 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1100 createMenu( GEOMOp::OpDelete, editId, -1 );
1102 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1104 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1105 createMenu( GEOMOp::OpPoint, basicId, -1 );
1106 createMenu( GEOMOp::OpLine, basicId, -1 );
1107 createMenu( GEOMOp::OpCircle, basicId, -1 );
1108 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1109 createMenu( GEOMOp::OpArc, basicId, -1 );
1110 createMenu( GEOMOp::OpCurve, basicId, -1 );
1111 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1112 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1113 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1114 createMenu( separator(), basicId, -1 );
1115 createMenu( GEOMOp::OpVector, basicId, -1 );
1116 createMenu( GEOMOp::OpPlane, basicId, -1 );
1117 createMenu( GEOMOp::OpLCS, basicId, -1 );
1118 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1120 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1121 createMenu( GEOMOp::OpBox, primId, -1 );
1122 createMenu( GEOMOp::OpCylinder, primId, -1 );
1123 createMenu( GEOMOp::OpSphere, primId, -1 );
1124 createMenu( GEOMOp::OpTorus, primId, -1 );
1125 createMenu( GEOMOp::OpCone, primId, -1 );
1126 createMenu( GEOMOp::OpRectangle, primId, -1 );
1127 createMenu( GEOMOp::OpDisk, primId, -1 );
1128 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1130 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1131 createMenu( GEOMOp::OpPrism, genId, -1 );
1132 createMenu( GEOMOp::OpRevolution, genId, -1 );
1133 createMenu( GEOMOp::OpFilling, genId, -1 );
1134 createMenu( GEOMOp::OpPipe, genId, -1 );
1135 #if OCC_VERSION_LARGE > 0x06050300
1136 createMenu( GEOMOp::OpPipePath, genId, -1 );
1139 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1140 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1141 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1143 createMenu( separator(), newEntId, -1 );
1145 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1146 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1147 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1148 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1149 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1150 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1152 createMenu( separator(), newEntId, -1 );
1154 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1155 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1156 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1158 createMenu( separator(), newEntId, -1 );
1160 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1161 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1162 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1163 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1164 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1166 createMenu( separator(), newEntId, -1 );
1168 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1170 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1171 createMenu( GEOMOp::OpEdge, buildId, -1 );
1172 createMenu( GEOMOp::OpWire, buildId, -1 );
1173 createMenu( GEOMOp::OpFace, buildId, -1 );
1174 createMenu( GEOMOp::OpShell, buildId, -1 );
1175 createMenu( GEOMOp::OpSolid, buildId, -1 );
1176 createMenu( GEOMOp::OpCompound, buildId, -1 );
1178 createMenu( separator(), newEntId, -1 );
1180 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1182 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1185 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1187 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1188 createMenu( GEOMOp::OpFuse, boolId, -1 );
1189 createMenu( GEOMOp::OpCommon, boolId, -1 );
1190 createMenu( GEOMOp::OpCut, boolId, -1 );
1191 createMenu( GEOMOp::OpSection, boolId, -1 );
1193 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1194 createMenu( GEOMOp::OpTranslate, transId, -1 );
1195 createMenu( GEOMOp::OpRotate, transId, -1 );
1196 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1197 createMenu( GEOMOp::OpMirror, transId, -1 );
1198 createMenu( GEOMOp::OpScale, transId, -1 );
1199 createMenu( GEOMOp::OpOffset, transId, -1 );
1200 createMenu( GEOMOp::OpProjection, transId, -1 );
1201 createMenu( separator(), transId, -1 );
1202 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1203 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1205 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1206 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1207 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1208 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1210 createMenu( separator(), operId, -1 );
1212 createMenu( GEOMOp::OpPartition, operId, -1 );
1213 createMenu( GEOMOp::OpArchimede, operId, -1 );
1214 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1215 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1217 createMenu( separator(), operId, -1 );
1219 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1220 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1221 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1222 createMenu( GEOMOp::OpChamfer, operId, -1 );
1223 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1224 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1225 #ifdef DEBUG_CURVE_CREATOR
1226 // for debug purposes, to be removed
1227 createMenu( separator(), operId, -1 );
1228 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1230 //createMenu( GEOMOp::OpClipping, operId, -1 );
1232 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1233 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1234 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1235 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1236 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1237 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1238 createMenu( GEOMOp::OpSewing, repairId, -1 );
1239 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1240 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1241 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1242 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1243 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1244 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1245 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1246 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1247 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1248 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1249 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1251 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1252 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1253 createMenu( GEOMOp::OpProperties, measurId, -1 );
1254 createMenu( separator(), measurId, -1 );
1255 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1256 createMenu( GEOMOp::OpInertia, measurId, -1 );
1257 createMenu( GEOMOp::OpNormale, measurId, -1 );
1258 createMenu( separator(), measurId, -1 );
1259 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1260 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1261 createMenu( separator(), measurId, -1 );
1263 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1264 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1265 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1266 createMenu( GEOMOp::OpAngle, dimId, -1 );
1268 createMenu( separator(), measurId, -1 );
1269 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1270 createMenu( separator(), measurId, -1 );
1271 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1272 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1273 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1274 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1275 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1277 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1278 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1279 createMenu( separator(), toolsId, -1 );
1280 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1283 createMenu( separator(), toolsId, -1 );
1284 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1285 createMenu( separator(), toolsId, -1 );
1287 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1288 createMenu( separator(), viewId, -1 );
1290 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1291 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1292 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1293 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1294 createMenu( separator(), dispmodeId, -1 );
1295 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1297 createMenu( separator(), viewId, -1 );
1298 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1299 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1300 createMenu( separator(), viewId, -1 );
1301 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1302 createMenu( separator(), viewId, -1 );
1306 because of these items are accessible through object browser and viewers
1307 we have removed they from main menu
1309 createMenu( GEOMOp::OpShow, viewId, -1 );
1310 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1311 createMenu( GEOMOp::OpHide, viewId, -1 );
1314 // ---- create toolbars --------------------------
1316 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1317 createTool( GEOMOp::OpPoint, basicTbId );
1318 createTool( GEOMOp::OpLine, basicTbId );
1319 createTool( GEOMOp::OpCircle, basicTbId );
1320 createTool( GEOMOp::OpEllipse, basicTbId );
1321 createTool( GEOMOp::OpArc, basicTbId );
1322 createTool( GEOMOp::OpCurve, basicTbId );
1323 createTool( GEOMOp::OpVector, basicTbId );
1324 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1325 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1326 createTool( GEOMOp::OpIsoline, basicTbId );
1327 createTool( GEOMOp::OpPlane, basicTbId );
1328 createTool( GEOMOp::OpLCS, basicTbId );
1329 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1331 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1332 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1333 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1335 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1336 createTool( GEOMOp::OpBox, primTbId );
1337 createTool( GEOMOp::OpCylinder, primTbId );
1338 createTool( GEOMOp::OpSphere, primTbId );
1339 createTool( GEOMOp::OpTorus, primTbId );
1340 createTool( GEOMOp::OpCone, primTbId );
1341 createTool( GEOMOp::OpRectangle, primTbId );
1342 createTool( GEOMOp::OpDisk, primTbId );
1343 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1345 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1346 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1347 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1349 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1350 createTool( GEOMOp::OpFuse, boolTbId );
1351 createTool( GEOMOp::OpCommon, boolTbId );
1352 createTool( GEOMOp::OpCut, boolTbId );
1353 createTool( GEOMOp::OpSection, boolTbId );
1355 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1356 createTool( GEOMOp::OpPrism, genTbId );
1357 createTool( GEOMOp::OpRevolution, genTbId );
1358 createTool( GEOMOp::OpFilling, genTbId );
1359 createTool( GEOMOp::OpPipe, genTbId );
1360 #if OCC_VERSION_LARGE > 0x06050300
1361 createTool( GEOMOp::OpPipePath, genTbId );
1364 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1365 createTool( GEOMOp::OpTranslate, transTbId );
1366 createTool( GEOMOp::OpRotate, transTbId );
1367 createTool( GEOMOp::OpChangeLoc, transTbId );
1368 createTool( GEOMOp::OpMirror, transTbId );
1369 createTool( GEOMOp::OpScale, transTbId );
1370 createTool( GEOMOp::OpOffset, transTbId );
1371 createTool( GEOMOp::OpProjection, transTbId );
1372 createTool( separator(), transTbId );
1373 createTool( GEOMOp::OpMultiTranslate, transTbId );
1374 createTool( GEOMOp::OpMultiRotate, transTbId );
1376 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1377 createTool( GEOMOp::OpExplode, operTbId );
1378 createTool( GEOMOp::OpPartition, operTbId );
1379 createTool( GEOMOp::OpArchimede, operTbId );
1380 createTool( GEOMOp::OpShapesOnShape, operTbId );
1381 createTool( GEOMOp::OpSharedShapes, operTbId );
1383 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1384 createTool( GEOMOp::OpFillet1d, featTbId );
1385 createTool( GEOMOp::OpFillet2d, featTbId );
1386 createTool( GEOMOp::OpFillet3d, featTbId );
1387 createTool( GEOMOp::OpChamfer, featTbId );
1388 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1389 createTool( GEOMOp::OpExtrudedCut, featTbId );
1390 #ifdef DEBUG_CURVE_CREATOR
1391 // for debug purposes, to be removed
1392 createTool( GEOMOp::OpCurveCreator, featTbId );
1395 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1396 createTool( GEOMOp::OpEdge, buildTbId );
1397 createTool( GEOMOp::OpWire, buildTbId );
1398 createTool( GEOMOp::OpFace, buildTbId );
1399 createTool( GEOMOp::OpShell, buildTbId );
1400 createTool( GEOMOp::OpSolid, buildTbId );
1401 createTool( GEOMOp::OpCompound, buildTbId );
1403 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1404 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1405 createTool( GEOMOp::OpProperties, measureTbId );
1406 createTool( GEOMOp::OpCenterMass, measureTbId );
1407 createTool( GEOMOp::OpInertia, measureTbId );
1408 createTool( GEOMOp::OpNormale, measureTbId );
1409 createTool( separator(), measureTbId );
1410 createTool( GEOMOp::OpBoundingBox, measureTbId );
1411 createTool( GEOMOp::OpMinDistance, measureTbId );
1412 createTool( GEOMOp::OpAngle, measureTbId );
1413 createTool( GEOMOp::OpTolerance , measureTbId );
1414 createTool( separator(), measureTbId );
1415 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1416 createTool( GEOMOp::OpFreeFaces, measureTbId );
1417 createTool( separator(), measureTbId );
1418 createTool( GEOMOp::OpWhatIs, measureTbId );
1419 createTool( GEOMOp::OpCheckShape, measureTbId );
1420 createTool( GEOMOp::OpCheckCompound, measureTbId );
1421 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1422 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1424 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1425 createTool( GEOMOp::OpPictureImport, picturesTbId );
1427 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1430 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1431 createTool( GEOMOp::OpExportXAO, impexpTbId );
1432 createTool( GEOMOp::OpImportXAO, impexpTbId );
1434 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1435 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1436 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1438 // ---- create popup menus --------------------------
1440 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1441 QString clientOCC = "(client='OCCViewer')";
1442 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1443 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1445 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1446 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1447 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1448 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1450 QString autoColorPrefix =
1451 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1453 QtxPopupMgr* mgr = popupMgr();
1455 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1456 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1457 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1458 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1459 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1460 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1461 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1462 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1464 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1465 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1466 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1467 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1468 mgr->insert( separator(), -1, -1 ); // -----------
1470 #if OCC_VERSION_LARGE > 0x06050200
1471 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1472 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1473 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1474 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1475 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1476 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1477 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1479 mgr->insert( separator(), -1, -1 ); // -----------
1480 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1481 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1482 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1484 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1485 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1487 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1488 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1489 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1490 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1491 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1492 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1493 mgr->insert( separator(), dispmodeId, -1 );
1494 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1495 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1496 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1497 mgr->insert( separator(), -1, -1 ); // -----------
1499 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1500 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1501 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1502 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1503 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1504 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1505 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1506 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1507 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1508 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1509 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1511 // material properties
1512 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1513 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1516 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1517 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1519 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1520 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1521 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1523 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1524 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1526 mgr->insert( separator(), -1, -1 ); // -----------
1527 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1528 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1529 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1530 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1531 mgr->insert( separator(), -1, -1 ); // -----------
1533 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1534 onlyComponent = "((type='Component') and selcount=1)",
1535 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1536 types = "'Shape' 'Group' 'FieldStep'";
1538 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1539 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1541 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1542 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1544 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1545 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1547 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1549 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1550 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1551 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1552 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1553 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1554 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1555 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1556 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1557 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1558 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1559 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1560 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1561 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1562 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1563 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1564 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1565 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1566 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1567 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1568 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1569 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1570 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1571 mgr->insert( separator(), selectonlyId, -1);
1572 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1573 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1574 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1575 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1576 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1577 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1578 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1580 mgr->insert( separator(), -1, -1 ); // -----------
1581 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1582 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1584 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1585 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1587 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1588 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1590 mgr->insert( separator(), -1, -1 ); // -----------
1591 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1592 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1594 mgr->insert( separator(), -1, -1 ); // -----------
1595 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1596 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1598 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1600 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1602 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1603 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1604 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1607 // create plugin actions and menus
1611 //=======================================================================
1612 // function : GeometryGUI::addPluginActions()
1614 //=======================================================================
1615 void GeometryGUI::addPluginActions()
1618 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1619 if (!resMgr) return;
1621 // Find names of a resource XML files ("GEOMActions.xml" and others);
1623 char* cenv = getenv("GEOM_PluginsList");
1625 PluginsXml.sprintf("%s", cenv);
1627 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1628 if (PluginsXmlList.count() == 0) return;
1630 // get full names of xml files from PluginsXmlList
1631 QStringList xmlFiles;
1632 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1633 for (int i = 0; i < PluginsXmlList.count(); i++) {
1634 PluginsXml = PluginsXmlList[ i ];
1636 // Find full path to the resource XML file
1637 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1638 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1639 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1640 if ( !xmlFile.isEmpty() )
1641 xmlFiles.append( xmlFile );
1644 // create "Advanced Operations" menu and corresponding toolbar
1645 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1646 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1647 int id = GEOMOp::OpLastOperationID; // TODO?
1650 QString aNoAccessFiles;
1651 for (int i = 0; i < xmlFiles.count(); i++) {
1652 QString xmlFile = xmlFiles[ i ];
1654 QFile file (xmlFile);
1655 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1658 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1659 ASSERT(aXmlHandler);
1661 QXmlInputSource source (&file);
1662 QXmlSimpleReader reader;
1663 reader.setContentHandler(aXmlHandler);
1664 reader.setErrorHandler(aXmlHandler);
1665 bool ok = reader.parse(source);
1669 // bind action lib and label to its ID for activateOperation() method proper work
1670 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1672 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1673 while (anActionsIter.hasNext()) {
1674 GEOMGUI_ActionData anActionData = anActionsIter.next();
1676 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1677 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1678 anActionData.myIcon.toLatin1().constData());
1680 // path to action in menu
1681 QStringList smenus = anActionData.myMenu.split( "/" );
1682 QString actionName = smenus.last();
1683 actionName = actionName.toUpper().prepend("MEN_");
1684 smenus.removeLast();
1686 // path to action in toolbar
1687 QStringList stools = anActionData.myTooltip.split( "/" );
1688 QString actionTool = stools.last();
1689 actionTool = actionTool.toUpper().prepend("TOP_");
1690 stools.removeLast();
1692 QString actionStat = anActionData.myStatusBar;
1693 actionStat = actionStat.toUpper().prepend("STB_");
1695 createAction(id, // ~ anActionData.myLabel
1696 tr(actionTool.toLatin1().constData()),
1698 tr(actionName.toLatin1().constData()),
1699 tr(actionStat.toLatin1().constData()),
1701 application()->desktop(),
1703 this, SLOT(OnGUIEvent()),
1704 QString() /*shortcutAction*/);
1707 foreach (QString subMenu, smenus) {
1708 subMenu = subMenu.toUpper().prepend("MEN_");
1709 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1711 //createMenu(id, pluginMenuId, -1);
1712 createMenu(id, menuId, -1);
1714 QString subTool = stools[0];
1715 subTool = subTool.toUpper().prepend("TOOL_");
1716 int toolId = createTool(tr(subTool.toLatin1().constData()));
1717 //createTool(id, advancedTbarId);
1718 createTool(id, toolId);
1720 // add action id to map
1721 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1722 myPluginActions[id] = anAction;
1728 SUIT_MessageBox::critical(application()->desktop(),
1729 tr("INF_PARSE_ERROR"),
1730 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1734 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1735 if (aNoAccessFiles.isEmpty())
1736 aNoAccessFiles = xmlFile;
1738 aNoAccessFiles += ", " + xmlFile;
1740 } // end loop on xmlFiles
1742 if (!aNoAccessFiles.isEmpty()) {
1743 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1744 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1745 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1749 //=======================================================================
1750 // function : GeometryGUI::activateModule()
1751 // purpose : Called when GEOM module is activated
1752 //=======================================================================
1753 bool GeometryGUI::activateModule( SUIT_Study* study )
1755 if ( CORBA::is_nil( myComponentGeom ) )
1758 bool res = SalomeApp_Module::activateModule( study );
1762 setMenuShown( true );
1763 setToolShown( true );
1765 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1766 PyGILState_STATE gstate = PyGILState_Ensure();
1767 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1768 if ( !pluginsmanager ) {
1772 PyObjWrapper result =
1773 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1774 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1775 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1779 PyGILState_Release(gstate);
1780 // end of GEOM plugins loading
1782 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1783 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1785 // Reset actions accelerator keys
1786 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1787 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1788 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1790 GUIMap::Iterator it;
1791 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1792 it.value()->activate( application()->desktop() );
1794 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1796 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1797 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1798 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1800 if ( !myCreationInfoWdg )
1801 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1802 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1803 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1805 SUIT_ViewManager* vm;
1806 ViewManagerList OCCViewManagers, VTKViewManagers;
1808 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1809 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1810 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1811 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1813 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1814 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1815 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1816 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1819 SALOME_ListIO selected;
1820 sm->selectedObjects( selected );
1821 sm->clearSelected();
1823 // disable OCC selectors
1824 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1825 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1826 while ( itOCCSel.hasNext() )
1827 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1828 sr->setEnabled(true);
1830 // disable VTK selectors
1831 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1832 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1833 while ( itVTKSel.hasNext() )
1834 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1835 sr->setEnabled(true);
1837 sm->setSelectedObjects( selected, true ); //NPAL 19674
1839 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1841 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1843 // 0020836 (Basic vectors and origin)
1844 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1845 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1846 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1848 _PTR(Study) studyDS = appStudy->studyDS();
1850 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1851 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1852 createOriginAndBaseVectors();
1860 //=======================================================================
1861 // function : GeometryGUI::deactivateModule()
1862 // purpose : Called when GEOM module is deactivated
1863 //=======================================================================
1864 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1866 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1868 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1870 setMenuShown( false );
1871 setToolShown( false );
1873 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1874 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1876 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1878 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1879 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1880 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1881 myCreationInfoWdg = 0;
1883 EmitSignalCloseAllDialogs();
1885 GUIMap::Iterator it;
1886 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1887 it.value()->deactivate();
1889 // Unset actions accelerator keys
1890 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1891 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1892 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1894 qDeleteAll(myOCCSelectors);
1895 myOCCSelectors.clear();
1896 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1898 qDeleteAll(myVTKSelectors);
1899 myVTKSelectors.clear();
1900 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1902 return SalomeApp_Module::deactivateModule( study );
1905 //=======================================================================
1906 // function : onWindowActivated()
1907 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1908 //=======================================================================
1909 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1914 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1915 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1917 // disable non-OCC viewframe menu commands
1918 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1919 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1920 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1921 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1922 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1923 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1924 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1926 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1927 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1928 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1929 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1931 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1934 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1936 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1937 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1938 if ( myCreationInfoWdg )
1939 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1942 void GeometryGUI::viewManagers( QStringList& lst ) const
1944 lst.append( OCCViewer_Viewer::Type() );
1947 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1949 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1951 qDebug( "connect" );
1952 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1953 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1954 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1955 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1956 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1957 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1958 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1959 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1961 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1962 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1964 // disable OCC selectors
1965 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1966 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1967 while ( itOCCSel.hasNext() )
1968 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1969 sr->setEnabled(true);
1971 else if ( vm->getType() == SVTK_Viewer::Type() )
1973 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1974 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1976 // disable VTK selectors
1977 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1978 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1979 while ( itVTKSel.hasNext() )
1980 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1981 sr->setEnabled(true);
1985 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1987 SUIT_ViewModel* viewer = vm->getViewModel();
1988 if ( vm->getType() == OCCViewer_Viewer::Type() )
1990 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1991 while ( itOCCSel.hasNext() )
1992 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1993 if ( sr->viewer() == viewer )
1995 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1999 if ( vm->getType() == SVTK_Viewer::Type() )
2001 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2002 while ( itVTKSel.hasNext() )
2003 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2004 if ( sr->viewer() == viewer )
2006 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2012 //================================================================================
2014 * \brief Slot called when selection changed. Shows creation info of a selected object
2016 //================================================================================
2018 void GeometryGUI::updateCreationInfo()
2020 if ( myCreationInfoWdg )
2021 myCreationInfoWdg->clear();
2023 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2024 // if ( !myCreationInfoWdg->isVisible() )
2027 // look for a sole selected GEOM_Object
2028 GEOM::GEOM_BaseObject_var geomObj;
2030 SALOME_ListIO selected;
2031 getApp()->selectionMgr()->selectedObjects( selected );
2033 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2034 SALOME_ListIteratorOfListIO selIt( selected );
2035 for ( ; selIt.More(); selIt.Next() )
2037 Handle(SALOME_InteractiveObject) io = selIt.Value();
2038 if ( !io->hasEntry() ) continue;
2039 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2040 if ( !sobj ) continue;
2041 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2042 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2043 if ( !gobj->_is_nil() )
2045 if ( !geomObj->_is_nil() )
2046 return; // several GEOM objects selected
2050 if ( geomObj->_is_nil() ) return;
2052 // pass creation info of geomObj to myCreationInfoWdg
2054 if ( myCreationInfoWdg ) {
2056 QString operationName;
2057 myCreationInfoWdg->setOperation( icon, operationName );
2061 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2063 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2064 QString name = info->operationName.in();
2065 if ( !name.isEmpty() ) {
2066 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2067 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2068 if ( operationName.startsWith( "MEN_" ))
2069 operationName = name; // no translation
2070 myCreationInfoWdg->setOperation( icon, operationName );
2072 for ( size_t i = 0; i < info->params.length(); ++i )
2073 myCreationInfoWdg->addParam( info->params[i].name.in(),
2074 info->params[i].value.in() );
2083 void GeometryGUI::onAutoBringToFront()
2085 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2086 if( !isAutoBringToFront )
2089 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2090 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2093 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2094 if (!appStudy) return;
2096 GEOM_Displayer displayer( appStudy );
2098 SALOME_View* window = displayer.GetActiveView();
2099 if ( !window ) return;
2101 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2103 SALOME_ListIO selected;
2104 getApp()->selectionMgr()->selectedObjects( selected );
2105 if (!myTopLevelIOList.IsEmpty())
2107 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2109 Handle( SALOME_InteractiveObject ) io = It.Value();
2110 bool isSelected = false;
2111 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2113 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2114 if( io->isSame( sel_io ) )
2117 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2119 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2120 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2125 myTopLevelIOList.Assign(selected);
2126 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2128 Handle( SALOME_InteractiveObject ) io = It.Value();
2129 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2130 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2133 displayer.UpdateViewer();
2134 GeometryGUI::Modified();
2137 void GeometryGUI::updateFieldColorScale()
2139 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2141 GEOM_Displayer aDisplayer( aStudy );
2142 aDisplayer.UpdateColorScale();
2146 QString GeometryGUI::engineIOR() const
2148 if ( !CORBA::is_nil( GetGeomGen() ) )
2149 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2153 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2154 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2156 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2158 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2160 theWidth = theHeight = 0;
2162 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2163 Handle(TColStd_HArray1OfByte) aTexture;
2165 Handle(Graphic3d_HArray1OfBytes) aTexture;
2169 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2170 aTexture = aTextureMap[ theId ];
2171 if ( aTexture.IsNull() ) {
2172 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2173 if ( !aInsOp->_is_nil() ) {
2174 CORBA::Long aWidth, aHeight;
2175 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2176 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2178 theHeight = aHeight;
2180 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2181 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2183 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2186 for (int i = 0; i < aStream->length(); i++)
2187 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2188 aTextureMap[ theId ] = aTexture;
2196 LightApp_Selection* GeometryGUI::createSelection() const
2198 return new GEOMGUI_Selection();
2201 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2203 SalomeApp_Module::contextMenuPopup( client, menu, title );
2205 getApp()->selectionMgr()->selectedObjects( lst );
2207 //Add submenu for predefined materials
2208 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2209 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2210 QtxPopupMgr* mgr = popupMgr();
2211 //get parrent for submenu
2212 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2214 QMenu* oldMenu = act->menu() ;
2219 QMenu* matMenu = new QMenu();
2220 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2222 //Get current material model for the object
2224 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2225 if ( anApp && anApp->activeViewManager() ) {
2226 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2228 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2231 QString curModel = "";
2232 if ( v.canConvert<QString>() ) curModel = v.toString();
2233 // get list of all predefined materials
2234 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2236 foreach ( QString material, materials )
2238 QAction* menAct = matMenu->addAction( material );
2239 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2240 signalMapper->setMapping( menAct, material );
2241 menAct->setCheckable( true );
2242 // Set checked if this material is current
2243 Material_Model aModel;
2244 aModel.fromResources( material );
2245 if ( !found && aModel.toProperties() == curModel ) {
2246 menAct->setChecked( true );
2250 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2251 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2252 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2253 this, SLOT( OnSetMaterial( const QString & ) ) );
2254 act->setMenu( matMenu );
2258 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2259 Handle(SALOME_InteractiveObject) io = lst.First();
2260 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2261 _PTR(Study) study = appStudy->studyDS();
2262 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2264 QString aName = QString( obj->GetName().c_str() );
2265 aName.remove( QRegExp("\\s+$") );
2271 void GeometryGUI::OnSetMaterial(const QString& theName)
2273 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2277 void GeometryGUI::createPreferences()
2279 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2281 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2282 setPreferenceProperty( genGroup, "columns", 2 );
2284 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2285 LightApp_Preferences::Selector,
2286 "Geometry", "display_mode" );
2288 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2289 LightApp_Preferences::Color, "Geometry", "shading_color" );
2291 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2292 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2294 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2295 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2297 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2298 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2300 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2301 LightApp_Preferences::Color, "Geometry", "line_color" );
2303 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2304 LightApp_Preferences::Color, "Geometry", "point_color" );
2306 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2307 LightApp_Preferences::Color, "Geometry", "isos_color" );
2309 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2310 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2312 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2313 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2315 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2316 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2318 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2319 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2321 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2322 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2324 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2325 LightApp_Preferences::Selector,
2326 "Geometry", "material" );
2328 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2329 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2335 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2336 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2338 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2339 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2341 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2342 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2344 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2345 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2347 for (int i = 0; i < nb; i++) {
2348 setPreferenceProperty( wd[i], "min", 1 );
2349 setPreferenceProperty( wd[i], "max", 5 );
2352 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2353 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2355 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2356 setPreferenceProperty( isoGroup, "columns", 2 );
2357 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2358 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2359 setPreferenceProperty( isoU, "min", 0 );
2360 setPreferenceProperty( isoU, "max", 100000 );
2361 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2362 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2363 setPreferenceProperty( isoV, "min", 0 );
2364 setPreferenceProperty( isoV, "max", 100000 );
2366 // Quantities with individual precision settings
2367 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2368 setPreferenceProperty( precGroup, "columns", 2 );
2370 const int nbQuantities = 8;
2371 int prec[nbQuantities], ii = 0;
2372 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2373 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2374 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2375 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2376 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2377 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2378 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2379 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2380 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2381 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2382 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2383 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2384 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2385 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2386 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2387 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2389 // Set property for precision value for spinboxes
2390 for ( ii = 0; ii < nbQuantities; ii++ ){
2391 setPreferenceProperty( prec[ii], "min", -14 );
2392 setPreferenceProperty( prec[ii], "max", 14 );
2393 setPreferenceProperty( prec[ii], "precision", 2 );
2396 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2397 setPreferenceProperty( VertexGroup, "columns", 2 );
2399 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2400 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2402 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2403 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2405 // Set property for default display mode
2406 QStringList aModesList;
2407 aModesList.append( tr("MEN_WIREFRAME") );
2408 aModesList.append( tr("MEN_SHADING") );
2409 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2411 QList<QVariant> anIndexesList;
2412 anIndexesList.append(0);
2413 anIndexesList.append(1);
2414 anIndexesList.append(2);
2416 setPreferenceProperty( dispmode, "strings", aModesList );
2417 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2419 // Set property for top level display mode
2420 QStringList aTopModesList;
2421 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2422 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2423 aTopModesList.append( tr("MEN_WIREFRAME") );
2424 aTopModesList.append( tr("MEN_SHADING") );
2425 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2427 QList<QVariant> aTopIndexesList;
2428 aTopIndexesList.append(0);
2429 aTopIndexesList.append(1);
2430 aTopIndexesList.append(2);
2431 aTopIndexesList.append(3);
2432 aTopIndexesList.append(4);
2434 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2435 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2437 // Set property for step value for spinboxes
2438 setPreferenceProperty( step, "min", 1 );
2439 setPreferenceProperty( step, "max", 10000 );
2440 setPreferenceProperty( step, "precision", 3 );
2442 // Set property for deflection value for spinboxes
2443 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2444 setPreferenceProperty( defl, "max", 1.0 );
2445 setPreferenceProperty( defl, "step", 1.0e-04 );
2446 setPreferenceProperty( defl, "precision", 6 );
2448 // Set property for default material
2449 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2451 // Set property vertex marker type
2452 QList<QVariant> aMarkerTypeIndicesList;
2453 QList<QVariant> aMarkerTypeIconsList;
2455 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2456 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2457 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2458 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2459 aMarkerTypeIndicesList << (i-1);
2460 aMarkerTypeIconsList << pixmap;
2463 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2464 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2466 // Set property for vertex marker scale
2467 QList<QVariant> aMarkerScaleIndicesList;
2468 QStringList aMarkerScaleValuesList;
2470 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2471 aMarkerScaleIndicesList << iii;
2472 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2475 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2476 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2478 // Scalar bar for field step presentation
2479 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2480 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2482 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2483 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2484 setPreferenceProperty( sbXPosition, "min", 0 );
2485 setPreferenceProperty( sbXPosition, "max", 1 );
2486 setPreferenceProperty( sbXPosition, "step", 0.05 );
2488 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2489 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2490 setPreferenceProperty( sbYPosition, "min", 0 );
2491 setPreferenceProperty( sbYPosition, "max", 1 );
2492 setPreferenceProperty( sbYPosition, "step", 0.05 );
2494 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2495 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2496 setPreferenceProperty( sbWidth, "min", 0 );
2497 setPreferenceProperty( sbWidth, "max", 1 );
2498 setPreferenceProperty( sbWidth, "step", 0.05 );
2500 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2501 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2502 setPreferenceProperty( sbHeight, "min", 0 );
2503 setPreferenceProperty( sbHeight, "max", 1 );
2504 setPreferenceProperty( sbHeight, "step", 0.05 );
2506 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2507 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2508 setPreferenceProperty( sbTextHeight, "min", 6 );
2509 setPreferenceProperty( sbTextHeight, "max", 24 );
2510 setPreferenceProperty( sbTextHeight, "step", 1 );
2512 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2513 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2514 setPreferenceProperty( sbNbIntervals, "min", 2 );
2515 setPreferenceProperty( sbNbIntervals, "max", 64 );
2516 setPreferenceProperty( sbNbIntervals, "step", 1 );
2518 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2519 setPreferenceProperty( originGroup, "columns", 2 );
2521 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2522 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2523 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2524 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2526 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2527 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2529 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2530 setPreferenceProperty( operationsGroup, "columns", 2 );
2532 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2533 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2536 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2538 if (section == "Geometry") {
2539 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2540 if (param == QString("SettingsGeomStep")) {
2541 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2542 EmitSignalDefaultStepValueChanged(spin_step);
2544 else if (param == QString("toplevel_color")) {
2545 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2546 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2548 else if (param == QString("toplevel_dm")) {
2549 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2551 else if (param == QString("scalar_bar_x_position") ||
2552 param == QString("scalar_bar_y_position") ||
2553 param == QString("scalar_bar_width") ||
2554 param == QString("scalar_bar_height") ||
2555 param == QString("scalar_bar_text_height") ||
2556 param == QString("scalar_bar_nb_intervals")) {
2557 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2559 GEOM_Displayer aDisplayer( aStudy );
2560 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2561 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2567 LightApp_Displayer* GeometryGUI::displayer()
2570 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2574 void GeometryGUI::setLocalSelectionMode(const int mode)
2576 myLocalSelectionMode = mode;
2579 int GeometryGUI::getLocalSelectionMode() const
2581 return myLocalSelectionMode;
2584 const char gSeparator = '_'; // character used to separate parameter names
2585 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2588 * \brief Store visual parameters
2590 * This method is called just before the study document is saved.
2591 * Store visual parameters in AttributeParameter attribute(s)
2593 void GeometryGUI::storeVisualParameters (int savePoint)
2595 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2596 if ( !appStudy || !appStudy->studyDS() )
2598 _PTR(Study) studyDS = appStudy->studyDS();
2600 // componentName is used for encoding of entries when storing them in IParameters
2601 std::string componentName = myComponentGeom->ComponentDataType();
2602 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2603 //if (!aSComponent) return;
2606 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2607 componentName.c_str(),
2609 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2611 QList<SUIT_ViewManager*> lst;
2612 QList<SUIT_ViewManager*>::Iterator it;
2614 // main cycle to store parameters of displayed objects
2616 getApp()->viewManagers(lst);
2617 for (it = lst.begin(); it != lst.end(); it++) {
2618 SUIT_ViewManager* vman = *it;
2619 QString vType = vman->getType();
2620 int aMgrId = vman->getGlobalId();
2621 // saving VTK actors properties
2622 QVector<SUIT_ViewWindow*> views = vman->getViews();
2623 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2624 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2625 ObjMap::ConstIterator o_it = anObjects.begin();
2626 for (; o_it != anObjects.end(); o_it++) {
2627 const PropMap aProps = o_it.value();
2629 //Check that object exists in the study
2630 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2631 if ( !obj || !(aProps.count() > 0))
2633 // entry is "encoded" = it does NOT contain component adress, since it is a
2634 // subject to change on next component loading
2636 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2638 _PTR(GenericAttribute) anAttr;
2639 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2642 QString param, occParam = vType;
2643 occParam += GEOM::sectionSeparator();
2644 occParam += QString::number(aMgrId);
2645 occParam += GEOM::sectionSeparator();
2647 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2648 param = occParam + GEOM::propertyName( GEOM::Visibility );
2649 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2652 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2653 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2654 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2657 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2658 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2660 val << QString::number(c.redF());
2661 val << QString::number(c.greenF());
2662 val << QString::number(c.blueF());
2663 param = occParam + GEOM::propertyName( GEOM::Color );
2664 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2667 if (vType == SVTK_Viewer::Type()) {
2668 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2669 param = occParam + GEOM::propertyName( GEOM::Opacity );
2670 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2672 } else if (vType == SOCC_Viewer::Type()) {
2673 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2674 param = occParam + GEOM::propertyName( GEOM::Transparency );
2675 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2678 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2679 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2680 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2684 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2685 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2686 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2689 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2690 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2691 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2694 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2695 param = occParam + GEOM::propertyName( GEOM::Deflection );
2696 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2699 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2700 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2701 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2702 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2705 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2706 param = occParam + GEOM::propertyName( GEOM::Material );
2707 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2710 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2711 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2712 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2715 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2716 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2717 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2719 } // object iterator
2721 } // for (viewManagers)
2725 * \brief Restore visual parameters
2727 * This method is called after the study document is opened.
2728 * Restore visual parameters from AttributeParameter attribute(s)
2730 void GeometryGUI::restoreVisualParameters (int savePoint)
2732 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2733 if (!appStudy || !appStudy->studyDS())
2735 _PTR(Study) studyDS = appStudy->studyDS();
2737 // componentName is used for encoding of entries when storing them in IParameters
2738 std::string componentName = myComponentGeom->ComponentDataType();
2739 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2740 //if (!aSComponent) return;
2743 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2744 componentName.c_str(),
2746 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2748 std::vector<std::string> entries = ip->getEntries();
2750 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2752 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2753 QString entry (ip->decodeEntry(*entIt).c_str());
2755 // Check that the entry corresponds to a real object in the Study
2756 // as the object may be deleted or modified after the visual state is saved.
2757 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2758 if (!so) continue; //Skip the not existent entry
2760 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2761 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2763 std::vector<std::string>::iterator namesIt = paramNames.begin();
2764 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2766 // actors are stored in a map after displaying of them for
2767 // quicker access in the future: map < viewID to actor >
2768 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2769 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2771 QString viewerTypStr;
2772 QString viewIndexStr;
2774 QVector<PropMap> aListOfMap;
2776 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2778 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2779 // '_' is used as separator and should not be used in viewer type or parameter names.
2780 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2781 if (lst.size() != 3)
2784 viewerTypStr = lst[0];
2785 viewIndexStr = lst[1];
2786 QString paramNameStr = lst[2];
2789 viewIndex = viewIndexStr.toUInt(&ok);
2790 if (!ok) // bad conversion of view index to integer
2793 if ((viewIndex + 1) > aListOfMap.count()) {
2794 aListOfMap.resize(viewIndex + 1);
2797 QString val((*valuesIt).c_str());
2798 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2799 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2800 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2801 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2802 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2803 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2804 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2805 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2806 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2807 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2808 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2809 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2810 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2811 QStringList rgb = val.split(GEOM::subSectionSeparator());
2812 if (rgb.count() == 3) {
2813 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2814 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2816 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2817 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2818 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2819 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2820 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2821 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2822 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2823 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2824 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2825 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2826 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2827 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2829 } // for names/parameters iterator
2831 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2833 for (int index = 0; index < aListOfMap.count(); index++) {
2835 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2837 //Get Visibility property of the current PropMap
2838 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2839 SUIT_ViewManager* vman = lst.at(index);
2840 SUIT_ViewModel* vmodel = vman->getViewModel();
2841 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2844 } // for entries iterator
2846 // update all VTK and OCC views
2847 QList<SUIT_ViewManager*> lst;
2848 getApp()->viewManagers(lst);
2849 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2850 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2853 if (vmodel->getType() == SVTK_Viewer::Type()) {
2854 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2855 vtkView->getRenderer()->ResetCameraClippingRange();
2858 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2859 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2860 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2867 void GeometryGUI::onViewAboutToShow()
2869 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2870 QAction* a = action( GEOMOp::OpSwitchVectors );
2872 a->setEnabled(true);
2873 bool vmode = window->property("VectorsMode").toBool();
2874 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2876 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2877 a->setEnabled(false);
2882 \brief Return action by id
2883 \param id identifier of the action
2886 QAction* GeometryGUI::getAction(const int id) {
2891 \brief GEOM module message handler
2893 This method can be re-implemented in the subclasses.
2894 This is a GEOM module message handler.
2896 \param msg the message received.
2898 void GeometryGUI::message(const QString& msg)
2901 QStringList data = msg.split("/");
2902 const int nbStrings = data.count();
2904 if (nbStrings > 0) {
2905 if (data[0] == "modified") {
2907 QString anIOR = nbStrings > 1 ? data[1] : QString();
2909 if ( anIOR.isEmpty() ) {
2913 // Get the geom object.
2914 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2916 // Clear the shape buffer
2917 GeometryGUI::ClearShapeBuffer (anObj);
2923 \brief Clears the shape buffer.
2925 This is a static method. It clears the shape buffer.
2927 \param theObj the object
2929 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2931 if ( CORBA::is_nil( theObj ) )
2934 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2935 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2936 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2938 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2943 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2948 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2952 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2953 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2954 _PTR(GenericAttribute) anAttr;
2955 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2956 _PTR(AttributeIOR) anIOR ( anAttr );
2957 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2958 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2964 \brief Returns the object from IOR.
2966 This is a static method. It returns the object from its IOR.
2968 \param IOR object IOR
2969 \return GEOM object.
2971 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2973 GEOM::GEOM_Object_var geomObj;
2974 if ( !IOR.isEmpty() ) {
2975 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2976 ( IOR.toLatin1().constData() );
2977 if ( !CORBA::is_nil( corbaObj ) )
2978 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2980 return geomObj._retn();
2984 \brief Returns IOR of the object.
2986 This is a static method. It returns the object's IOR.
2988 \param object the GEOM object.
2989 \return object's IOR.
2991 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2994 if ( !CORBA::is_nil( object ) ) {
2995 CORBA::String_var anIOR =
2996 SalomeApp_Application::orb()->object_to_string( object );
3003 \brief Check if this object is can't be renamed in place
3005 This method can be re-implemented in the subclasses.
3006 Return true in case if object isn't reference or component (module root).
3008 \param entry column id
3009 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3011 bool GeometryGUI::renameAllowed( const QString& entry) const {
3013 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3014 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3015 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3017 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3021 Rename object by entry.
3022 \param entry entry of the object
3023 \param name new name of the object
3024 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3026 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3028 bool result = false;
3030 SalomeApp_Application* app =
3031 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3032 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3037 _PTR(Study) aStudy = appStudy->studyDS();
3042 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3044 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3048 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3049 _PTR(GenericAttribute) anAttr;
3051 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3052 _PTR(AttributeName) aName (anAttr);
3054 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3055 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3056 if (!CORBA::is_nil(anObj)) {
3057 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3065 void GeometryGUI::updateMaterials()
3067 LightApp_Preferences* pref = preferences();
3069 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3070 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3071 if ( !materials.contains( currentMaterial ) )
3072 // user material set as default in the preferences, might be removed
3073 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3075 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3077 setPreferenceProperty( prefItem->id(),
3078 "strings", materials );
3079 prefItem->retrieve();
3085 \brief Check if the module allows "drag" operation of its objects.
3087 Overloaded from LightApp_Module class.
3089 This function is a part of the general drag-n-drop mechanism.
3090 The goal of this function is to check data object passed as a parameter
3091 and decide if it can be dragged or no.
3093 \param what data object being tested for drag operation
3094 \return \c true if module allows dragging of the specified object
3095 \sa isDropAccepted(), dropObjects()
3097 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3099 // we allow dragging object under root and object from folder
3100 int aLevel = what->level();
3101 bool anObjectInFolder = false;
3103 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3105 _PTR(SObject) aSO = dataObj->object();
3107 _PTR(GenericAttribute) anAttr;
3108 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3109 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3110 _PTR(AttributeLocalID) aLocalID( anAttr );
3111 anObjectInFolder = aLocalID->Value() == 999;
3116 return aLevel == 2 || anObjectInFolder;
3120 \brief Check if the module allows "drop" operation on the given object.
3122 Overloaded from LightApp_Module class.
3124 This function is a part of the general drag-n-drop mechanism.
3125 The goal of this function is to check data object passed as a parameter
3126 and decide if it can be used as a target for the "drop" operation.
3127 The processing of the drop operation itself is done in the dropObjects() function.
3129 \param where target data object
3130 \return \c true if module supports dropping on the \a where data object
3131 \sa isDraggable(), dropObjects()
3133 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3135 // we allow dropping into folder and top-level GEOM object
3136 int aLevel = where->level();
3137 bool isFolder = false;
3139 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3141 _PTR(SObject) aSO = dataObj->object();
3143 _PTR(GenericAttribute) anAttr;
3144 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3145 _PTR(AttributeLocalID) aLocalID( anAttr );
3146 isFolder = aLocalID->Value() == 999;
3151 return aLevel == 1 || isFolder;
3155 \brief Complete drag-n-drop operation.
3157 Overloaded from LightApp_Module class.
3159 This function is a part of the general drag-n-drop mechanism.
3160 Its goal is to handle dropping of the objects being dragged according
3161 to the chosen operation (move). The dropping is performed in the
3162 context of the parent data object \a where and the \a row (position in the
3163 children index) at which the data should be dropped. If \a row is equal to -1,
3164 this means that objects are added to the end of the children list.
3166 \param what objects being dropped
3167 \param where target data object
3168 \param row child index at which the drop operation is performed
3169 \param action drag-n-drop operation (Qt::DropAction) - move
3171 \sa isDraggable(), isDropAccepted()
3173 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3174 const int row, Qt::DropAction action )
3176 if (action != Qt::CopyAction && action != Qt::MoveAction)
3177 return; // unsupported action
3179 // get parent object
3180 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3181 if ( !dataObj ) return; // wrong parent
3182 _PTR(SObject) parentObj = dataObj->object();
3184 // Find the current Study and StudyBuilder
3185 _PTR(Study) aStudy = parentObj->GetStudy();
3186 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3187 // collect all parents of the target node
3188 QStringList parentIDs;
3189 _PTR(SObject) parent = parentObj;
3190 while( !parent->IsNull() ) {
3191 parentIDs << parent->GetID().c_str();
3192 parent = aUseCaseBuilder->GetFather(parent);
3195 // collect objects being dropped
3196 GEOM::object_list_var objects = new GEOM::object_list();
3197 objects->length( what.count() );
3199 for ( int i = 0; i < what.count(); i++ ) {
3200 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3201 if ( !dataObj ) continue; // skip wrong objects
3202 _PTR(SObject) sobj = dataObj->object();
3203 // check that dropped object is not a parent of target object
3204 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3205 return; // it's not allowed to move node into it's child
3207 objects[i] = _CAST(SObject, sobj)->GetSObject();
3210 objects->length( count );
3212 // call engine function
3213 GetGeomGen()->Move( objects.in(), // what
3214 _CAST(SObject, parentObj)->GetSObject(), // where
3217 // update Object browser
3218 getApp()->updateObjectBrowser( false );