1 // Copyright (C) 2007-2016 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, or (at your option) any later version.
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_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <SUIT_Desktop.h>
51 #include <SUIT_MessageBox.h>
52 #include <SUIT_ResourceMgr.h>
53 #include <SUIT_Session.h>
54 #include <SUIT_ViewManager.h>
56 #include <OCCViewer_ViewWindow.h>
57 #include <OCCViewer_ViewPort3d.h>
58 #include <OCCViewer_ViewModel.h>
59 #include <OCCViewer_ViewManager.h>
61 #include <SOCC_ViewModel.h>
62 #include <SOCC_ViewWindow.h>
64 #include <SVTK_ViewWindow.h>
65 #include <SVTK_RenderWindowInteractor.h>
66 #include <SVTK_InteractorStyle.h>
67 #include <SVTK_ViewModel.h>
69 #ifndef DISABLE_GRAPHICSVIEW
70 #include <GraphicsView_Viewer.h>
73 #include <SalomeApp_Application.h>
74 #include <SalomeApp_DataObject.h>
75 #include <SalomeApp_Study.h>
76 #include <SalomeApp_Tools.h>
78 #include <LightApp_SelectionMgr.h>
79 #include <LightApp_VTKSelector.h>
80 #include <LightApp_DataObject.h>
81 #include <LightApp_Preferences.h>
83 #include <SALOME_LifeCycleCORBA.hxx>
84 #include <SALOME_ListIO.hxx>
86 #include <SALOMEDSClient_ClientFactory.hxx>
87 #include <SALOMEDSClient_IParameters.hxx>
89 #include <SALOMEDS_SObject.hxx>
91 #include <Basics_OCCTVersion.hxx>
92 #include <QtxFontEdit.h>
103 #include <QSignalMapper>
104 #include <QFontDatabase>
106 #include <AIS_ListOfInteractive.hxx>
107 #include <AIS_ListIteratorOfListOfInteractive.hxx>
108 #include <Prs3d_Drawer.hxx>
109 #include <Prs3d_IsoAspect.hxx>
110 #include <Aspect_TypeOfMarker.hxx>
111 #include <OSD_SharedLibrary.hxx>
112 #include <NCollection_DataMap.hxx>
114 #include <TColStd_HArray1OfByte.hxx>
115 #include <TColStd_SequenceOfHAsciiString.hxx>
117 #include <utilities.h>
119 #include <vtkCamera.h>
120 #include <vtkRenderer.h>
122 #include <Standard_Failure.hxx>
123 #include <Standard_ErrorHandler.hxx>
125 #include <Font_SystemFont.hxx>
126 #include <Font_FontMgr.hxx>
127 #include <TCollection_HAsciiString.hxx>
129 #include "GEOM_version.h"
130 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
133 Standard_EXPORT CAM_Module* createModule() {
134 return new GeometryGUI();
137 Standard_EXPORT char* getModuleVersion() {
138 return (char*)GEOM_VERSION_STR;
142 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
144 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
146 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
148 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
149 if (CORBA::is_nil(myComponentGeom))
151 return GeometryGUI::myComponentGeom;
154 bool GeometryGUI::InitGeomGen()
157 if ( CORBA::is_nil( myComponentGeom ) ) return false;
161 //=======================================================================
162 // function : ClientSObjectToObject
164 //=======================================================================
165 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
167 _PTR(GenericAttribute) anAttr;
168 CORBA::Object_var anObj;
170 std::string aValue = theSObject->GetIOR();
171 if (strcmp(aValue.c_str(), "") != 0) {
172 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
173 anObj = anORB->string_to_object(aValue.c_str());
176 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
178 return anObj._retn();
181 //=======================================================================
182 // function : ClientStudyToStudy
184 //=======================================================================
185 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
187 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
188 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
189 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
190 int aStudyID = theStudy->StudyId();
191 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
192 return aDSStudy._retn();
195 void GeometryGUI::Modified (bool theIsUpdateActions)
197 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
198 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
199 appStudy->Modified();
200 if ( theIsUpdateActions )
201 app->updateActions();
206 //=======================================================================
207 // function : GeometryGUI::GeometryGUI()
208 // purpose : Constructor
209 //=======================================================================
210 GeometryGUI::GeometryGUI() :
211 SalomeApp_Module( "GEOM" ),
214 if ( CORBA::is_nil( myComponentGeom ) )
216 Engines::EngineComponent_var comp =
217 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
218 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
221 myActiveDialogBox = 0;
223 gp_Pnt origin = gp_Pnt(0., 0., 0.);
224 gp_Dir direction = gp_Dir(0., 0., 1.);
225 myWorkingPlane = gp_Ax3(origin, direction);
228 myLocalSelectionMode = GEOM_ALLOBJECTS;
230 myCreationInfoWdg = 0;
234 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
236 Q_INIT_RESOURCE( GEOMGUI );
239 //=======================================================================
240 // function : GeometryGUI::~GeometryGUI()
241 // purpose : Destructor
242 //=======================================================================
243 GeometryGUI::~GeometryGUI()
245 while (!myOCCSelectors.isEmpty())
246 delete myOCCSelectors.takeFirst();
248 while (!myVTKSelectors.isEmpty())
249 delete myVTKSelectors.takeFirst();
251 qDeleteAll(myGUIMap);
254 //=======================================================================
255 // function : GeometryGUI::getLibrary()
256 // purpose : get or load GUI library by name [ internal ]
257 //=======================================================================
258 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
259 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
261 if ( !myGUIMap.contains( libraryName ) ) {
262 // try to load library if it is not loaded yet
264 QString dirs = getenv( "LD_LIBRARY_PATH" );
267 QString dirs = getenv( "PATH" );
270 if ( !dirs.isEmpty() ) {
271 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
272 QListIterator<QString> it( dirList ); it.toBack();
273 while ( it.hasPrevious() ) {
274 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
276 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
277 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
279 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
280 continue; // continue search further
282 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
283 if ( osdF != NULL ) {
284 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
285 GEOMGUI* libGUI = (*func)( this );
287 myGUIMap[ libraryName ] = libGUI;
288 break; // found and loaded!
295 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
298 //=======================================================================
299 // function : GeometryGUI::getPluginLibrary()
300 // purpose : get or load GUI Plugin library by name [ internal ]
301 //=======================================================================
302 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
303 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
305 if ( !myGUIMap.contains( libraryName ) ) {
306 // try to load library if it is not loaded yet
308 QString dirs = getenv( "LD_LIBRARY_PATH" );
311 QString dirs = getenv( "PATH" );
314 if ( !dirs.isEmpty() ) {
315 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
316 QListIterator<QString> it( dirList ); it.toBack();
317 while ( it.hasPrevious() ) {
318 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
320 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
321 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
323 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
324 continue; // continue search further
326 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
327 if ( osdF != NULL ) {
328 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
329 GEOMPluginGUI* libGUI = (*func)( this );
331 myGUIMap[ libraryName ] = libGUI;
332 break; // found and loaded!
339 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
342 //=======================================================================
343 // function : GeometryGUI::ActiveWorkingPlane()
344 // purpose : Activate Working Plane View
345 //=======================================================================
346 void GeometryGUI::ActiveWorkingPlane()
348 gp_Dir DZ = myWorkingPlane.Direction();
349 gp_Dir DY = myWorkingPlane.YDirection();
351 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
352 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
353 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
356 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
358 Handle(V3d_View) view3d = vw->getViewPort()->getView();
360 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
361 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
365 else if ( ViewVTK ) {
366 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
368 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
370 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
371 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
372 camera->SetFocalPoint(0,0,0);
379 //=======================================================================
380 // function : GeometryGUI::SetActiveDialogBox()
381 // purpose : Set active dialog box
382 //=======================================================================
383 GEOMGUI_AnnotationMgr* GeometryGUI::GetAnnotationMgr()
385 if ( !myAnnotationMgr )
386 myAnnotationMgr = new GEOMGUI_AnnotationMgr( getApp() );
387 return myAnnotationMgr;
390 //=======================================================================
391 // function : GeometryGUI::SetActiveDialogBox()
392 // purpose : Set active dialog box
393 //=======================================================================
394 GEOMGUI_TextTreeWdg* GeometryGUI::GetTextTreeWdg() const
396 return myTextTreeWdg;
399 //=======================================================================
400 // function : GeometryGUI::SetActiveDialogBox()
401 // purpose : Set active dialog box
402 //=======================================================================
403 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
405 myActiveDialogBox = (QDialog*)aDlg;
408 //=======================================================================
409 // function : GeometryGUI::EmitSignalDeactivateDialog()
410 // purpose : Emit a signal to deactivate the active dialog Box
411 //=======================================================================
412 void GeometryGUI::EmitSignalDeactivateDialog()
414 emit SignalDeactivateActiveDialog();
417 //=======================================================================
418 // function : GeometryGUI::EmitSignalCloseAllDialogs()
419 // purpose : Emit a signal to close all non modal dialogs box
420 //=======================================================================
421 void GeometryGUI::EmitSignalCloseAllDialogs()
423 emit SignalCloseAllDialogs();
426 //=======================================================================
427 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
428 // purpose : Emit a signal to inform that default real spin box step has
430 //=======================================================================
431 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
433 emit SignalDefaultStepValueChanged(newVal);
436 //=======================================================================
437 // function : GeometryGUI::OnGUIEvent()
438 // purpose : common slot for all menu/toolbar actions
439 //=======================================================================
440 void GeometryGUI::OnGUIEvent()
442 const QObject* obj = sender();
443 if ( !obj || !obj->inherits( "QAction" ) )
445 int id = actionId((QAction*)obj);
450 //=======================================================================
451 // function : GeometryGUI::OnGUIEvent()
452 // purpose : manage all events on GUI [static]
453 //=======================================================================
454 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
456 SUIT_Application* anApp = application();
458 SUIT_Desktop* desk = anApp->desktop();
460 // check type of the active viewframe
461 SUIT_ViewWindow* window = desk->activeWindow();
462 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
463 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
464 #ifndef DISABLE_GRAPHICSVIEW
465 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
469 // if current viewframe is not of OCC and not of VTK type - return immediately
470 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
471 QList<int> NotViewerDependentCommands;
472 NotViewerDependentCommands << GEOMOp::OpDelete
474 << GEOMOp::OpShowOnly
475 << GEOMOp::OpShowOnlyChildren
476 << GEOMOp::OpDiscloseChildren
477 << GEOMOp::OpConcealChildren
478 << GEOMOp::OpUnpublishObject
479 << GEOMOp::OpPublishObject
480 << GEOMOp::OpPointMarker
481 << GEOMOp::OpCreateFolder
482 << GEOMOp::OpSortChildren;
483 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
484 // activate OCC viewer
485 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
488 // fix for IPAL9103, point 2
489 if ( CORBA::is_nil( GetGeomGen() ) ) {
490 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
495 // find corresponding GUI library
497 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
498 createOriginAndBaseVectors(); // internal operation
500 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
501 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
502 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
503 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
504 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
505 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
506 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
507 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
508 case GEOMOp::OpDelete: // MENU EDIT - DELETE
509 #ifndef DISABLE_PYCONSOLE
510 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
512 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
513 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
514 case GEOMOp::OpColor: // POPUP MENU - COLOR
515 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
516 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
517 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
518 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
519 case GEOMOp::OpIsos: // POPUP MENU - ISOS
520 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
521 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
522 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
523 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
524 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
525 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
526 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
527 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
528 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
529 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
530 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
531 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
532 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
533 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
534 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
535 case GEOMOp::OpClsBringToFront: //
536 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
537 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
538 #ifndef DISABLE_GRAPHICSVIEW
539 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
541 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
542 libName = "GEOMToolsGUI";
544 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
545 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
546 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
547 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
548 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
549 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
550 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
551 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
552 case GEOMOp::OpHide: // MENU VIEW - ERASE
553 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
554 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
555 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
556 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
557 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
558 case GEOMOp::OpShading: // POPUP MENU - SHADING
559 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
560 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
561 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
562 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
563 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
564 libName = "DisplayGUI";
566 case GEOMOp::OpPoint: // MENU BASIC - POINT
567 case GEOMOp::OpLine: // MENU BASIC - LINE
568 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
569 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
570 case GEOMOp::OpArc: // MENU BASIC - ARC
571 case GEOMOp::OpVector: // MENU BASIC - VECTOR
572 case GEOMOp::OpPlane: // MENU BASIC - PLANE
573 case GEOMOp::OpCurve: // MENU BASIC - CURVE
574 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
575 libName = "BasicGUI";
577 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
578 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
579 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
580 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
581 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
582 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
583 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
584 libName = "PrimitiveGUI";
586 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
587 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
588 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
589 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
590 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
591 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
592 libName = "GenerationGUI";
594 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
595 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
596 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
597 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
598 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
600 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
602 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
603 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
604 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
605 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
606 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
607 libName = "EntityGUI";
609 case GEOMOp::OpEdge: // MENU BUILD - EDGE
610 case GEOMOp::OpWire: // MENU BUILD - WIRE
611 case GEOMOp::OpFace: // MENU BUILD - FACE
612 case GEOMOp::OpShell: // MENU BUILD - SHELL
613 case GEOMOp::OpSolid: // MENU BUILD - SOLID
614 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
615 libName = "BuildGUI";
617 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
618 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
619 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
620 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
621 libName = "BooleanGUI";
623 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
624 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
625 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
626 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
627 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
628 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
629 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
630 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
631 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
632 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
633 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
634 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
635 libName = "TransformationGUI";
637 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
638 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
639 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
640 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
641 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
642 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
643 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
644 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
645 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
646 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
647 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
648 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
649 libName = "OperationGUI";
651 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
652 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
653 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
654 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
655 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
656 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
657 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
658 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
659 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
660 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
661 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
662 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
663 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
664 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
665 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
666 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
667 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
668 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
669 libName = "RepairGUI";
671 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
672 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
673 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
674 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
675 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
676 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
677 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
678 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
679 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
680 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
681 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
682 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
683 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
684 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
685 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
686 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
687 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
688 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
689 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
690 #ifndef DISABLE_PLOT2DVIEWER
691 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
693 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
694 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
695 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
696 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
697 libName = "MeasureGUI";
699 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
700 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
701 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
702 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
703 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
704 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
705 libName = "GroupGUI";
707 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
708 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
709 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
710 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
711 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
712 libName = "BlocksGUI";
714 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
715 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
716 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
717 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
718 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
719 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
720 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
721 //libName = "AdvancedGUI";
724 if (myPluginActions.contains(id)) {
725 libName = myPluginActions[id].first;
727 GEOMPluginGUI* library = 0;
728 if ( !libName.isEmpty() ) {
730 libName = QString( "lib" ) + libName + ".so";
732 libName = libName + ".dll";
734 library = getPluginLibrary( libName );
737 // call method of corresponding GUI library
739 //QString action ("%1");
740 //action = action.arg(id);
742 //if( !theParam.isValid() )
743 library->OnGUIEvent( myPluginActions[id].second, desk );
745 // library->OnGUIEvent( id, desk, theParam);
748 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
750 updateCreationInfo();
756 GEOMGUI* library = 0;
757 if ( !libName.isEmpty() ) {
759 libName = QString( "lib" ) + libName + ".so";
761 libName = libName + ".dll";
763 library = getLibrary( libName );
766 // call method of corresponding GUI library
768 if( !theParam.isValid() )
769 library->OnGUIEvent( id, desk );
771 library->OnGUIEvent( id, desk, theParam);
774 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
776 updateCreationInfo();
779 //=================================================================================
780 // function : GeometryGUI::activateOperation()
782 //=================================================================================
783 bool GeometryGUI::activateOperation( int actionId )
785 OnGUIEvent(actionId);
789 //=================================================================================
790 // function : GeometryGUI::activateOperation()
792 //=================================================================================
793 bool GeometryGUI::activateOperation( const QString& actionId )
797 int id = actionId.toInt(&isOk);
804 //=================================================================================
805 // function : GeometryGUI::activateOperation()
807 //=================================================================================
808 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
812 QString pluginLib = plugin;
813 // TODO: if <plugin> is a plugin name, find plugin library name
814 if (myPluginLibs.contains(plugin))
815 pluginLib = myPluginLibs[plugin];
817 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
818 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
819 const PluginAction& anAction = actionsIter.value();
820 if (anAction.first == pluginLib && anAction.second == actionId) {
821 // activate operation
822 OnGUIEvent(actionsIter.key());
830 //=================================================================================
831 // function : GeometryGUI::OnKeyPress()
832 // purpose : Called when any key is pressed by user [static]
833 //=================================================================================
834 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
836 if ( !application() )
838 foreach ( GEOMGUI* lib, myGUIMap )
839 lib->OnKeyPress( e, application()->desktop(), w );
842 //=================================================================================
843 // function : GeometryGUI::OnMouseMove()
844 // purpose : Manages mouse move events [static]
845 //=================================================================================
846 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
848 if ( !application() )
850 foreach ( GEOMGUI* lib, myGUIMap )
851 lib->OnMouseMove( e, application()->desktop(), w );
854 //=================================================================================
855 // function : GeometryGUI::OnMouseRelease()
856 // purpose : Manages mouse release events [static]
857 //=================================================================================
858 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
860 if ( !application() )
862 foreach ( GEOMGUI* lib, myGUIMap )
863 lib->OnMouseRelease( e, application()->desktop(), w );
866 //=================================================================================
867 // function : GeometryGUI::OnMousePress()
868 // purpose : Manage mouse press events [static]
869 //=================================================================================
870 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
872 if ( !application() )
874 foreach ( GEOMGUI* lib, myGUIMap )
875 lib->OnMousePress( e, application()->desktop(), w );
878 //=======================================================================
879 // function : createGeomAction
881 //=======================================================================
882 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
883 const int accel, const bool toggle, const QString& shortcutAction )
885 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
886 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
887 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
889 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
891 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
892 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
894 application()->desktop(),
896 this, SLOT( OnGUIEvent() ),
900 //=======================================================================
901 // function : createOriginAndBaseVectors
903 //=======================================================================
904 void GeometryGUI::createOriginAndBaseVectors()
906 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
907 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
909 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
913 _PTR(Study) studyDS = appStudy->studyDS();
914 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
915 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
916 if ( !aBasicOperations->_is_nil() ) {
917 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
918 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
919 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
920 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
921 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
922 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
924 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
925 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
926 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
927 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
928 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
929 anOrigin->UnRegister();
933 aBasicOperations->UnRegister();
935 getApp()->updateObjectBrowser( true );
941 //=======================================================================
942 // function : GeometryGUI::initialize()
943 // purpose : Called when GEOM module is created
944 //=======================================================================
945 void GeometryGUI::initialize( CAM_Application* app )
947 SalomeApp_Module::initialize( app );
949 // ----- create actions --------------
951 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
953 createGeomAction( GEOMOp::OpPoint, "POINT" );
954 createGeomAction( GEOMOp::OpLine, "LINE" );
955 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
956 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
957 createGeomAction( GEOMOp::OpArc, "ARC" );
958 createGeomAction( GEOMOp::OpCurve, "CURVE" );
959 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
960 createGeomAction( GEOMOp::OpVector, "VECTOR" );
961 createGeomAction( GEOMOp::OpPlane, "PLANE" );
962 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
963 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
964 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
966 createGeomAction( GEOMOp::OpBox, "BOX" );
967 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
968 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
969 createGeomAction( GEOMOp::OpTorus, "TORUS" );
970 createGeomAction( GEOMOp::OpCone, "CONE" );
971 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
972 createGeomAction( GEOMOp::OpDisk, "DISK" );
974 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
975 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
976 createGeomAction( GEOMOp::OpFilling, "FILLING" );
977 createGeomAction( GEOMOp::OpPipe, "PIPE" );
978 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
979 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
981 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
982 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
983 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
984 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
985 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
987 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
988 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
990 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
992 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
993 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
995 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
996 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
997 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
999 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1001 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1002 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1004 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1005 createGeomAction( GEOMOp::OpWire, "WIRE" );
1006 createGeomAction( GEOMOp::OpFace, "FACE" );
1007 createGeomAction( GEOMOp::OpShell, "SHELL" );
1008 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1009 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1011 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1012 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1013 createGeomAction( GEOMOp::OpCut, "CUT" );
1014 createGeomAction( GEOMOp::OpSection, "SECTION" );
1016 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1017 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1018 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1019 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1020 createGeomAction( GEOMOp::OpScale, "SCALE" );
1021 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1022 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1023 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1024 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1025 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1026 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1028 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1029 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1030 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1031 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1032 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1033 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1034 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1035 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1036 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1037 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1038 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1039 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1041 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1042 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1043 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1045 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1046 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1047 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1048 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1049 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1050 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1051 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1052 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1053 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1054 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1055 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1056 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1057 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1058 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1059 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1060 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1061 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1062 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1064 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1065 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1066 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1067 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1068 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1069 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1070 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1071 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1072 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1073 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1074 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1075 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1077 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1078 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1079 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1080 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1081 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1082 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1083 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1084 #ifndef DISABLE_PLOT2DVIEWER
1085 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1088 #ifndef DISABLE_PYCONSOLE
1089 #ifdef _DEBUG_ // PAL16821
1090 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1094 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1095 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1096 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1097 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1098 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1099 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1100 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1101 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1102 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1103 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1104 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1105 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1106 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1107 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1108 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1109 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1110 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1111 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1112 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1113 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1114 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1115 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1116 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1117 createGeomAction( GEOMOp::OpHide, "ERASE" );
1119 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1120 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1121 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1122 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1123 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1124 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1125 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1126 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1127 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1128 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1129 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1130 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1131 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1132 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1133 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1134 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1135 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1136 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1137 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1138 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1139 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1140 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1141 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1142 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1143 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1144 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1145 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1146 #ifndef DISABLE_GRAPHICSVIEW
1147 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1149 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1150 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1151 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1152 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1153 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1155 // Create actions for increase/decrease transparency shortcuts
1156 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1157 "Geometry:Increase transparency");
1158 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1159 "Geometry:Decrease transparency");
1161 // Create actions for increase/decrease number of isolines
1162 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1163 "Geometry:Increase number of isolines");
1164 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1165 "Geometry:Decrease number of isolines");
1167 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1168 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1169 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1170 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1171 //@@ 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 @@//
1173 // ---- create menus --------------------------
1175 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1177 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1178 createMenu( GEOMOp::OpDelete, editId, -1 );
1180 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1182 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1183 createMenu( GEOMOp::OpPoint, basicId, -1 );
1184 createMenu( GEOMOp::OpLine, basicId, -1 );
1185 createMenu( GEOMOp::OpCircle, basicId, -1 );
1186 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1187 createMenu( GEOMOp::OpArc, basicId, -1 );
1188 createMenu( GEOMOp::OpCurve, basicId, -1 );
1189 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1190 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1191 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1192 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1193 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1194 createMenu( separator(), basicId, -1 );
1195 createMenu( GEOMOp::OpVector, basicId, -1 );
1196 createMenu( GEOMOp::OpPlane, basicId, -1 );
1197 createMenu( GEOMOp::OpLCS, basicId, -1 );
1198 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1200 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1201 createMenu( GEOMOp::OpBox, primId, -1 );
1202 createMenu( GEOMOp::OpCylinder, primId, -1 );
1203 createMenu( GEOMOp::OpSphere, primId, -1 );
1204 createMenu( GEOMOp::OpTorus, primId, -1 );
1205 createMenu( GEOMOp::OpCone, primId, -1 );
1206 createMenu( GEOMOp::OpRectangle, primId, -1 );
1207 createMenu( GEOMOp::OpDisk, primId, -1 );
1208 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1210 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1211 createMenu( GEOMOp::OpPrism, genId, -1 );
1212 createMenu( GEOMOp::OpRevolution, genId, -1 );
1213 createMenu( GEOMOp::OpFilling, genId, -1 );
1214 createMenu( GEOMOp::OpPipe, genId, -1 );
1215 createMenu( GEOMOp::OpPipePath, genId, -1 );
1216 createMenu( GEOMOp::OpThickness, genId, -1 );
1218 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1219 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1220 //@@ 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 @@//
1222 createMenu( separator(), newEntId, -1 );
1224 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1225 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1226 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1227 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1228 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1229 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1231 createMenu( separator(), newEntId, -1 );
1233 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1234 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1235 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1237 createMenu( separator(), newEntId, -1 );
1239 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1240 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1241 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1242 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1243 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1245 createMenu( separator(), newEntId, -1 );
1247 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1249 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1250 createMenu( GEOMOp::OpEdge, buildId, -1 );
1251 createMenu( GEOMOp::OpWire, buildId, -1 );
1252 createMenu( GEOMOp::OpFace, buildId, -1 );
1253 createMenu( GEOMOp::OpShell, buildId, -1 );
1254 createMenu( GEOMOp::OpSolid, buildId, -1 );
1255 createMenu( GEOMOp::OpCompound, buildId, -1 );
1257 createMenu( separator(), newEntId, -1 );
1259 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1261 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1264 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1266 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1267 createMenu( GEOMOp::OpFuse, boolId, -1 );
1268 createMenu( GEOMOp::OpCommon, boolId, -1 );
1269 createMenu( GEOMOp::OpCut, boolId, -1 );
1270 createMenu( GEOMOp::OpSection, boolId, -1 );
1272 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1273 createMenu( GEOMOp::OpTranslate, transId, -1 );
1274 createMenu( GEOMOp::OpRotate, transId, -1 );
1275 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1276 createMenu( GEOMOp::OpMirror, transId, -1 );
1277 createMenu( GEOMOp::OpScale, transId, -1 );
1278 createMenu( GEOMOp::OpOffset, transId, -1 );
1279 createMenu( GEOMOp::OpProjection, transId, -1 );
1280 createMenu( GEOMOp::OpExtension, transId, -1 );
1281 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1282 createMenu( separator(), transId, -1 );
1283 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1284 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1286 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1287 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1288 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1289 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1291 createMenu( separator(), operId, -1 );
1293 createMenu( GEOMOp::OpPartition, operId, -1 );
1294 createMenu( GEOMOp::OpArchimede, operId, -1 );
1295 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1296 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1297 createMenu( GEOMOp::OpTransferData, operId, -1 );
1298 createMenu( GEOMOp::OpExtraction, operId, -1 );
1300 createMenu( separator(), operId, -1 );
1302 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1303 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1304 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1305 createMenu( GEOMOp::OpChamfer, operId, -1 );
1306 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1307 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1309 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1310 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1311 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1312 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1313 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1314 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1315 createMenu( GEOMOp::OpSewing, repairId, -1 );
1316 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1317 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1318 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1319 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1320 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1321 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1322 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1323 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1324 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1325 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1326 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1328 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1329 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1330 createMenu( GEOMOp::OpProperties, measurId, -1 );
1331 createMenu( separator(), measurId, -1 );
1332 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1333 createMenu( GEOMOp::OpInertia, measurId, -1 );
1334 createMenu( GEOMOp::OpNormale, measurId, -1 );
1335 createMenu( separator(), measurId, -1 );
1336 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1337 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1338 createMenu( separator(), measurId, -1 );
1340 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1341 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1342 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1343 createMenu( GEOMOp::OpAngle, dimId, -1 );
1344 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1346 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1348 createMenu( separator(), measurId, -1 );
1349 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1350 createMenu( separator(), measurId, -1 );
1351 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1352 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1353 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1354 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1355 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1356 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1357 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1358 #ifndef DISABLE_PLOT2DVIEWER
1359 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1362 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1363 #ifndef DISABLE_PYCONSOLE
1364 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1365 createMenu( separator(), toolsId, -1 );
1366 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1370 createMenu( separator(), toolsId, -1 );
1371 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1372 createMenu( separator(), toolsId, -1 );
1374 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1375 createMenu( separator(), viewId, -1 );
1377 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1378 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1379 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1380 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1381 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1382 createMenu( separator(), dispmodeId, -1 );
1383 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1384 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1385 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1387 createMenu( separator(), viewId, -1 );
1388 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1389 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1390 createMenu( separator(), viewId, -1 );
1391 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1392 createMenu( separator(), viewId, -1 );
1396 because of these items are accessible through object browser and viewers
1397 we have removed they from main menu
1399 createMenu( GEOMOp::OpShow, viewId, -1 );
1400 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1401 createMenu( GEOMOp::OpHide, viewId, -1 );
1404 // ---- create toolbars --------------------------
1406 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1407 createTool( GEOMOp::OpPoint, basicTbId );
1408 createTool( GEOMOp::OpLine, basicTbId );
1409 createTool( GEOMOp::OpCircle, basicTbId );
1410 createTool( GEOMOp::OpEllipse, basicTbId );
1411 createTool( GEOMOp::OpArc, basicTbId );
1412 createTool( GEOMOp::OpCurve, basicTbId );
1413 createTool( GEOMOp::OpVector, basicTbId );
1414 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1415 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1416 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1417 createTool( GEOMOp::OpIsoline, basicTbId );
1418 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1419 createTool( GEOMOp::OpPlane, basicTbId );
1420 createTool( GEOMOp::OpLCS, basicTbId );
1421 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1423 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1424 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1425 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1427 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1428 createTool( GEOMOp::OpBox, primTbId );
1429 createTool( GEOMOp::OpCylinder, primTbId );
1430 createTool( GEOMOp::OpSphere, primTbId );
1431 createTool( GEOMOp::OpTorus, primTbId );
1432 createTool( GEOMOp::OpCone, primTbId );
1433 createTool( GEOMOp::OpRectangle, primTbId );
1434 createTool( GEOMOp::OpDisk, primTbId );
1435 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1437 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1438 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1439 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1441 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1442 createTool( GEOMOp::OpFuse, boolTbId );
1443 createTool( GEOMOp::OpCommon, boolTbId );
1444 createTool( GEOMOp::OpCut, boolTbId );
1445 createTool( GEOMOp::OpSection, boolTbId );
1447 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1448 createTool( GEOMOp::OpPrism, genTbId );
1449 createTool( GEOMOp::OpRevolution, genTbId );
1450 createTool( GEOMOp::OpFilling, genTbId );
1451 createTool( GEOMOp::OpPipe, genTbId );
1452 createTool( GEOMOp::OpPipePath, genTbId );
1453 createTool( GEOMOp::OpThickness, genTbId );
1455 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1456 createTool( GEOMOp::OpTranslate, transTbId );
1457 createTool( GEOMOp::OpRotate, transTbId );
1458 createTool( GEOMOp::OpChangeLoc, transTbId );
1459 createTool( GEOMOp::OpMirror, transTbId );
1460 createTool( GEOMOp::OpScale, transTbId );
1461 createTool( GEOMOp::OpOffset, transTbId );
1462 createTool( GEOMOp::OpProjection, transTbId );
1463 createTool( GEOMOp::OpExtension, transTbId );
1464 createTool( GEOMOp::OpProjOnCyl, transTbId );
1465 createTool( separator(), transTbId );
1466 createTool( GEOMOp::OpMultiTranslate, transTbId );
1467 createTool( GEOMOp::OpMultiRotate, transTbId );
1469 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1470 createTool( GEOMOp::OpExplode, operTbId );
1471 createTool( GEOMOp::OpPartition, operTbId );
1472 createTool( GEOMOp::OpArchimede, operTbId );
1473 createTool( GEOMOp::OpShapesOnShape, operTbId );
1474 createTool( GEOMOp::OpSharedShapes, operTbId );
1475 createTool( GEOMOp::OpTransferData, operTbId );
1476 createTool( GEOMOp::OpExtraction, operTbId );
1478 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1479 createTool( GEOMOp::OpFillet1d, featTbId );
1480 createTool( GEOMOp::OpFillet2d, featTbId );
1481 createTool( GEOMOp::OpFillet3d, featTbId );
1482 createTool( GEOMOp::OpChamfer, featTbId );
1483 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1484 createTool( GEOMOp::OpExtrudedCut, featTbId );
1486 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1487 createTool( GEOMOp::OpEdge, buildTbId );
1488 createTool( GEOMOp::OpWire, buildTbId );
1489 createTool( GEOMOp::OpFace, buildTbId );
1490 createTool( GEOMOp::OpShell, buildTbId );
1491 createTool( GEOMOp::OpSolid, buildTbId );
1492 createTool( GEOMOp::OpCompound, buildTbId );
1494 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1495 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1496 createTool( GEOMOp::OpProperties, measureTbId );
1497 createTool( GEOMOp::OpCenterMass, measureTbId );
1498 createTool( GEOMOp::OpInertia, measureTbId );
1499 createTool( GEOMOp::OpNormale, measureTbId );
1500 createTool( separator(), measureTbId );
1501 createTool( GEOMOp::OpBoundingBox, measureTbId );
1502 createTool( GEOMOp::OpMinDistance, measureTbId );
1503 createTool( GEOMOp::OpAngle, measureTbId );
1504 createTool( GEOMOp::OpAnnotation, measureTbId );
1505 createTool( GEOMOp::OpTolerance , measureTbId );
1506 createTool( separator(), measureTbId );
1507 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1508 createTool( GEOMOp::OpFreeFaces, measureTbId );
1509 createTool( separator(), measureTbId );
1510 createTool( GEOMOp::OpWhatIs, measureTbId );
1511 createTool( GEOMOp::OpCheckShape, measureTbId );
1512 createTool( GEOMOp::OpCheckCompound, measureTbId );
1513 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1514 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1515 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1517 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1518 createTool( GEOMOp::OpPictureImport, picturesTbId );
1520 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1523 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1524 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1525 //@@ 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 @@//
1527 // ---- create popup menus --------------------------
1529 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1530 QString clientOCC = "(client='OCCViewer')";
1531 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1532 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1534 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1535 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1536 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1537 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1539 QString autoColorPrefix =
1540 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1542 QtxPopupMgr* mgr = popupMgr();
1544 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1545 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1546 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1547 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1548 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1549 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1550 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1551 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1553 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1554 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1555 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1556 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1557 mgr->insert( separator(), -1, -1 ); // -----------
1559 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1560 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1561 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1562 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1563 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1564 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1565 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1566 mgr->insert( separator(), -1, -1 ); // -----------
1567 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1568 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1569 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1570 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1571 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1572 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1573 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1574 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1575 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1576 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1577 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1578 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1579 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1580 mgr->insert( separator(), dispmodeId, -1 );
1581 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1582 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1583 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1584 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1585 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1586 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1587 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1588 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1589 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1590 mgr->insert( separator(), -1, -1 ); // -----------
1592 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1593 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1594 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1595 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1596 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1597 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1598 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1599 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1600 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1601 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1603 // material properties
1604 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1605 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1608 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1609 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1611 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1612 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1613 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1615 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1616 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1618 mgr->insert( separator(), -1, -1 ); // -----------
1619 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1620 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1621 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1622 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1623 mgr->insert( separator(), -1, -1 ); // -----------
1625 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1626 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1627 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1628 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1629 mgr->insert( separator(), -1, -1 ); // -----------
1631 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1632 onlyComponent = "((type='Component') and selcount=1)",
1633 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1634 types = "'Shape' 'Group' 'FieldStep'";
1636 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1637 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1639 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1640 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1642 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1643 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1645 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1647 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1648 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1649 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1650 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1651 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1652 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1653 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1654 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1655 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1656 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1657 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1658 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1659 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1660 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1661 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1662 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1663 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1664 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1665 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1666 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1667 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1668 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1669 mgr->insert( separator(), selectonlyId, -1);
1670 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1671 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1672 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1673 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1674 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1675 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1676 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1678 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1680 mgr->insert( separator(), -1, -1 ); // -----------
1681 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1682 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1683 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1684 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1685 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1686 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1687 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1688 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1690 mgr->insert( separator(), -1, -1 ); // -----------
1691 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1692 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1694 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1695 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1697 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1698 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1700 mgr->insert( separator(), -1, -1 ); // -----------
1701 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1702 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1704 mgr->insert( separator(), -1, -1 ); // -----------
1705 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1706 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1708 #ifndef DISABLE_GRAPHICSVIEW
1709 mgr->insert( separator(), -1, -1 ); // -----------
1710 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1711 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1714 mgr->insert( separator(), -1, -1 ); // -----------
1715 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1716 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1718 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1720 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1722 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1723 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1724 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1727 // create plugin actions and menus
1731 //=======================================================================
1732 // function : GeometryGUI::addPluginActions()
1734 //=======================================================================
1735 void GeometryGUI::addPluginActions()
1738 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1739 if (!resMgr) return;
1741 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1742 if (!appStudy) return;
1744 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1746 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1748 int id = GEOMOp::OpLastOperationID; // TODO?
1751 GEOMUtils::PluginInfo::const_iterator it;
1752 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1753 // bind action lib and label to its ID for activateOperation() method proper work
1754 GEOMUtils::PluginData pdata = (*it);
1755 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1756 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1757 std::list<GEOMUtils::ActionData>::const_iterator ait;
1758 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1759 GEOMUtils::ActionData adata = (*ait);
1762 if ( !adata.icon.empty() )
1763 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1765 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1766 QString actionName = smenus.last();
1767 actionName = actionName.toUpper().prepend( "MEN_" );
1768 smenus.removeLast();
1770 // path to action in toolbar
1771 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1772 QString actionTool = stools.last();
1773 actionTool = actionTool.toUpper().prepend( "TOP_" );
1774 stools.removeLast();
1776 QString actionStat = adata.statusText.c_str();
1777 actionStat = actionStat.toUpper().prepend( "STB_" );
1779 createAction( id, // ~ adata.label
1780 tr( actionTool.toLatin1().constData() ),
1782 tr( actionName.toLatin1().constData() ),
1783 tr( actionStat.toLatin1().constData() ),
1784 QKeySequence( tr( adata.accel.c_str() ) ),
1785 application()->desktop(),
1787 this, SLOT( OnGUIEvent() ),
1788 QString() /*shortcutAction*/ );
1791 foreach ( QString subMenu, smenus ) {
1792 QStringList subMenuList = subMenu.split( ":" );
1793 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1794 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1795 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1797 createMenu( id, menuId, -1 );
1799 if ( !stools.isEmpty() ) {
1800 QString subTool = stools[0];
1801 subTool = subTool.toUpper().prepend( "TOOL_" );
1802 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1803 createTool(id, toolId);
1806 // add action id to map
1807 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1808 myPluginActions[id] = anAction;
1815 //=======================================================================
1816 // function : GeometryGUI::activateModule()
1817 // purpose : Called when GEOM module is activated
1818 //=======================================================================
1819 bool GeometryGUI::activateModule( SUIT_Study* study )
1821 if ( CORBA::is_nil( myComponentGeom ) )
1824 bool res = SalomeApp_Module::activateModule( study );
1828 setMenuShown( true );
1829 setToolShown( true );
1831 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1832 PyGILState_STATE gstate = PyGILState_Ensure();
1833 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1834 if ( !pluginsmanager ) {
1839 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1840 tr("MEN_NEW_ENTITY").toUtf8().data(),
1841 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1846 PyGILState_Release(gstate);
1847 // end of GEOM plugins loading
1849 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1850 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1852 // Reset actions accelerator keys
1853 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1855 GUIMap::Iterator it;
1856 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1857 it.value()->activate( application()->desktop() );
1859 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1861 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1862 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1863 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1865 if ( !myCreationInfoWdg )
1866 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1867 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1868 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1870 if ( !myTextTreeWdg ) {
1871 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1872 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1875 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1876 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1879 SALOME_ListIO selected;
1880 sm->selectedObjects( selected );
1881 sm->clearSelected();
1883 SUIT_ViewManager* vm;
1884 ViewManagerList OCCViewManagers, VTKViewManagers;
1886 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1887 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1888 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1889 onViewManagerAdded(vm);
1891 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1892 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1893 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1894 onViewManagerAdded(vm);
1896 sm->setSelectedObjects( selected, true ); //NPAL 19674
1898 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1900 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1902 // 0020836 (Basic vectors and origin)
1903 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1904 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1905 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1907 _PTR(Study) studyDS = appStudy->studyDS();
1909 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1910 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1911 createOriginAndBaseVectors();
1916 Py_XDECREF(pluginsmanager);
1920 //=======================================================================
1921 // function : GeometryGUI::deactivateModule()
1922 // purpose : Called when GEOM module is deactivated
1923 //=======================================================================
1924 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1926 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1928 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1930 setMenuShown( false );
1931 setToolShown( false );
1933 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1934 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1936 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1938 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1939 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1940 if ( myCreationInfoWdg ) {
1941 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1942 myCreationInfoWdg = 0;
1944 if ( myTextTreeWdg ) {
1945 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1946 disconnect( application(), 0, myTextTreeWdg, 0 );
1950 EmitSignalCloseAllDialogs();
1952 GUIMap::Iterator it;
1953 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1954 it.value()->deactivate();
1956 // Unset actions accelerator keys
1957 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1959 qDeleteAll(myOCCSelectors);
1960 myOCCSelectors.clear();
1961 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1963 qDeleteAll(myVTKSelectors);
1964 myVTKSelectors.clear();
1965 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1967 return SalomeApp_Module::deactivateModule( study );
1970 //=======================================================================
1971 // function : onWindowActivated()
1972 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1973 //=======================================================================
1974 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1979 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1980 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1982 // disable non-OCC viewframe menu commands
1983 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1984 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1985 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1986 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1987 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1988 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1989 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1991 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1992 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1993 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1994 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1996 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1999 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2001 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2002 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2003 #ifndef DISABLE_PYCONSOLE
2004 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2006 if ( myCreationInfoWdg )
2007 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2008 if ( myTextTreeWdg )
2009 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2012 void GeometryGUI::viewManagers( QStringList& lst ) const
2014 lst.append( OCCViewer_Viewer::Type() );
2017 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2019 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2021 qDebug( "connect" );
2022 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2023 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2024 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2025 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2026 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2027 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2028 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2029 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2031 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2032 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2034 // disable OCC selectors
2035 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2036 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2037 while ( itOCCSel.hasNext() )
2038 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2039 sr->setEnabled(true);
2041 else if ( vm->getType() == SVTK_Viewer::Type() )
2043 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2044 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2046 // disable VTK selectors
2047 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2048 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2049 while ( itVTKSel.hasNext() )
2050 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2051 sr->setEnabled(true);
2055 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2057 SUIT_ViewModel* viewer = vm->getViewModel();
2058 if ( vm->getType() == OCCViewer_Viewer::Type() )
2060 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2061 while ( itOCCSel.hasNext() )
2062 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2063 if ( sr->viewer() == viewer )
2065 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2069 if ( vm->getType() == SVTK_Viewer::Type() )
2071 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2072 while ( itVTKSel.hasNext() )
2073 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2074 if ( sr->viewer() == viewer )
2076 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2080 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2082 GetAnnotationMgr()->RemoveView( aSOCCView );
2086 //================================================================================
2088 * \brief Slot called when selection changed. Shows creation info of a selected object
2090 //================================================================================
2092 void GeometryGUI::updateCreationInfo()
2094 if ( myCreationInfoWdg )
2095 myCreationInfoWdg->clear();
2097 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2098 // if ( !myCreationInfoWdg->isVisible() )
2101 // look for a sole selected GEOM_Object
2102 GEOM::GEOM_BaseObject_var geomObj;
2104 SALOME_ListIO selected;
2105 getApp()->selectionMgr()->selectedObjects( selected );
2107 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2108 SALOME_ListIteratorOfListIO selIt( selected );
2109 for ( ; selIt.More(); selIt.Next() )
2111 Handle(SALOME_InteractiveObject) io = selIt.Value();
2112 if ( !io->hasEntry() ) continue;
2113 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2114 if ( !sobj ) continue;
2115 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2116 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2117 if ( !gobj->_is_nil() )
2119 if ( !geomObj->_is_nil() )
2120 return; // several GEOM objects selected
2124 if ( geomObj->_is_nil() ) return;
2126 // pass creation info of geomObj to myCreationInfoWdg
2128 if ( myCreationInfoWdg ) {
2130 GEOM::CreationInformationSeq_var info;
2133 info = geomObj->GetCreationInformation();
2137 myCreationInfoWdg->setInfo( info );
2141 void GeometryGUI::onAutoBringToFront()
2143 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2144 if( !isAutoBringToFront )
2147 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2148 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2151 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2152 if (!appStudy) return;
2154 GEOM_Displayer displayer( appStudy );
2156 SALOME_View* window = displayer.GetActiveView();
2157 if ( !window ) return;
2159 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2161 SALOME_ListIO selected;
2162 getApp()->selectionMgr()->selectedObjects( selected );
2163 if (!myTopLevelIOList.IsEmpty())
2165 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2167 Handle( SALOME_InteractiveObject ) io = It.Value();
2168 bool isSelected = false;
2169 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2171 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2172 if( io->isSame( sel_io ) )
2175 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2177 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2178 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2183 myTopLevelIOList.Assign(selected);
2184 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2186 Handle( SALOME_InteractiveObject ) io = It.Value();
2187 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2188 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2191 displayer.UpdateViewer();
2192 GeometryGUI::Modified();
2195 void GeometryGUI::updateFieldColorScale()
2197 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2199 GEOM_Displayer aDisplayer( aStudy );
2200 aDisplayer.UpdateColorScale();
2204 QString GeometryGUI::engineIOR() const
2206 if ( !CORBA::is_nil( GetGeomGen() ) )
2207 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2211 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2212 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2214 theWidth = theHeight = 0;
2216 Handle(TColStd_HArray1OfByte) aTexture;
2219 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2220 aTexture = aTextureMap[ theId ];
2221 if ( aTexture.IsNull() ) {
2222 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2223 if ( !aInsOp->_is_nil() ) {
2224 CORBA::Long aWidth, aHeight;
2225 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2226 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2228 theHeight = aHeight;
2230 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2232 for (int i = 0; i < aStream->length(); i++)
2233 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2234 aTextureMap[ theId ] = aTexture;
2242 LightApp_Selection* GeometryGUI::createSelection() const
2244 return new GEOMGUI_Selection();
2247 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2249 SalomeApp_Module::contextMenuPopup( client, menu, title );
2251 getApp()->selectionMgr()->selectedObjects( lst );
2253 //Add submenu for predefined materials
2254 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2255 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2256 QtxPopupMgr* mgr = popupMgr();
2257 //get parrent for submenu
2258 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2260 QMenu* oldMenu = act->menu() ;
2265 QMenu* matMenu = new QMenu();
2266 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2268 //Get current material model for the object
2270 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2271 if ( anApp && anApp->activeViewManager() ) {
2272 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2274 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2277 QString curModel = "";
2278 if ( v.canConvert<QString>() ) curModel = v.toString();
2279 // get list of all predefined materials
2280 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2282 foreach ( QString material, materials )
2284 QAction* menAct = matMenu->addAction( material );
2285 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2286 signalMapper->setMapping( menAct, material );
2287 menAct->setCheckable( true );
2288 // Set checked if this material is current
2289 Material_Model aModel;
2290 aModel.fromResources( material );
2291 if ( !found && aModel.toProperties() == curModel ) {
2292 menAct->setChecked( true );
2296 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2297 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2298 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2299 this, SLOT( OnSetMaterial( const QString & ) ) );
2300 act->setMenu( matMenu );
2304 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2305 Handle(SALOME_InteractiveObject) io = lst.First();
2306 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2307 _PTR(Study) study = appStudy->studyDS();
2308 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2310 QString aName = QString( obj->GetName().c_str() );
2311 aName.remove( QRegExp("\\s+$") );
2317 void GeometryGUI::OnSetMaterial(const QString& theName)
2319 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2323 void GeometryGUI::createPreferences()
2325 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2327 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2329 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2330 setPreferenceProperty( genGroup, "columns", 2 );
2332 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2333 LightApp_Preferences::Selector,
2334 "Geometry", "display_mode" );
2336 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2337 LightApp_Preferences::Color, "Geometry", "shading_color" );
2339 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2340 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2342 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2343 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2345 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2346 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2348 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2349 LightApp_Preferences::Color, "Geometry", "line_color" );
2351 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2352 LightApp_Preferences::Color, "Geometry", "point_color" );
2354 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2355 LightApp_Preferences::Color, "Geometry", "isos_color" );
2357 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2358 LightApp_Preferences::Color, "Geometry", "label_color" );
2360 addPreference( "", genGroup, LightApp_Preferences::Space );
2362 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2363 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2365 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2366 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2368 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2369 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2371 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2372 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2374 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2375 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2377 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2378 LightApp_Preferences::Selector,
2379 "Geometry", "material" );
2381 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2382 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2388 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2389 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2391 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2392 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2394 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2395 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2397 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2398 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2400 for (int i = 0; i < nb; i++) {
2401 setPreferenceProperty( wd[i], "min", 1 );
2402 setPreferenceProperty( wd[i], "max", 5 );
2405 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2406 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2408 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2409 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2411 // --------------------------------------------------------------------------
2412 // Dimensions (Measurements) preferences
2413 // --------------------------------------------------------------------------
2415 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2416 setPreferenceProperty( aDimGroupId, "columns", 2 );
2418 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2419 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2421 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2422 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2424 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2425 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2427 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2429 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2430 setPreferenceProperty( aDimFontId, "features", f );
2431 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2433 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2434 QString aFontFile = "";
2435 resMgr->value("resources", "GEOM", aFontFile);
2436 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2437 // add enginier font into combobox
2438 int fontID = QFontDatabase::addApplicationFont( aFontFile );
2439 Handle(Font_SystemFont) sf = new Font_SystemFont(
2440 new TCollection_HAsciiString("Y14.5M-2009"),
2442 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2443 // register font in OCC font manager
2444 fmgr->RegisterFont( sf, Standard_False );
2446 // get list of supported fonts by OCC
2447 QStringList anOCCFonts;
2448 TColStd_SequenceOfHAsciiString theFontsNames;
2449 fmgr->GetAvailableFontsNames( theFontsNames );
2450 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2451 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2452 anOCCFonts << str->ToCString();
2454 anOCCFonts.removeDuplicates();
2455 // set the supported fonts into combobox to use its only
2456 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2458 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2459 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2461 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2462 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2463 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2465 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2466 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2468 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2469 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2471 QStringList aListOfLengthUnits;
2472 aListOfLengthUnits << "m";
2473 aListOfLengthUnits << "cm";
2474 aListOfLengthUnits << "mm";
2475 aListOfLengthUnits << "in.";
2476 aListOfLengthUnits << "ft.";
2478 QStringList aListOfAngUnits;
2479 aListOfAngUnits << "rad";
2480 aListOfAngUnits << "deg";
2482 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2483 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2485 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2486 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2488 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2489 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2491 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2492 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2493 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2495 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2496 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2498 // --------------------------------------------------------------------------
2499 // Shape annotation preferences
2500 // --------------------------------------------------------------------------
2502 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2503 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2505 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2506 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2507 const int aShapeAnnFont =
2508 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2510 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2511 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2512 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2513 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2515 const int aShapeAnnLineWidth =
2516 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2518 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2519 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2521 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2523 const int aShapeAnnLineStyle =
2524 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2526 QStringList aLineStyleList;
2527 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2528 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2529 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2530 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2532 QList<QVariant> aLineStyleIds;
2533 aLineStyleIds.append(0);
2534 aLineStyleIds.append(1);
2535 aLineStyleIds.append(2);
2536 aLineStyleIds.append(3);
2538 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2539 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2541 // --------------------------------------------------------------------------
2542 // Isoline drawing preferences
2543 // --------------------------------------------------------------------------
2545 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2546 setPreferenceProperty( isoGroup, "columns", 2 );
2547 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2548 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2549 setPreferenceProperty( isoU, "min", 0 );
2550 setPreferenceProperty( isoU, "max", 100000 );
2551 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2552 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2553 setPreferenceProperty( isoV, "min", 0 );
2554 setPreferenceProperty( isoV, "max", 100000 );
2556 // Quantities with individual precision settings
2557 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2558 setPreferenceProperty( precGroup, "columns", 2 );
2560 const int nbQuantities = 8;
2561 int prec[nbQuantities], ii = 0;
2562 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2563 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2564 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2565 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2566 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2567 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2568 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2569 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2570 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2571 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2572 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2573 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2574 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2575 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2576 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2577 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2579 // Set property for precision value for spinboxes
2580 for ( ii = 0; ii < nbQuantities; ii++ ){
2581 setPreferenceProperty( prec[ii], "min", -14 );
2582 setPreferenceProperty( prec[ii], "max", 14 );
2583 setPreferenceProperty( prec[ii], "precision", 2 );
2586 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2587 setPreferenceProperty( VertexGroup, "columns", 2 );
2589 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2590 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2592 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2593 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2595 // Set property for default display mode
2596 QStringList aModesList;
2597 aModesList.append( tr("MEN_WIREFRAME") );
2598 aModesList.append( tr("MEN_SHADING") );
2599 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2600 aModesList.append( tr("MEN_TEXTURE") );
2602 QList<QVariant> anIndexesList;
2603 anIndexesList.append(0);
2604 anIndexesList.append(1);
2605 anIndexesList.append(2);
2606 anIndexesList.append(3);
2608 setPreferenceProperty( dispmode, "strings", aModesList );
2609 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2611 // Set property for top level display mode
2612 QStringList aTopModesList;
2613 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2614 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2615 aTopModesList.append( tr("MEN_WIREFRAME") );
2616 aTopModesList.append( tr("MEN_SHADING") );
2617 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2619 QList<QVariant> aTopIndexesList;
2620 aTopIndexesList.append(0);
2621 aTopIndexesList.append(1);
2622 aTopIndexesList.append(2);
2623 aTopIndexesList.append(3);
2624 aTopIndexesList.append(4);
2626 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2627 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2629 // Set property for step value for spinboxes
2630 setPreferenceProperty( step, "min", 1 );
2631 setPreferenceProperty( step, "max", 10000 );
2632 setPreferenceProperty( step, "precision", 3 );
2634 // Set property for trandparency value for spinboxes
2635 setPreferenceProperty( transparency, "min", 0 );
2636 setPreferenceProperty( transparency, "max", 100 );
2638 // Set property for deflection value for spinboxes
2639 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2640 setPreferenceProperty( defl, "max", 1.0 );
2641 setPreferenceProperty( defl, "step", 1.0e-04 );
2642 setPreferenceProperty( defl, "precision", 6 );
2644 // Set property for default material
2645 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2647 // Set property vertex marker type
2648 QList<QVariant> aMarkerTypeIndicesList;
2649 QList<QVariant> aMarkerTypeIconsList;
2651 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2652 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2653 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2654 aMarkerTypeIndicesList << (i-1);
2655 aMarkerTypeIconsList << pixmap;
2658 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2659 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2661 // Set property for vertex marker scale
2662 QList<QVariant> aMarkerScaleIndicesList;
2663 QStringList aMarkerScaleValuesList;
2665 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2666 aMarkerScaleIndicesList << iii;
2667 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2670 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2671 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2673 // Scalar bar for field step presentation
2674 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2675 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2677 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2678 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2679 setPreferenceProperty( sbXPosition, "min", 0 );
2680 setPreferenceProperty( sbXPosition, "max", 1 );
2681 setPreferenceProperty( sbXPosition, "step", 0.05 );
2683 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2684 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2685 setPreferenceProperty( sbYPosition, "min", 0 );
2686 setPreferenceProperty( sbYPosition, "max", 1 );
2687 setPreferenceProperty( sbYPosition, "step", 0.05 );
2689 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2690 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2691 setPreferenceProperty( sbWidth, "min", 0 );
2692 setPreferenceProperty( sbWidth, "max", 1 );
2693 setPreferenceProperty( sbWidth, "step", 0.05 );
2695 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2696 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2697 setPreferenceProperty( sbHeight, "min", 0 );
2698 setPreferenceProperty( sbHeight, "max", 1 );
2699 setPreferenceProperty( sbHeight, "step", 0.05 );
2701 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2702 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2703 setPreferenceProperty( sbTextHeight, "min", 6 );
2704 setPreferenceProperty( sbTextHeight, "max", 24 );
2705 setPreferenceProperty( sbTextHeight, "step", 1 );
2707 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2708 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2709 setPreferenceProperty( sbNbIntervals, "min", 2 );
2710 setPreferenceProperty( sbNbIntervals, "max", 64 );
2711 setPreferenceProperty( sbNbIntervals, "step", 1 );
2713 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2714 setPreferenceProperty( originGroup, "columns", 2 );
2716 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2717 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2718 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2719 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2721 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2722 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2724 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2725 setPreferenceProperty( operationsGroup, "columns", 2 );
2727 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2728 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2730 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2731 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2733 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2735 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2737 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2738 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2740 QStringList aHierarchyTypeList;
2741 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2742 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2743 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2745 QList<QVariant> aHierarchyTypeIndexesList;
2746 aHierarchyTypeIndexesList.append(0);
2747 aHierarchyTypeIndexesList.append(1);
2748 aHierarchyTypeIndexesList.append(2);
2750 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2751 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2753 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2754 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2756 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2758 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2759 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2761 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2762 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2763 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2764 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2765 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2766 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2767 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2768 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2770 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2771 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2772 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2773 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2774 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2775 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2782 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2784 if (section == "Geometry") {
2785 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2786 if (param == QString("SettingsGeomStep")) {
2787 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2788 EmitSignalDefaultStepValueChanged(spin_step);
2790 else if (param == QString("toplevel_color")) {
2791 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2792 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2794 else if (param == QString("toplevel_dm")) {
2795 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2797 else if (param == QString("scalar_bar_x_position") ||
2798 param == QString("scalar_bar_y_position") ||
2799 param == QString("scalar_bar_width") ||
2800 param == QString("scalar_bar_height") ||
2801 param == QString("scalar_bar_text_height") ||
2802 param == QString("scalar_bar_nb_intervals")) {
2803 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2805 GEOM_Displayer aDisplayer( aStudy );
2806 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2807 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2810 else if ( param == QString("dimensions_color") ||
2811 param == QString("dimensions_line_width") ||
2812 param == QString("dimensions_font") ||
2813 param == QString("dimensions_arrow_length") ||
2814 param == QString("dimensions_show_units") ||
2815 param == QString("dimensions_length_units") ||
2816 param == QString("dimensions_angle_units") ||
2817 param == QString("dimensions_use_text3d") ||
2818 param == QString("shape_annotation_font_color") ||
2819 param == QString("shape_annotation_line_color") ||
2820 param == QString("shape_annotation_font") ||
2821 param == QString("shape_annotation_line_width") ||
2822 param == QString("shape_annotation_autohide") ||
2823 param == QString("shape_annotation_line_style") ||
2824 param == QString("shape_annotation_line_style") ||
2825 param == QString("label_color") )
2827 SalomeApp_Application* anApp = getApp();
2833 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2839 GEOM_Displayer aDisplayer( aStudy );
2841 ViewManagerList aVMs;
2842 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2843 ViewManagerList::Iterator anIt = aVMs.begin();
2844 for ( ; anIt != aVMs.end(); ++anIt )
2846 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2852 SALOME_ListIO aVisible;
2853 aViewer->GetVisible( aVisible );
2855 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2856 if ( anAnnotationMgr ) {
2857 SALOME_ListIteratorOfListIO anIter( aVisible );
2858 while ( anIter.More() ) {
2859 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2860 aVisible.Remove( anIter );
2868 aDisplayer.Redisplay( aVisible, false, aViewer );
2870 if ( param == QString( "label_color" ) ) {
2871 ViewManagerList aVMsVTK;
2872 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2873 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2874 for ( ; anIt != aVMsVTK.end(); ++anIt )
2876 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2881 SALOME_ListIO aVisible;
2882 aViewer->GetVisible( aVisible );
2883 aDisplayer.Redisplay( aVisible, false, aViewer );
2886 aDisplayer.UpdateViewer();
2888 else if ( param.startsWith( "dependency_tree") )
2889 emit SignalDependencyTreeParamChanged( section, param );
2893 LightApp_Displayer* GeometryGUI::displayer()
2896 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2900 void GeometryGUI::setLocalSelectionMode(const int mode)
2902 myLocalSelectionMode = mode;
2905 int GeometryGUI::getLocalSelectionMode() const
2907 return myLocalSelectionMode;
2910 const char gSeparator = '_'; // character used to separate parameter names
2911 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2914 * \brief Store visual parameters
2916 * This method is called just before the study document is saved.
2917 * Store visual parameters in AttributeParameter attribute(s)
2919 void GeometryGUI::storeVisualParameters (int savePoint)
2921 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2922 if ( !appStudy || !appStudy->studyDS() )
2925 _PTR(Study) studyDS = appStudy->studyDS();
2927 // componentName is used for encoding of entries when storing them in IParameters
2928 std::string componentName = myComponentGeom->ComponentDataType();
2929 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2930 //if (!aSComponent) return;
2933 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2934 componentName.c_str(),
2936 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2938 QSet<QString> anEntriesToStoreShared;
2939 QList<SUIT_ViewManager*> lst;
2940 QList<SUIT_ViewManager*>::Iterator it;
2942 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2944 // main cycle to store parameters of displayed objects
2946 getApp()->viewManagers(lst);
2947 for (it = lst.begin(); it != lst.end(); it++) {
2948 SUIT_ViewManager* vman = *it;
2949 QString vType = vman->getType();
2950 SUIT_ViewModel* vmodel = vman->getViewModel();
2951 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
2953 int aMgrId = vman->getGlobalId();
2954 // saving VTK actors properties
2955 QVector<SUIT_ViewWindow*> views = vman->getViews();
2956 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2957 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2958 ObjMap::ConstIterator o_it = anObjects.begin();
2959 for (; o_it != anObjects.end(); o_it++) {
2960 const PropMap& aProps = o_it.value();
2962 //Check that object exists in the study
2963 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2964 if ( !obj || !(aProps.count() > 0))
2966 // entry is "encoded" = it does NOT contain component adress, since it is a
2967 // subject to change on next component loading
2969 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2971 _PTR(GenericAttribute) anAttr;
2972 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2975 // remember entry of object to store shared GEOM properties
2976 // (e.g. dimension properties).
2977 if ( vType == OCCViewer_Viewer::Type() )
2979 anEntriesToStoreShared.insert( o_it.key() );
2982 QString param, occParam = vType;
2983 occParam += GEOM::sectionSeparator();
2984 occParam += QString::number(aMgrId);
2985 occParam += GEOM::sectionSeparator();
2987 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2988 param = occParam + GEOM::propertyName( GEOM::Visibility );
2989 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2992 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2993 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2994 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2997 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2998 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
3000 val << QString::number(c.redF());
3001 val << QString::number(c.greenF());
3002 val << QString::number(c.blueF());
3003 param = occParam + GEOM::propertyName( GEOM::Color );
3004 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3007 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3008 param = occParam + GEOM::propertyName( GEOM::Texture );
3009 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3012 if (vType == SVTK_Viewer::Type()) {
3013 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3014 param = occParam + GEOM::propertyName( GEOM::Opacity );
3015 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3017 } else if (vType == SOCC_Viewer::Type()) {
3018 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3019 param = occParam + GEOM::propertyName( GEOM::Transparency );
3020 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3023 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3024 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3025 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3029 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3030 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3031 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3034 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3035 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3036 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3039 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3040 param = occParam + GEOM::propertyName( GEOM::Vertices );
3041 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3044 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3045 param = occParam + GEOM::propertyName( GEOM::ShowName );
3046 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3049 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3050 param = occParam + GEOM::propertyName( GEOM::Deflection );
3051 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3054 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3055 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3056 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3057 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3060 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3061 param = occParam + GEOM::propertyName( GEOM::Material );
3062 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3065 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3066 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3067 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3070 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3071 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3072 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3075 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3076 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3077 o_it.key().toLatin1().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3078 if (!anAnnotationInfo.empty()) {
3079 param = occParam + "ShapeAnnotationVisibleItems";
3080 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3083 } // object iterator
3085 } // for (viewManagers)
3087 // store shape annotation and dimension attributes of objects:
3088 // since the displayed object always persists in property map, we remember the object entries
3089 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3090 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3091 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3092 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3093 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3095 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
3096 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3098 // store dimension parameters
3099 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
3100 if ( aDimensions.GetNumber() != 0 ) {
3101 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
3104 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3105 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3106 if ( !aShapeAnnAttr.IsNull() ) {
3107 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toLatin1().data() );
3113 * \brief Restore visual parameters
3115 * This method is called after the study document is opened.
3116 * Restore visual parameters from AttributeParameter attribute(s)
3118 void GeometryGUI::restoreVisualParameters (int savePoint)
3120 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3121 if (!appStudy || !appStudy->studyDS())
3123 _PTR(Study) studyDS = appStudy->studyDS();
3125 // componentName is used for encoding of entries when storing them in IParameters
3126 std::string componentName = myComponentGeom->ComponentDataType();
3127 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3128 //if (!aSComponent) return;
3131 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3132 componentName.c_str(),
3134 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3136 std::vector<std::string> entries = ip->getEntries();
3138 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3140 // entry is a normal entry - it should be "decoded" (setting base adress of component)
3141 QString entry (ip->decodeEntry(*entIt).c_str());
3143 // Check that the entry corresponds to a real object in the Study
3144 // as the object may be deleted or modified after the visual state is saved.
3145 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
3146 if (!so) continue; //Skip the not existent entry
3148 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3149 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3151 std::vector<std::string>::iterator namesIt = paramNames.begin();
3152 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3154 // actors are stored in a map after displaying of them for
3155 // quicker access in the future: map < viewID to actor >
3156 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3157 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3159 QString viewerTypStr;
3160 QString viewIndexStr;
3162 QVector<PropMap> aListOfMap;
3164 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3166 // visual parameters are stored in strings as follows:
3167 // 1) ViewerType_ViewIndex_ParamName
3168 // 2) ViewerType_ParamName (shared for GEOM module)
3169 // '_' is used as separator and should not be used in viewer type or parameter names.
3170 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3172 bool isShared = lst.size() == 2;
3173 bool isViewer = lst.size() == 3;
3174 if ( !isShared && !isViewer )
3179 // shared visual parameters
3182 QString aParamNameStr( lst[1] );
3183 QString aValuesStr( (*valuesIt).c_str() );
3185 // shared dimension properties are stored as attribute
3186 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3188 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3189 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3191 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3193 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3194 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3196 anAttr->ImportFromPropertyString( aValuesStr );
3202 // per view visual parameters
3203 viewerTypStr = lst[0];
3204 viewIndexStr = lst[1];
3205 QString paramNameStr = lst[2];
3208 viewIndex = viewIndexStr.toUInt(&ok);
3209 if (!ok) // bad conversion of view index to integer
3212 if ((viewIndex + 1) > aListOfMap.count()) {
3213 aListOfMap.resize(viewIndex + 1);
3216 QString val((*valuesIt).c_str());
3217 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3218 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3219 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3220 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3221 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3222 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3223 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3224 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3225 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3226 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3227 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3228 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3229 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3230 QStringList rgb = val.split(GEOM::subSectionSeparator());
3231 if (rgb.count() == 3) {
3232 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3233 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3235 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3236 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3237 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3238 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3239 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3240 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3241 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3242 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3243 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3244 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3245 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3246 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3247 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3248 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3249 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3250 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3251 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3252 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3253 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3254 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3257 } // for names/parameters iterator
3259 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3261 for (int index = 0; index < aListOfMap.count(); index++) {
3262 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3264 //Get Visibility property of the current PropMap
3265 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3266 SUIT_ViewManager* vman = lst.at(index);
3267 SUIT_ViewModel* vmodel = vman->getViewModel();
3268 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3269 displayer()->Display(entry, true, aView);
3271 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3272 PropMap& aProps = aListOfMap[index];
3273 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3274 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3275 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3280 } // for entries iterator
3282 // update all VTK and OCC views
3283 QList<SUIT_ViewManager*> lst;
3284 getApp()->viewManagers(lst);
3285 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3286 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3289 if (vmodel->getType() == SVTK_Viewer::Type()) {
3290 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3291 vtkView->getRenderer()->ResetCameraClippingRange();
3294 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3295 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3296 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3302 if ( myTextTreeWdg ) {
3303 myTextTreeWdg->updateTree();
3307 // Compute current name mode of the viewer
3308 void UpdateNameMode( SalomeApp_Application* app )
3310 bool isMode = false;
3311 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3312 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3313 GEOM_Displayer displayer( aStudy );
3314 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3316 SALOME_View* window = displayer.GetActiveView();
3317 if ( !window ) return;
3319 SALOME_ListIO anIOlst;
3320 window->GetVisible( anIOlst );
3322 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3323 Handle( SALOME_InteractiveObject ) io = It.Value();
3324 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3325 bool isIONameMode = v.isValid() ? v.toBool() : false;
3329 viewWindow->setProperty( "NameMode", isMode );
3332 void GeometryGUI::onViewAboutToShow()
3334 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3335 QAction* a = action( GEOMOp::OpSwitchVectors );
3336 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3337 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3339 a->setEnabled(true);
3340 bool vmode = window->property("VectorsMode").toBool();
3341 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3342 aVerticesAction->setEnabled(true);
3343 vmode = window->property("VerticesMode").toBool();
3344 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3345 UpdateNameMode( getApp() );
3346 aNameAction->setEnabled(true);
3347 vmode = window->property("NameMode").toBool();
3348 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3350 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3351 a->setEnabled(false);
3352 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3353 aVerticesAction->setEnabled(false);
3354 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3355 aNameAction->setEnabled(false);
3360 \brief Return action by id
3361 \param id identifier of the action
3364 QAction* GeometryGUI::getAction(const int id) {
3369 \brief GEOM module message handler
3371 This method can be re-implemented in the subclasses.
3372 This is a GEOM module message handler.
3374 \param msg the message received.
3376 void GeometryGUI::message(const QString& msg)
3379 QStringList data = msg.split("/");
3380 const int nbStrings = data.count();
3382 if (nbStrings > 0) {
3383 if (data[0] == "modified") {
3385 QString anIOR = nbStrings > 1 ? data[1] : QString();
3387 if ( anIOR.isEmpty() ) {
3391 // Get the geom object.
3392 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3394 // Clear the shape buffer
3395 GeometryGUI::ClearShapeBuffer (anObj);
3401 \brief Clears the shape buffer.
3403 This is a static method. It clears the shape buffer.
3405 \param theObj the object
3407 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3409 if ( CORBA::is_nil( theObj ) )
3412 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3413 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3414 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3416 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3421 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3426 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3430 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3431 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3432 _PTR(GenericAttribute) anAttr;
3433 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3434 _PTR(AttributeIOR) anIOR ( anAttr );
3435 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3436 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3442 \brief Returns the object from IOR.
3444 This is a static method. It returns the object from its IOR.
3446 \param IOR object IOR
3447 \return GEOM object.
3449 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3451 GEOM::GEOM_Object_var geomObj;
3452 if ( !IOR.isEmpty() ) {
3453 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3454 ( IOR.toLatin1().constData() );
3455 if ( !CORBA::is_nil( corbaObj ) )
3456 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3458 return geomObj._retn();
3462 \brief Returns IOR of the object.
3464 This is a static method. It returns the object's IOR.
3466 \param object the GEOM object.
3467 \return object's IOR.
3469 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3472 if ( !CORBA::is_nil( object ) ) {
3473 CORBA::String_var anIOR =
3474 SalomeApp_Application::orb()->object_to_string( object );
3481 \brief Check if this object is can't be renamed in place
3483 This method can be re-implemented in the subclasses.
3484 Return true in case if object isn't reference or component (module root).
3486 \param entry column id
3487 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3489 bool GeometryGUI::renameAllowed( const QString& entry) const {
3491 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3492 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3493 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3495 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3499 Rename object by entry.
3500 \param entry entry of the object
3501 \param name new name of the object
3502 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3504 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3506 bool result = false;
3508 SalomeApp_Application* app =
3509 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3510 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3515 _PTR(Study) aStudy = appStudy->studyDS();
3520 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3522 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3526 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3527 _PTR(GenericAttribute) anAttr;
3529 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3530 _PTR(AttributeName) aName (anAttr);
3532 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3533 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3534 if (!CORBA::is_nil(anObj)) {
3535 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3536 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3537 emit SignalTextTreeRenameObject( entry );
3545 void GeometryGUI::updateMaterials()
3547 LightApp_Preferences* pref = preferences();
3549 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3550 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3551 if ( !materials.contains( currentMaterial ) )
3552 // user material set as default in the preferences, might be removed
3553 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3555 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3557 setPreferenceProperty( prefItem->id(),
3558 "strings", materials );
3559 prefItem->retrieve();
3565 \brief Check if the module allows "drag" operation of its objects.
3567 Overloaded from LightApp_Module class.
3569 This function is a part of the general drag-n-drop mechanism.
3570 The goal of this function is to check data object passed as a parameter
3571 and decide if it can be dragged or no.
3573 \param what data object being tested for drag operation
3574 \return \c true if module allows dragging of the specified object
3575 \sa isDropAccepted(), dropObjects()
3577 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3579 // we allow dragging object under root and object from folder
3580 int aLevel = what->level();
3581 bool anObjectInFolder = false;
3583 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3585 _PTR(SObject) aSO = dataObj->object();
3587 _PTR(GenericAttribute) anAttr;
3588 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3589 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3590 _PTR(AttributeLocalID) aLocalID( anAttr );
3591 anObjectInFolder = aLocalID->Value() == 999;
3596 return aLevel == 2 || anObjectInFolder;
3600 \brief Check if the module allows "drop" operation on the given object.
3602 Overloaded from LightApp_Module class.
3604 This function is a part of the general drag-n-drop mechanism.
3605 The goal of this function is to check data object passed as a parameter
3606 and decide if it can be used as a target for the "drop" operation.
3607 The processing of the drop operation itself is done in the dropObjects() function.
3609 \param where target data object
3610 \return \c true if module supports dropping on the \a where data object
3611 \sa isDraggable(), dropObjects()
3613 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3615 // we allow dropping into folder and top-level GEOM object
3616 int aLevel = where->level();
3617 bool isFolder = false;
3619 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3621 _PTR(SObject) aSO = dataObj->object();
3623 _PTR(GenericAttribute) anAttr;
3624 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3625 _PTR(AttributeLocalID) aLocalID( anAttr );
3626 isFolder = aLocalID->Value() == 999;
3631 return aLevel == 1 || isFolder;
3635 \brief Complete drag-n-drop operation.
3637 Overloaded from LightApp_Module class.
3639 This function is a part of the general drag-n-drop mechanism.
3640 Its goal is to handle dropping of the objects being dragged according
3641 to the chosen operation (move). The dropping is performed in the
3642 context of the parent data object \a where and the \a row (position in the
3643 children index) at which the data should be dropped. If \a row is equal to -1,
3644 this means that objects are added to the end of the children list.
3646 \param what objects being dropped
3647 \param where target data object
3648 \param row child index at which the drop operation is performed
3649 \param action drag-n-drop operation (Qt::DropAction) - move
3651 \sa isDraggable(), isDropAccepted()
3653 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3654 const int row, Qt::DropAction action )
3656 if (action != Qt::CopyAction && action != Qt::MoveAction)
3657 return; // unsupported action
3659 // get parent object
3660 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3661 if ( !dataObj ) return; // wrong parent
3662 _PTR(SObject) parentObj = dataObj->object();
3664 // Find the current Study and StudyBuilder
3665 _PTR(Study) aStudy = parentObj->GetStudy();
3666 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3667 // collect all parents of the target node
3668 QStringList parentIDs;
3669 _PTR(SObject) parent = parentObj;
3670 while( !parent->IsNull() ) {
3671 parentIDs << parent->GetID().c_str();
3672 parent = aUseCaseBuilder->GetFather(parent);
3675 // collect objects being dropped
3676 GEOM::object_list_var objects = new GEOM::object_list();
3677 objects->length( what.count() );
3679 for ( int i = 0; i < what.count(); i++ ) {
3680 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3681 if ( !dataObj ) continue; // skip wrong objects
3682 _PTR(SObject) sobj = dataObj->object();
3683 // check that dropped object is not a parent of target object
3684 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3685 return; // it's not allowed to move node into it's child
3687 objects[i] = _CAST(SObject, sobj)->GetSObject();
3690 objects->length( count );
3692 // call engine function
3693 GetGeomGen()->Move( objects.in(), // what
3694 _CAST(SObject, parentObj)->GetSObject(), // where
3697 // update Object browser
3698 getApp()->updateObjectBrowser( false );
3701 void GeometryGUI::emitDimensionsUpdated( QString entry )
3703 emit DimensionsUpdated( entry );
3706 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3708 emit SignalAnnotationsUpdated( entry );