1 // Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_XmlHandler.h"
34 #include "GEOMGUI_OCCSelector.h"
35 #include "GEOMGUI_Selection.h"
36 #include "GEOMGUI_CreationInfoWdg.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
41 #include "GEOM_Actor.h"
43 #include <Material_ResourceMgr.h>
44 #include <Material_Model.h>
46 #include <SUIT_Desktop.h>
47 #include <SUIT_MessageBox.h>
48 #include <SUIT_ResourceMgr.h>
49 #include <SUIT_Session.h>
50 #include <SUIT_ViewManager.h>
52 #include <PyInterp_Interp.h>
54 #include <OCCViewer_ViewWindow.h>
55 #include <OCCViewer_ViewPort3d.h>
56 #include <OCCViewer_ViewModel.h>
57 #include <OCCViewer_ViewManager.h>
59 #include <SOCC_ViewModel.h>
60 #include <SOCC_ViewWindow.h>
62 #include <SVTK_ViewWindow.h>
63 #include <SVTK_RenderWindowInteractor.h>
64 #include <SVTK_InteractorStyle.h>
65 #include <SVTK_ViewModel.h>
67 #include <SalomeApp_Application.h>
68 #include <SalomeApp_DataObject.h>
69 #include <SalomeApp_Study.h>
70 #include <SalomeApp_Tools.h>
72 #include <LightApp_SelectionMgr.h>
73 #include <LightApp_VTKSelector.h>
74 #include <LightApp_DataObject.h>
75 #include <LightApp_Preferences.h>
77 #include <SALOME_LifeCycleCORBA.hxx>
78 #include <SALOME_ListIO.hxx>
79 #include <SALOME_ListIteratorOfListIO.hxx>
81 #include <SALOMEDSClient_ClientFactory.hxx>
82 #include <SALOMEDSClient_IParameters.hxx>
84 #include <SALOMEDS_SObject.hxx>
86 #include <Basics_OCCTVersion.hxx>
96 #include <QSignalMapper>
98 #include <AIS_Drawer.hxx>
99 #include <AIS_ListOfInteractive.hxx>
100 #include <AIS_ListIteratorOfListOfInteractive.hxx>
101 #include <Prs3d_Drawer.hxx>
102 #include <Prs3d_IsoAspect.hxx>
103 #include <Aspect_TypeOfMarker.hxx>
104 #include <OSD_SharedLibrary.hxx>
105 #include <NCollection_DataMap.hxx>
107 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
108 #include <TColStd_HArray1OfByte.hxx>
110 #include <Graphic3d_HArray1OfBytes.hxx>
113 #include <utilities.h>
115 #include <vtkCamera.h>
116 #include <vtkRenderer.h>
118 #include <Standard_Failure.hxx>
119 #include <Standard_ErrorHandler.hxx>
121 #include "GEOM_version.h"
122 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
125 Standard_EXPORT CAM_Module* createModule() {
126 return new GeometryGUI();
129 Standard_EXPORT char* getModuleVersion() {
130 return (char*)GEOM_VERSION_STR;
134 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
136 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
138 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
140 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
141 if (CORBA::is_nil(myComponentGeom))
143 return GeometryGUI::myComponentGeom;
146 bool GeometryGUI::InitGeomGen()
149 if ( CORBA::is_nil( myComponentGeom ) ) return false;
153 //=======================================================================
154 // function : ClientSObjectToObject
156 //=======================================================================
157 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
159 _PTR(GenericAttribute) anAttr;
160 CORBA::Object_var anObj;
162 std::string aValue = theSObject->GetIOR();
163 if (strcmp(aValue.c_str(), "") != 0) {
164 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
165 anObj = anORB->string_to_object(aValue.c_str());
168 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
170 return anObj._retn();
173 //=======================================================================
174 // function : ClientStudyToStudy
176 //=======================================================================
177 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
179 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
180 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
181 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
182 int aStudyID = theStudy->StudyId();
183 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
184 return aDSStudy._retn();
187 void GeometryGUI::Modified (bool theIsUpdateActions)
189 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
190 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
191 appStudy->Modified();
192 if ( theIsUpdateActions )
193 app->updateActions();
198 //=======================================================================
199 // function : GeometryGUI::GeometryGUI()
200 // purpose : Constructor
201 //=======================================================================
202 GeometryGUI::GeometryGUI() :
203 SalomeApp_Module( "GEOM" )
205 if ( CORBA::is_nil( myComponentGeom ) )
207 Engines::EngineComponent_var comp =
208 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
209 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
212 myActiveDialogBox = 0;
214 gp_Pnt origin = gp_Pnt(0., 0., 0.);
215 gp_Dir direction = gp_Dir(0., 0., 1.);
216 myWorkingPlane = gp_Ax3(origin, direction);
219 myLocalSelectionMode = GEOM_ALLOBJECTS;
221 myCreationInfoWdg = 0;
223 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
226 //=======================================================================
227 // function : GeometryGUI::~GeometryGUI()
228 // purpose : Destructor
229 //=======================================================================
230 GeometryGUI::~GeometryGUI()
232 while (!myOCCSelectors.isEmpty())
233 delete myOCCSelectors.takeFirst();
235 while (!myVTKSelectors.isEmpty())
236 delete myVTKSelectors.takeFirst();
238 qDeleteAll(myGUIMap);
241 //=======================================================================
242 // function : GeometryGUI::getLibrary()
243 // purpose : get or load GUI library by name [ internal ]
244 //=======================================================================
245 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
246 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
248 if ( !myGUIMap.contains( libraryName ) ) {
249 // try to load library if it is not loaded yet
251 QString dirs = getenv( "LD_LIBRARY_PATH" );
254 QString dirs = getenv( "PATH" );
257 if ( !dirs.isEmpty() ) {
258 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
259 QListIterator<QString> it( dirList ); it.toBack();
260 while ( it.hasPrevious() ) {
261 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
263 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
264 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
266 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
267 continue; // continue search further
269 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
270 if ( osdF != NULL ) {
271 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
272 GEOMGUI* libGUI = (*func)( this );
274 myGUIMap[ libraryName ] = libGUI;
275 break; // found and loaded!
282 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
285 //=======================================================================
286 // function : GeometryGUI::getPluginLibrary()
287 // purpose : get or load GUI Plugin library by name [ internal ]
288 //=======================================================================
289 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
290 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
292 if ( !myGUIMap.contains( libraryName ) ) {
293 // try to load library if it is not loaded yet
295 QString dirs = getenv( "LD_LIBRARY_PATH" );
298 QString dirs = getenv( "PATH" );
301 if ( !dirs.isEmpty() ) {
302 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
303 QListIterator<QString> it( dirList ); it.toBack();
304 while ( it.hasPrevious() ) {
305 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
307 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
308 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
310 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
311 continue; // continue search further
313 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
314 if ( osdF != NULL ) {
315 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
316 GEOMPluginGUI* libGUI = (*func)( this );
318 myGUIMap[ libraryName ] = libGUI;
319 break; // found and loaded!
326 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
329 //=======================================================================
330 // function : GeometryGUI::ActiveWorkingPlane()
331 // purpose : Activate Working Plane View
332 //=======================================================================
333 void GeometryGUI::ActiveWorkingPlane()
335 gp_Dir DZ = myWorkingPlane.Direction();
336 gp_Dir DY = myWorkingPlane.YDirection();
338 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
339 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
340 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
343 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
345 Handle(V3d_View) view3d = vw->getViewPort()->getView();
347 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
348 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
352 else if ( ViewVTK ) {
353 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
355 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
357 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
358 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
359 camera->SetFocalPoint(0,0,0);
366 //=======================================================================
367 // function : GeometryGUI::SetActiveDialogBox()
368 // purpose : Set active dialog box
369 //=======================================================================
370 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
372 myActiveDialogBox = (QDialog*)aDlg;
375 //=======================================================================
376 // function : GeometryGUI::EmitSignalDeactivateDialog()
377 // purpose : Emit a signal to deactivate the active dialog Box
378 //=======================================================================
379 void GeometryGUI::EmitSignalDeactivateDialog()
381 emit SignalDeactivateActiveDialog();
384 //=======================================================================
385 // function : GeometryGUI::EmitSignalCloseAllDialogs()
386 // purpose : Emit a signal to close all non modal dialogs box
387 //=======================================================================
388 void GeometryGUI::EmitSignalCloseAllDialogs()
390 emit SignalCloseAllDialogs();
393 //=======================================================================
394 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
395 // purpose : Emit a signal to inform that default real spin box step has
397 //=======================================================================
398 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
400 emit SignalDefaultStepValueChanged(newVal);
403 //=======================================================================
404 // function : GeometryGUI::OnGUIEvent()
405 // purpose : common slot for all menu/toolbar actions
406 //=======================================================================
407 void GeometryGUI::OnGUIEvent()
409 const QObject* obj = sender();
410 if ( !obj || !obj->inherits( "QAction" ) )
412 int id = actionId((QAction*)obj);
417 //=======================================================================
418 // function : GeometryGUI::OnGUIEvent()
419 // purpose : manage all events on GUI [static]
420 //=======================================================================
421 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
423 SUIT_Application* anApp = application();
425 SUIT_Desktop* desk = anApp->desktop();
427 // check type of the active viewframe
428 SUIT_ViewWindow* window = desk->activeWindow();
429 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
430 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
431 // if current viewframe is not of OCC and not of VTK type - return immediately
432 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
433 QList<int> NotViewerDependentCommands;
434 NotViewerDependentCommands << GEOMOp::OpDelete
436 << GEOMOp::OpShowOnly
437 << GEOMOp::OpShowOnlyChildren
438 << GEOMOp::OpDiscloseChildren
439 << GEOMOp::OpConcealChildren
440 << GEOMOp::OpUnpublishObject
441 << GEOMOp::OpPublishObject
442 << GEOMOp::OpPointMarker
443 << GEOMOp::OpCreateFolder
444 << GEOMOp::OpSortChildren;
445 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) {
446 // activate OCC viewer
447 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
450 // fix for IPAL9103, point 2
451 if ( CORBA::is_nil( GetGeomGen() ) ) {
452 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
457 // find corresponding GUI library
459 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
460 createOriginAndBaseVectors(); // internal operation
462 case GEOMOp::OpImport: // MENU FILE - IMPORT
463 case GEOMOp::OpExport: // MENU FILE - EXPORT
464 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
465 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
466 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
467 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
468 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
469 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
470 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
471 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
472 case GEOMOp::OpDelete: // MENU EDIT - DELETE
473 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
474 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
475 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
476 case GEOMOp::OpColor: // POPUP MENU - COLOR
477 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
478 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
479 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
480 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
481 case GEOMOp::OpIsos: // POPUP MENU - ISOS
482 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
483 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
484 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
485 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
486 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
487 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
488 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
489 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
490 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
491 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
492 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
493 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
494 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
495 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
496 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
497 case GEOMOp::OpClsBringToFront: //
498 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
499 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
500 libName = "GEOMToolsGUI";
502 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
503 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
504 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
505 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
506 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
507 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
508 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
509 case GEOMOp::OpHide: // MENU VIEW - ERASE
510 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
511 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
512 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
513 case GEOMOp::OpShading: // POPUP MENU - SHADING
514 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
515 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
516 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
517 libName = "DisplayGUI";
519 case GEOMOp::OpPoint: // MENU BASIC - POINT
520 case GEOMOp::OpLine: // MENU BASIC - LINE
521 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
522 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
523 case GEOMOp::OpArc: // MENU BASIC - ARC
524 case GEOMOp::OpVector: // MENU BASIC - VECTOR
525 case GEOMOp::OpPlane: // MENU BASIC - PLANE
526 case GEOMOp::OpCurve: // MENU BASIC - CURVE
527 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
528 libName = "BasicGUI";
530 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
531 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
532 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
533 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
534 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
535 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
536 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
537 libName = "PrimitiveGUI";
539 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
540 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
541 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
542 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
543 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
544 libName = "GenerationGUI";
546 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
547 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
548 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
549 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
551 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
553 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
554 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
555 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
556 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
557 libName = "EntityGUI";
559 case GEOMOp::OpEdge: // MENU BUILD - EDGE
560 case GEOMOp::OpWire: // MENU BUILD - WIRE
561 case GEOMOp::OpFace: // MENU BUILD - FACE
562 case GEOMOp::OpShell: // MENU BUILD - SHELL
563 case GEOMOp::OpSolid: // MENU BUILD - SOLID
564 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
565 libName = "BuildGUI";
567 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
568 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
569 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
570 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
571 libName = "BooleanGUI";
573 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
574 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
575 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
576 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
577 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
578 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
579 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
580 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
581 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
582 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
583 libName = "TransformationGUI";
585 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
586 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
587 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
588 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
589 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
590 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
591 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
592 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
593 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
594 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
595 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
596 #ifdef DEBUG_CURVE_CREATOR
597 // for debug purposes, to be removed
598 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
600 libName = "OperationGUI";
602 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
603 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
604 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
605 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
606 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
607 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
608 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
609 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
610 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
611 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
612 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
613 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
614 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
615 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
616 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
617 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
618 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
619 libName = "RepairGUI";
621 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
622 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
623 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
624 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
625 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
626 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
627 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
628 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
629 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
630 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
631 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
632 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
633 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
634 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
635 libName = "MeasureGUI";
637 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
638 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
639 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
640 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
641 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
642 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
643 libName = "GroupGUI";
645 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
646 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
647 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
648 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
649 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
650 libName = "BlocksGUI";
652 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
653 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
654 libName = "ImportExportGUI";
656 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
657 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
658 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
659 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
660 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
661 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
662 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
663 //libName = "AdvancedGUI";
666 if (myPluginActions.contains(id)) {
667 libName = myPluginActions[id].first;
669 GEOMPluginGUI* library = 0;
670 if ( !libName.isEmpty() ) {
672 libName = QString( "lib" ) + libName + ".so";
674 libName = libName + ".dll";
676 library = getPluginLibrary( libName );
679 // call method of corresponding GUI library
681 //QString action ("%1");
682 //action = action.arg(id);
684 //if( !theParam.isValid() )
685 library->OnGUIEvent( myPluginActions[id].second, desk );
687 // library->OnGUIEvent( id, desk, theParam);
690 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
692 updateCreationInfo();
698 GEOMGUI* library = 0;
699 if ( !libName.isEmpty() ) {
701 libName = QString( "lib" ) + libName + ".so";
703 libName = libName + ".dll";
705 library = getLibrary( libName );
708 // call method of corresponding GUI library
710 if( !theParam.isValid() )
711 library->OnGUIEvent( id, desk );
713 library->OnGUIEvent( id, desk, theParam);
716 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
718 updateCreationInfo();
721 //=================================================================================
722 // function : GeometryGUI::activateOperation()
724 //=================================================================================
725 bool GeometryGUI::activateOperation( int actionId )
727 OnGUIEvent(actionId);
731 //=================================================================================
732 // function : GeometryGUI::activateOperation()
734 //=================================================================================
735 bool GeometryGUI::activateOperation( const QString& actionId )
739 int id = actionId.toInt(&isOk);
746 //=================================================================================
747 // function : GeometryGUI::activateOperation()
749 //=================================================================================
750 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
754 QString pluginLib = plugin;
755 // TODO: if <plugin> is a plugin name, find plugin library name
756 if (myPluginLibs.contains(plugin))
757 pluginLib = myPluginLibs[plugin];
759 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
760 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
761 const PluginAction& anAction = actionsIter.value();
762 if (anAction.first == pluginLib && anAction.second == actionId) {
763 // activate operation
764 OnGUIEvent(actionsIter.key());
772 //=================================================================================
773 // function : GeometryGUI::OnKeyPress()
774 // purpose : Called when any key is pressed by user [static]
775 //=================================================================================
776 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
778 if ( !application() )
780 foreach ( GEOMGUI* lib, myGUIMap )
781 lib->OnKeyPress( e, application()->desktop(), w );
784 //=================================================================================
785 // function : GeometryGUI::OnMouseMove()
786 // purpose : Manages mouse move events [static]
787 //=================================================================================
788 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
790 if ( !application() )
792 foreach ( GEOMGUI* lib, myGUIMap )
793 lib->OnMouseMove( e, application()->desktop(), w );
796 //=================================================================================
797 // function : GeometryGUI::OnMouseRelease()
798 // purpose : Manages mouse release events [static]
799 //=================================================================================
800 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
802 if ( !application() )
804 foreach ( GEOMGUI* lib, myGUIMap )
805 lib->OnMouseRelease( e, application()->desktop(), w );
808 //=================================================================================
809 // function : GeometryGUI::OnMousePress()
810 // purpose : Manage mouse press events [static]
811 //=================================================================================
812 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
814 if ( !application() )
816 foreach ( GEOMGUI* lib, myGUIMap )
817 lib->OnMousePress( e, application()->desktop(), w );
820 //=======================================================================
821 // function : createGeomAction
823 //=======================================================================
824 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
825 const int accel, const bool toggle, const QString& shortcutAction )
827 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
828 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
829 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
831 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
833 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
834 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
836 application()->desktop(),
838 this, SLOT( OnGUIEvent() ),
842 //=======================================================================
843 // function : createOriginAndBaseVectors
845 //=======================================================================
846 void GeometryGUI::createOriginAndBaseVectors()
848 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
850 _PTR(Study) studyDS = appStudy->studyDS();
851 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
852 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
853 if ( !aBasicOperations->_is_nil() ) {
854 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
855 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
856 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
857 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
858 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
859 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
861 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
862 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
863 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
864 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
865 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
867 getApp()->updateObjectBrowser( true );
873 //=======================================================================
874 // function : GeometryGUI::initialize()
875 // purpose : Called when GEOM module is created
876 //=======================================================================
877 void GeometryGUI::initialize( CAM_Application* app )
879 SalomeApp_Module::initialize( app );
881 // ----- create actions --------------
883 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
884 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
886 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
888 createGeomAction( GEOMOp::OpPoint, "POINT" );
889 createGeomAction( GEOMOp::OpLine, "LINE" );
890 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
891 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
892 createGeomAction( GEOMOp::OpArc, "ARC" );
893 createGeomAction( GEOMOp::OpCurve, "CURVE" );
894 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
895 createGeomAction( GEOMOp::OpVector, "VECTOR" );
896 createGeomAction( GEOMOp::OpPlane, "PLANE" );
897 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
898 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
900 createGeomAction( GEOMOp::OpBox, "BOX" );
901 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
902 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
903 createGeomAction( GEOMOp::OpTorus, "TORUS" );
904 createGeomAction( GEOMOp::OpCone, "CONE" );
905 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
906 createGeomAction( GEOMOp::OpDisk, "DISK" );
908 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
909 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
910 createGeomAction( GEOMOp::OpFilling, "FILLING" );
911 createGeomAction( GEOMOp::OpPipe, "PIPE" );
912 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
914 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
915 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
916 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
917 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
918 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
920 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
921 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
923 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
925 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
926 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
928 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
929 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
930 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
931 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
933 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
935 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
937 createGeomAction( GEOMOp::OpEdge, "EDGE" );
938 createGeomAction( GEOMOp::OpWire, "WIRE" );
939 createGeomAction( GEOMOp::OpFace, "FACE" );
940 createGeomAction( GEOMOp::OpShell, "SHELL" );
941 createGeomAction( GEOMOp::OpSolid, "SOLID" );
942 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
944 createGeomAction( GEOMOp::OpFuse, "FUSE" );
945 createGeomAction( GEOMOp::OpCommon, "COMMON" );
946 createGeomAction( GEOMOp::OpCut, "CUT" );
947 createGeomAction( GEOMOp::OpSection, "SECTION" );
949 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
950 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
951 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
952 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
953 createGeomAction( GEOMOp::OpScale, "SCALE" );
954 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
955 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
956 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
957 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
959 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
960 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
961 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
962 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
963 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
964 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
965 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
966 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
967 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
968 #ifdef DEBUG_CURVE_CREATOR
969 // for debug purposes, to be removed
970 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
972 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
973 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
975 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
976 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
977 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
979 createGeomAction( GEOMOp::OpSewing, "SEWING" );
980 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
981 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
982 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
983 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
984 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
985 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
986 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
987 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
988 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
989 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
990 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
991 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
992 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
993 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
994 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
995 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
997 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
998 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
999 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1000 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1001 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1002 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1003 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1004 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1006 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1007 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1008 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1009 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1010 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1011 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1013 #ifdef _DEBUG_ // PAL16821
1014 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1017 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1018 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1019 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1020 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1021 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1022 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1023 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1024 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1025 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1026 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1027 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1028 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1029 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1030 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1031 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1032 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1033 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1034 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1035 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1036 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1037 createGeomAction( GEOMOp::OpHide, "ERASE" );
1039 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1040 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1041 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1042 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1043 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1044 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1045 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1046 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1047 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1048 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1049 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1050 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1051 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1052 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1053 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1054 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1055 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1056 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1057 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1058 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1059 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1060 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1061 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1062 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1063 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1065 // Create actions for increase/decrease transparency shortcuts
1066 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1067 "Geometry:Increase transparency");
1068 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1069 "Geometry:Decrease transparency");
1071 // Create actions for increase/decrease number of isolines
1072 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1073 "Geometry:Increase number of isolines");
1074 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1075 "Geometry:Decrease number of isolines");
1077 // Import/Export XAO
1078 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1079 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1081 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1082 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1083 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1084 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1085 //@@ 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 @@//
1087 // ---- create menus --------------------------
1089 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1090 createMenu( separator(), fileId, 10 );
1091 createMenu( GEOMOp::OpImport, fileId, 10 );
1092 createMenu( GEOMOp::OpExport, fileId, 10 );
1093 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1094 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1095 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1096 createMenu( separator(), fileId, -1 );
1098 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1099 createMenu( GEOMOp::OpDelete, editId, -1 );
1101 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1103 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1104 createMenu( GEOMOp::OpPoint, basicId, -1 );
1105 createMenu( GEOMOp::OpLine, basicId, -1 );
1106 createMenu( GEOMOp::OpCircle, basicId, -1 );
1107 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1108 createMenu( GEOMOp::OpArc, basicId, -1 );
1109 createMenu( GEOMOp::OpCurve, basicId, -1 );
1110 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1111 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1112 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1113 createMenu( separator(), basicId, -1 );
1114 createMenu( GEOMOp::OpVector, basicId, -1 );
1115 createMenu( GEOMOp::OpPlane, basicId, -1 );
1116 createMenu( GEOMOp::OpLCS, basicId, -1 );
1117 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1119 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1120 createMenu( GEOMOp::OpBox, primId, -1 );
1121 createMenu( GEOMOp::OpCylinder, primId, -1 );
1122 createMenu( GEOMOp::OpSphere, primId, -1 );
1123 createMenu( GEOMOp::OpTorus, primId, -1 );
1124 createMenu( GEOMOp::OpCone, primId, -1 );
1125 createMenu( GEOMOp::OpRectangle, primId, -1 );
1126 createMenu( GEOMOp::OpDisk, primId, -1 );
1127 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1129 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1130 createMenu( GEOMOp::OpPrism, genId, -1 );
1131 createMenu( GEOMOp::OpRevolution, genId, -1 );
1132 createMenu( GEOMOp::OpFilling, genId, -1 );
1133 createMenu( GEOMOp::OpPipe, genId, -1 );
1134 #if OCC_VERSION_LARGE > 0x06050300
1135 createMenu( GEOMOp::OpPipePath, genId, -1 );
1138 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1139 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1140 //@@ 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 @@//
1142 createMenu( separator(), newEntId, -1 );
1144 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1145 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1146 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1147 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1148 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1149 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1151 createMenu( separator(), newEntId, -1 );
1153 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1154 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1155 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1157 createMenu( separator(), newEntId, -1 );
1159 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1160 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1161 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1162 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1163 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1165 createMenu( separator(), newEntId, -1 );
1167 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1169 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1170 createMenu( GEOMOp::OpEdge, buildId, -1 );
1171 createMenu( GEOMOp::OpWire, buildId, -1 );
1172 createMenu( GEOMOp::OpFace, buildId, -1 );
1173 createMenu( GEOMOp::OpShell, buildId, -1 );
1174 createMenu( GEOMOp::OpSolid, buildId, -1 );
1175 createMenu( GEOMOp::OpCompound, buildId, -1 );
1177 createMenu( separator(), newEntId, -1 );
1179 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1181 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1184 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1186 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1187 createMenu( GEOMOp::OpFuse, boolId, -1 );
1188 createMenu( GEOMOp::OpCommon, boolId, -1 );
1189 createMenu( GEOMOp::OpCut, boolId, -1 );
1190 createMenu( GEOMOp::OpSection, boolId, -1 );
1192 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1193 createMenu( GEOMOp::OpTranslate, transId, -1 );
1194 createMenu( GEOMOp::OpRotate, transId, -1 );
1195 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1196 createMenu( GEOMOp::OpMirror, transId, -1 );
1197 createMenu( GEOMOp::OpScale, transId, -1 );
1198 createMenu( GEOMOp::OpOffset, transId, -1 );
1199 createMenu( GEOMOp::OpProjection, transId, -1 );
1200 createMenu( separator(), transId, -1 );
1201 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1202 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1204 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1205 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1206 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1207 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1209 createMenu( separator(), operId, -1 );
1211 createMenu( GEOMOp::OpPartition, operId, -1 );
1212 createMenu( GEOMOp::OpArchimede, operId, -1 );
1213 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1214 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1216 createMenu( separator(), operId, -1 );
1218 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1219 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1220 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1221 createMenu( GEOMOp::OpChamfer, operId, -1 );
1222 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1223 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1224 #ifdef DEBUG_CURVE_CREATOR
1225 // for debug purposes, to be removed
1226 createMenu( separator(), operId, -1 );
1227 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1229 //createMenu( GEOMOp::OpClipping, operId, -1 );
1231 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1232 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1233 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1234 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1235 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1236 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1237 createMenu( GEOMOp::OpSewing, repairId, -1 );
1238 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1239 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1240 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1241 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1242 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1243 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1244 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1245 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1246 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1247 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1248 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1250 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1251 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1252 createMenu( GEOMOp::OpProperties, measurId, -1 );
1253 createMenu( separator(), measurId, -1 );
1254 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1255 createMenu( GEOMOp::OpInertia, measurId, -1 );
1256 createMenu( GEOMOp::OpNormale, measurId, -1 );
1257 createMenu( separator(), measurId, -1 );
1258 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1259 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1260 createMenu( separator(), measurId, -1 );
1262 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1263 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1264 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1265 createMenu( GEOMOp::OpAngle, dimId, -1 );
1267 createMenu( separator(), measurId, -1 );
1268 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1269 createMenu( separator(), measurId, -1 );
1270 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1271 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1272 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1273 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1274 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1276 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1277 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1278 createMenu( separator(), toolsId, -1 );
1279 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1282 createMenu( separator(), toolsId, -1 );
1283 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1284 createMenu( separator(), toolsId, -1 );
1286 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1287 createMenu( separator(), viewId, -1 );
1289 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1290 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1291 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1292 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1293 createMenu( separator(), dispmodeId, -1 );
1294 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1296 createMenu( separator(), viewId, -1 );
1297 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1298 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1299 createMenu( separator(), viewId, -1 );
1300 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1301 createMenu( separator(), viewId, -1 );
1305 because of these items are accessible through object browser and viewers
1306 we have removed they from main menu
1308 createMenu( GEOMOp::OpShow, viewId, -1 );
1309 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1310 createMenu( GEOMOp::OpHide, viewId, -1 );
1313 // ---- create toolbars --------------------------
1315 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1316 createTool( GEOMOp::OpPoint, basicTbId );
1317 createTool( GEOMOp::OpLine, basicTbId );
1318 createTool( GEOMOp::OpCircle, basicTbId );
1319 createTool( GEOMOp::OpEllipse, basicTbId );
1320 createTool( GEOMOp::OpArc, basicTbId );
1321 createTool( GEOMOp::OpCurve, basicTbId );
1322 createTool( GEOMOp::OpVector, basicTbId );
1323 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1324 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1325 createTool( GEOMOp::OpIsoline, basicTbId );
1326 createTool( GEOMOp::OpPlane, basicTbId );
1327 createTool( GEOMOp::OpLCS, basicTbId );
1328 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1330 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1331 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1332 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1334 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1335 createTool( GEOMOp::OpBox, primTbId );
1336 createTool( GEOMOp::OpCylinder, primTbId );
1337 createTool( GEOMOp::OpSphere, primTbId );
1338 createTool( GEOMOp::OpTorus, primTbId );
1339 createTool( GEOMOp::OpCone, primTbId );
1340 createTool( GEOMOp::OpRectangle, primTbId );
1341 createTool( GEOMOp::OpDisk, primTbId );
1342 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1344 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1345 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1346 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1348 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1349 createTool( GEOMOp::OpFuse, boolTbId );
1350 createTool( GEOMOp::OpCommon, boolTbId );
1351 createTool( GEOMOp::OpCut, boolTbId );
1352 createTool( GEOMOp::OpSection, boolTbId );
1354 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1355 createTool( GEOMOp::OpPrism, genTbId );
1356 createTool( GEOMOp::OpRevolution, genTbId );
1357 createTool( GEOMOp::OpFilling, genTbId );
1358 createTool( GEOMOp::OpPipe, genTbId );
1359 #if OCC_VERSION_LARGE > 0x06050300
1360 createTool( GEOMOp::OpPipePath, genTbId );
1363 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1364 createTool( GEOMOp::OpTranslate, transTbId );
1365 createTool( GEOMOp::OpRotate, transTbId );
1366 createTool( GEOMOp::OpChangeLoc, transTbId );
1367 createTool( GEOMOp::OpMirror, transTbId );
1368 createTool( GEOMOp::OpScale, transTbId );
1369 createTool( GEOMOp::OpOffset, transTbId );
1370 createTool( GEOMOp::OpProjection, transTbId );
1371 createTool( separator(), transTbId );
1372 createTool( GEOMOp::OpMultiTranslate, transTbId );
1373 createTool( GEOMOp::OpMultiRotate, transTbId );
1375 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1376 createTool( GEOMOp::OpExplode, operTbId );
1377 createTool( GEOMOp::OpPartition, operTbId );
1378 createTool( GEOMOp::OpArchimede, operTbId );
1379 createTool( GEOMOp::OpShapesOnShape, operTbId );
1380 createTool( GEOMOp::OpSharedShapes, operTbId );
1382 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1383 createTool( GEOMOp::OpFillet1d, featTbId );
1384 createTool( GEOMOp::OpFillet2d, featTbId );
1385 createTool( GEOMOp::OpFillet3d, featTbId );
1386 createTool( GEOMOp::OpChamfer, featTbId );
1387 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1388 createTool( GEOMOp::OpExtrudedCut, featTbId );
1389 #ifdef DEBUG_CURVE_CREATOR
1390 // for debug purposes, to be removed
1391 createTool( GEOMOp::OpCurveCreator, featTbId );
1394 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1395 createTool( GEOMOp::OpEdge, buildTbId );
1396 createTool( GEOMOp::OpWire, buildTbId );
1397 createTool( GEOMOp::OpFace, buildTbId );
1398 createTool( GEOMOp::OpShell, buildTbId );
1399 createTool( GEOMOp::OpSolid, buildTbId );
1400 createTool( GEOMOp::OpCompound, buildTbId );
1402 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1403 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1404 createTool( GEOMOp::OpProperties, measureTbId );
1405 createTool( GEOMOp::OpCenterMass, measureTbId );
1406 createTool( GEOMOp::OpInertia, measureTbId );
1407 createTool( GEOMOp::OpNormale, measureTbId );
1408 createTool( separator(), measureTbId );
1409 createTool( GEOMOp::OpBoundingBox, measureTbId );
1410 createTool( GEOMOp::OpMinDistance, measureTbId );
1411 createTool( GEOMOp::OpAngle, measureTbId );
1412 createTool( GEOMOp::OpTolerance , measureTbId );
1413 createTool( separator(), measureTbId );
1414 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1415 createTool( GEOMOp::OpFreeFaces, measureTbId );
1416 createTool( separator(), measureTbId );
1417 createTool( GEOMOp::OpWhatIs, measureTbId );
1418 createTool( GEOMOp::OpCheckShape, measureTbId );
1419 createTool( GEOMOp::OpCheckCompound, measureTbId );
1420 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1421 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1423 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1424 createTool( GEOMOp::OpPictureImport, picturesTbId );
1426 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1429 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1430 createTool( GEOMOp::OpExportXAO, impexpTbId );
1431 createTool( GEOMOp::OpImportXAO, impexpTbId );
1433 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1434 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1435 //@@ 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 @@//
1437 // ---- create popup menus --------------------------
1439 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1440 QString clientOCC = "(client='OCCViewer')";
1441 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1442 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1444 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1445 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1446 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1447 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1449 QString autoColorPrefix =
1450 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1452 QtxPopupMgr* mgr = popupMgr();
1454 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1455 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1456 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1457 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1458 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1459 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1460 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1461 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1463 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1464 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1465 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1466 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1467 mgr->insert( separator(), -1, -1 ); // -----------
1469 #if OCC_VERSION_LARGE > 0x06050200
1470 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1471 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1472 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1473 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1474 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1475 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1476 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1478 mgr->insert( separator(), -1, -1 ); // -----------
1479 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1480 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1481 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1482 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1483 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1484 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1485 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1486 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1487 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1488 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1489 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1490 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1491 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1492 mgr->insert( separator(), dispmodeId, -1 );
1493 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1494 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1495 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1496 mgr->insert( separator(), -1, -1 ); // -----------
1498 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1499 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1500 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1501 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1502 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1503 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1504 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1505 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1506 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1507 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1508 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1510 // material properties
1511 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1512 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1516 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1519 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1520 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1523 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1525 mgr->insert( separator(), -1, -1 ); // -----------
1526 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1527 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1528 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1529 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1530 mgr->insert( separator(), -1, -1 ); // -----------
1532 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1533 onlyComponent = "((type='Component') and selcount=1)",
1534 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1535 types = "'Shape' 'Group' 'FieldStep'";
1537 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1538 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1540 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1541 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1543 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1544 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1546 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1548 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1549 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1550 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1551 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1552 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1553 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1554 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1555 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1556 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1557 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1558 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1559 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1560 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1561 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1562 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1563 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1564 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1565 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1566 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1567 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1568 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1569 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1570 mgr->insert( separator(), selectonlyId, -1);
1571 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1572 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1573 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1574 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1575 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1576 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1577 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1579 mgr->insert( separator(), -1, -1 ); // -----------
1580 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1581 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1583 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1584 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1586 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1587 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1589 mgr->insert( separator(), -1, -1 ); // -----------
1590 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1591 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1593 mgr->insert( separator(), -1, -1 ); // -----------
1594 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1595 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1597 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1599 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1601 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1602 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1603 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1606 // create plugin actions and menus
1610 //=======================================================================
1611 // function : GeometryGUI::addPluginActions()
1613 //=======================================================================
1614 void GeometryGUI::addPluginActions()
1617 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1618 if (!resMgr) return;
1620 // Find names of a resource XML files ("GEOMActions.xml" and others);
1622 char* cenv = getenv("GEOM_PluginsList");
1624 PluginsXml.sprintf("%s", cenv);
1626 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1627 if (PluginsXmlList.count() == 0) return;
1629 // get full names of xml files from PluginsXmlList
1630 QStringList xmlFiles;
1631 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1632 for (int i = 0; i < PluginsXmlList.count(); i++) {
1633 PluginsXml = PluginsXmlList[ i ];
1635 // Find full path to the resource XML file
1636 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1637 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1638 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1639 if ( !xmlFile.isEmpty() )
1640 xmlFiles.append( xmlFile );
1643 // create "Advanced Operations" menu and corresponding toolbar
1644 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1645 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1646 int id = GEOMOp::OpLastOperationID; // TODO?
1649 QString aNoAccessFiles;
1650 for (int i = 0; i < xmlFiles.count(); i++) {
1651 QString xmlFile = xmlFiles[ i ];
1653 QFile file (xmlFile);
1654 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1657 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1658 ASSERT(aXmlHandler);
1660 QXmlInputSource source (&file);
1661 QXmlSimpleReader reader;
1662 reader.setContentHandler(aXmlHandler);
1663 reader.setErrorHandler(aXmlHandler);
1664 bool ok = reader.parse(source);
1668 // bind action lib and label to its ID for activateOperation() method proper work
1669 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1671 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1672 while (anActionsIter.hasNext()) {
1673 GEOMGUI_ActionData anActionData = anActionsIter.next();
1675 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1676 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1677 anActionData.myIcon.toLatin1().constData());
1679 // path to action in menu
1680 QStringList smenus = anActionData.myMenu.split( "/" );
1681 QString actionName = smenus.last();
1682 actionName = actionName.toUpper().prepend("MEN_");
1683 smenus.removeLast();
1685 // path to action in toolbar
1686 QStringList stools = anActionData.myTooltip.split( "/" );
1687 QString actionTool = stools.last();
1688 actionTool = actionTool.toUpper().prepend("TOP_");
1689 stools.removeLast();
1691 QString actionStat = anActionData.myStatusBar;
1692 actionStat = actionStat.toUpper().prepend("STB_");
1694 createAction(id, // ~ anActionData.myLabel
1695 tr(actionTool.toLatin1().constData()),
1697 tr(actionName.toLatin1().constData()),
1698 tr(actionStat.toLatin1().constData()),
1700 application()->desktop(),
1702 this, SLOT(OnGUIEvent()),
1703 QString() /*shortcutAction*/);
1706 foreach (QString subMenu, smenus) {
1707 subMenu = subMenu.toUpper().prepend("MEN_");
1708 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1710 //createMenu(id, pluginMenuId, -1);
1711 createMenu(id, menuId, -1);
1713 QString subTool = stools[0];
1714 subTool = subTool.toUpper().prepend("TOOL_");
1715 int toolId = createTool(tr(subTool.toLatin1().constData()));
1716 //createTool(id, advancedTbarId);
1717 createTool(id, toolId);
1719 // add action id to map
1720 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1721 myPluginActions[id] = anAction;
1727 SUIT_MessageBox::critical(application()->desktop(),
1728 tr("INF_PARSE_ERROR"),
1729 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1733 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1734 if (aNoAccessFiles.isEmpty())
1735 aNoAccessFiles = xmlFile;
1737 aNoAccessFiles += ", " + xmlFile;
1739 } // end loop on xmlFiles
1741 if (!aNoAccessFiles.isEmpty()) {
1742 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1743 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1744 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1748 //=======================================================================
1749 // function : GeometryGUI::activateModule()
1750 // purpose : Called when GEOM module is activated
1751 //=======================================================================
1752 bool GeometryGUI::activateModule( SUIT_Study* study )
1754 if ( CORBA::is_nil( myComponentGeom ) )
1757 bool res = SalomeApp_Module::activateModule( study );
1761 setMenuShown( true );
1762 setToolShown( true );
1764 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1765 PyGILState_STATE gstate = PyGILState_Ensure();
1766 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1767 if ( !pluginsmanager ) {
1771 PyObjWrapper result =
1772 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1773 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1774 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1778 PyGILState_Release(gstate);
1779 // end of GEOM plugins loading
1781 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1782 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1784 // Reset actions accelerator keys
1785 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1786 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1787 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1789 GUIMap::Iterator it;
1790 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1791 it.value()->activate( application()->desktop() );
1793 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1795 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1796 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1797 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1799 if ( !myCreationInfoWdg )
1800 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1801 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1802 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1804 SUIT_ViewManager* vm;
1805 ViewManagerList OCCViewManagers, VTKViewManagers;
1807 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1808 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1809 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1810 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1812 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1813 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1814 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1815 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1818 SALOME_ListIO selected;
1819 sm->selectedObjects( selected );
1820 sm->clearSelected();
1822 // disable OCC selectors
1823 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1824 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1825 while ( itOCCSel.hasNext() )
1826 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1827 sr->setEnabled(true);
1829 // disable VTK selectors
1830 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1831 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1832 while ( itVTKSel.hasNext() )
1833 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1834 sr->setEnabled(true);
1836 sm->setSelectedObjects( selected, true ); //NPAL 19674
1838 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1840 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1842 // 0020836 (Basic vectors and origin)
1843 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1844 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1845 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1847 _PTR(Study) studyDS = appStudy->studyDS();
1849 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1850 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1851 createOriginAndBaseVectors();
1859 //=======================================================================
1860 // function : GeometryGUI::deactivateModule()
1861 // purpose : Called when GEOM module is deactivated
1862 //=======================================================================
1863 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1865 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1867 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1869 setMenuShown( false );
1870 setToolShown( false );
1872 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1873 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1875 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1877 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1878 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1879 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1880 myCreationInfoWdg = 0;
1882 EmitSignalCloseAllDialogs();
1884 GUIMap::Iterator it;
1885 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1886 it.value()->deactivate();
1888 // Unset actions accelerator keys
1889 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1890 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1891 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1893 qDeleteAll(myOCCSelectors);
1894 myOCCSelectors.clear();
1895 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1897 qDeleteAll(myVTKSelectors);
1898 myVTKSelectors.clear();
1899 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1901 return SalomeApp_Module::deactivateModule( study );
1904 //=======================================================================
1905 // function : onWindowActivated()
1906 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1907 //=======================================================================
1908 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1913 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1914 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1916 // disable non-OCC viewframe menu commands
1917 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1918 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1919 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1920 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1921 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1922 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1923 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1925 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1926 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1927 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1928 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1930 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1933 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1935 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1936 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1937 if ( myCreationInfoWdg )
1938 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1941 void GeometryGUI::viewManagers( QStringList& lst ) const
1943 lst.append( OCCViewer_Viewer::Type() );
1946 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1948 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1950 qDebug( "connect" );
1951 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1952 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1953 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1954 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1955 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1956 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1957 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1958 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1960 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1961 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1963 // disable OCC selectors
1964 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1965 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1966 while ( itOCCSel.hasNext() )
1967 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1968 sr->setEnabled(true);
1970 else if ( vm->getType() == SVTK_Viewer::Type() )
1972 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1973 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1975 // disable VTK selectors
1976 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1977 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1978 while ( itVTKSel.hasNext() )
1979 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1980 sr->setEnabled(true);
1984 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1986 SUIT_ViewModel* viewer = vm->getViewModel();
1987 if ( vm->getType() == OCCViewer_Viewer::Type() )
1989 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1990 while ( itOCCSel.hasNext() )
1991 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1992 if ( sr->viewer() == viewer )
1994 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1998 if ( vm->getType() == SVTK_Viewer::Type() )
2000 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2001 while ( itVTKSel.hasNext() )
2002 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2003 if ( sr->viewer() == viewer )
2005 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2011 //================================================================================
2013 * \brief Slot called when selection changed. Shows creation info of a selected object
2015 //================================================================================
2017 void GeometryGUI::updateCreationInfo()
2019 if ( myCreationInfoWdg )
2020 myCreationInfoWdg->clear();
2022 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2023 // if ( !myCreationInfoWdg->isVisible() )
2026 // look for a sole selected GEOM_Object
2027 GEOM::GEOM_BaseObject_var geomObj;
2029 SALOME_ListIO selected;
2030 getApp()->selectionMgr()->selectedObjects( selected );
2032 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2033 SALOME_ListIteratorOfListIO selIt( selected );
2034 for ( ; selIt.More(); selIt.Next() )
2036 Handle(SALOME_InteractiveObject) io = selIt.Value();
2037 if ( !io->hasEntry() ) continue;
2038 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2039 if ( !sobj ) continue;
2040 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2041 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2042 if ( !gobj->_is_nil() )
2044 if ( !geomObj->_is_nil() )
2045 return; // several GEOM objects selected
2049 if ( geomObj->_is_nil() ) return;
2051 // pass creation info of geomObj to myCreationInfoWdg
2053 if ( myCreationInfoWdg ) {
2055 QString operationName;
2056 myCreationInfoWdg->setOperation( icon, operationName );
2060 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2062 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2063 QString name = info->operationName.in();
2064 if ( !name.isEmpty() ) {
2065 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2066 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2067 if ( operationName.startsWith( "MEN_" ))
2068 operationName = name; // no translation
2069 myCreationInfoWdg->setOperation( icon, operationName );
2071 for ( size_t i = 0; i < info->params.length(); ++i )
2072 myCreationInfoWdg->addParam( info->params[i].name.in(),
2073 info->params[i].value.in() );
2082 void GeometryGUI::onAutoBringToFront()
2084 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2085 if( !isAutoBringToFront )
2088 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2089 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2092 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2093 if (!appStudy) return;
2095 GEOM_Displayer displayer( appStudy );
2097 SALOME_View* window = displayer.GetActiveView();
2098 if ( !window ) return;
2100 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2102 SALOME_ListIO selected;
2103 getApp()->selectionMgr()->selectedObjects( selected );
2104 SALOME_ListIO allObjects;
2105 window->GetVisible( allObjects );
2107 for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) {
2108 Handle( SALOME_InteractiveObject ) io = It.Value();
2109 bool isSelected = false;
2110 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
2111 Handle( SALOME_InteractiveObject ) ioSelected = It.Value();
2112 if( io->isSame( ioSelected ) )
2115 QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
2116 bool isTopLevel = v.isValid() ? v.toBool() : false;
2117 if( isSelected && !isTopLevel ) {
2118 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2119 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2121 else if( !isSelected ) {
2122 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2123 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2126 displayer.UpdateViewer();
2127 GeometryGUI::Modified();
2130 void GeometryGUI::updateFieldColorScale()
2132 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2134 GEOM_Displayer aDisplayer( aStudy );
2135 aDisplayer.UpdateColorScale();
2139 QString GeometryGUI::engineIOR() const
2141 if ( !CORBA::is_nil( GetGeomGen() ) )
2142 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2146 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2147 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2149 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2151 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2153 theWidth = theHeight = 0;
2155 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2156 Handle(TColStd_HArray1OfByte) aTexture;
2158 Handle(Graphic3d_HArray1OfBytes) aTexture;
2162 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2163 aTexture = aTextureMap[ theId ];
2164 if ( aTexture.IsNull() ) {
2165 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2166 if ( !aInsOp->_is_nil() ) {
2167 CORBA::Long aWidth, aHeight;
2168 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2169 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2171 theHeight = aHeight;
2173 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2174 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2176 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2179 for (int i = 0; i < aStream->length(); i++)
2180 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2181 aTextureMap[ theId ] = aTexture;
2189 LightApp_Selection* GeometryGUI::createSelection() const
2191 return new GEOMGUI_Selection();
2194 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2196 SalomeApp_Module::contextMenuPopup( client, menu, title );
2198 getApp()->selectionMgr()->selectedObjects( lst );
2200 //Add submenu for predefined materials
2201 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2202 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2203 QtxPopupMgr* mgr = popupMgr();
2204 //get parrent for submenu
2205 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2207 QMenu* oldMenu = act->menu() ;
2212 QMenu* matMenu = new QMenu();
2213 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2215 //Get current material model for the object
2217 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2218 if ( anApp && anApp->activeViewManager() ) {
2219 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2221 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2224 QString curModel = "";
2225 if ( v.canConvert<QString>() ) curModel = v.toString();
2226 // get list of all predefined materials
2227 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2229 foreach ( QString material, materials )
2231 QAction* menAct = matMenu->addAction( material );
2232 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2233 signalMapper->setMapping( menAct, material );
2234 menAct->setCheckable( true );
2235 // Set checked if this material is current
2236 Material_Model aModel;
2237 aModel.fromResources( material );
2238 if ( !found && aModel.toProperties() == curModel ) {
2239 menAct->setChecked( true );
2243 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2244 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2245 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2246 this, SLOT( OnSetMaterial( const QString & ) ) );
2247 act->setMenu( matMenu );
2251 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2252 Handle(SALOME_InteractiveObject) io = lst.First();
2253 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2254 _PTR(Study) study = appStudy->studyDS();
2255 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2257 QString aName = QString( obj->GetName().c_str() );
2258 aName.remove( QRegExp("\\s+$") );
2264 void GeometryGUI::OnSetMaterial(const QString& theName)
2266 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2270 void GeometryGUI::createPreferences()
2272 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2274 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2275 setPreferenceProperty( genGroup, "columns", 2 );
2277 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2278 LightApp_Preferences::Selector,
2279 "Geometry", "display_mode" );
2281 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2282 LightApp_Preferences::Color, "Geometry", "shading_color" );
2284 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2285 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2287 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2288 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2290 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2291 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2293 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2294 LightApp_Preferences::Color, "Geometry", "line_color" );
2296 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2297 LightApp_Preferences::Color, "Geometry", "point_color" );
2299 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2300 LightApp_Preferences::Color, "Geometry", "isos_color" );
2302 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2303 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2305 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2306 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2308 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2309 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2311 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2312 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2314 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2315 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2317 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2318 LightApp_Preferences::Selector,
2319 "Geometry", "material" );
2321 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2322 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2328 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2329 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2331 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2332 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2334 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2335 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2337 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2338 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2340 for (int i = 0; i < nb; i++) {
2341 setPreferenceProperty( wd[i], "min", 1 );
2342 setPreferenceProperty( wd[i], "max", 5 );
2345 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2346 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2348 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2349 setPreferenceProperty( isoGroup, "columns", 2 );
2350 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2351 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2352 setPreferenceProperty( isoU, "min", 0 );
2353 setPreferenceProperty( isoU, "max", 100000 );
2354 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2355 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2356 setPreferenceProperty( isoV, "min", 0 );
2357 setPreferenceProperty( isoV, "max", 100000 );
2359 // Quantities with individual precision settings
2360 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2361 setPreferenceProperty( precGroup, "columns", 2 );
2363 const int nbQuantities = 8;
2364 int prec[nbQuantities], ii = 0;
2365 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2366 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2367 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2368 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2369 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2370 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2371 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2372 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2373 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2374 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2375 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2377 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2379 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2380 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2382 // Set property for precision value for spinboxes
2383 for ( ii = 0; ii < nbQuantities; ii++ ){
2384 setPreferenceProperty( prec[ii], "min", -14 );
2385 setPreferenceProperty( prec[ii], "max", 14 );
2386 setPreferenceProperty( prec[ii], "precision", 2 );
2389 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2390 setPreferenceProperty( VertexGroup, "columns", 2 );
2392 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2393 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2395 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2396 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2398 // Set property for default display mode
2399 QStringList aModesList;
2400 aModesList.append( tr("MEN_WIREFRAME") );
2401 aModesList.append( tr("MEN_SHADING") );
2402 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2404 QList<QVariant> anIndexesList;
2405 anIndexesList.append(0);
2406 anIndexesList.append(1);
2407 anIndexesList.append(2);
2409 setPreferenceProperty( dispmode, "strings", aModesList );
2410 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2412 // Set property for top level display mode
2413 QStringList aTopModesList;
2414 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2415 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2416 aTopModesList.append( tr("MEN_WIREFRAME") );
2417 aTopModesList.append( tr("MEN_SHADING") );
2418 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2420 QList<QVariant> aTopIndexesList;
2421 aTopIndexesList.append(0);
2422 aTopIndexesList.append(1);
2423 aTopIndexesList.append(2);
2424 aTopIndexesList.append(3);
2425 aTopIndexesList.append(4);
2427 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2428 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2430 // Set property for step value for spinboxes
2431 setPreferenceProperty( step, "min", 1 );
2432 setPreferenceProperty( step, "max", 10000 );
2433 setPreferenceProperty( step, "precision", 3 );
2435 // Set property for deflection value for spinboxes
2436 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2437 setPreferenceProperty( defl, "max", 1.0 );
2438 setPreferenceProperty( defl, "step", 1.0e-04 );
2439 setPreferenceProperty( defl, "precision", 6 );
2441 // Set property for default material
2442 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2444 // Set property vertex marker type
2445 QList<QVariant> aMarkerTypeIndicesList;
2446 QList<QVariant> aMarkerTypeIconsList;
2448 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2449 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2450 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2451 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2452 aMarkerTypeIndicesList << (i-1);
2453 aMarkerTypeIconsList << pixmap;
2456 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2457 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2459 // Set property for vertex marker scale
2460 QList<QVariant> aMarkerScaleIndicesList;
2461 QStringList aMarkerScaleValuesList;
2463 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2464 aMarkerScaleIndicesList << iii;
2465 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2468 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2469 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2471 // Scalar bar for field step presentation
2472 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2473 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2475 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2476 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2477 setPreferenceProperty( sbXPosition, "min", 0 );
2478 setPreferenceProperty( sbXPosition, "max", 1 );
2479 setPreferenceProperty( sbXPosition, "step", 0.05 );
2481 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2482 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2483 setPreferenceProperty( sbYPosition, "min", 0 );
2484 setPreferenceProperty( sbYPosition, "max", 1 );
2485 setPreferenceProperty( sbYPosition, "step", 0.05 );
2487 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2488 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2489 setPreferenceProperty( sbWidth, "min", 0 );
2490 setPreferenceProperty( sbWidth, "max", 1 );
2491 setPreferenceProperty( sbWidth, "step", 0.05 );
2493 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2494 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2495 setPreferenceProperty( sbHeight, "min", 0 );
2496 setPreferenceProperty( sbHeight, "max", 1 );
2497 setPreferenceProperty( sbHeight, "step", 0.05 );
2499 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2500 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2501 setPreferenceProperty( sbTextHeight, "min", 6 );
2502 setPreferenceProperty( sbTextHeight, "max", 24 );
2503 setPreferenceProperty( sbTextHeight, "step", 1 );
2505 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2506 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2507 setPreferenceProperty( sbNbIntervals, "min", 2 );
2508 setPreferenceProperty( sbNbIntervals, "max", 64 );
2509 setPreferenceProperty( sbNbIntervals, "step", 1 );
2511 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2512 setPreferenceProperty( originGroup, "columns", 2 );
2514 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2515 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2516 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2517 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2519 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2520 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2522 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2523 setPreferenceProperty( operationsGroup, "columns", 2 );
2525 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2526 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2529 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2531 if (section == "Geometry") {
2532 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2533 if (param == QString("SettingsGeomStep")) {
2534 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2535 EmitSignalDefaultStepValueChanged(spin_step);
2537 else if (param == QString("toplevel_color")) {
2538 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2539 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2541 else if (param == QString("toplevel_dm")) {
2542 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2544 else if (param == QString("scalar_bar_x_position") ||
2545 param == QString("scalar_bar_y_position") ||
2546 param == QString("scalar_bar_width") ||
2547 param == QString("scalar_bar_height") ||
2548 param == QString("scalar_bar_text_height") ||
2549 param == QString("scalar_bar_nb_intervals")) {
2550 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2552 GEOM_Displayer aDisplayer( aStudy );
2553 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2554 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2560 LightApp_Displayer* GeometryGUI::displayer()
2563 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2567 void GeometryGUI::setLocalSelectionMode(const int mode)
2569 myLocalSelectionMode = mode;
2572 int GeometryGUI::getLocalSelectionMode() const
2574 return myLocalSelectionMode;
2577 const char gSeparator = '_'; // character used to separate parameter names
2578 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2581 * \brief Store visual parameters
2583 * This method is called just before the study document is saved.
2584 * Store visual parameters in AttributeParameter attribute(s)
2586 void GeometryGUI::storeVisualParameters (int savePoint)
2588 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2589 if ( !appStudy || !appStudy->studyDS() )
2591 _PTR(Study) studyDS = appStudy->studyDS();
2593 // componentName is used for encoding of entries when storing them in IParameters
2594 std::string componentName = myComponentGeom->ComponentDataType();
2595 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2596 //if (!aSComponent) return;
2599 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2600 componentName.c_str(),
2602 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2604 QList<SUIT_ViewManager*> lst;
2605 QList<SUIT_ViewManager*>::Iterator it;
2607 // main cycle to store parameters of displayed objects
2609 getApp()->viewManagers(lst);
2610 for (it = lst.begin(); it != lst.end(); it++) {
2611 SUIT_ViewManager* vman = *it;
2612 QString vType = vman->getType();
2613 int aMgrId = vman->getGlobalId();
2614 // saving VTK actors properties
2615 QVector<SUIT_ViewWindow*> views = vman->getViews();
2616 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2617 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2618 ObjMap::ConstIterator o_it = anObjects.begin();
2619 for (; o_it != anObjects.end(); o_it++) {
2620 const PropMap aProps = o_it.value();
2622 //Check that object exists in the study
2623 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2624 if ( !obj || !(aProps.count() > 0))
2626 // entry is "encoded" = it does NOT contain component adress, since it is a
2627 // subject to change on next component loading
2629 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2631 _PTR(GenericAttribute) anAttr;
2632 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2635 QString param, occParam = vType;
2636 occParam += GEOM::sectionSeparator();
2637 occParam += QString::number(aMgrId);
2638 occParam += GEOM::sectionSeparator();
2640 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2641 param = occParam + GEOM::propertyName( GEOM::Visibility );
2642 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2645 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2646 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2647 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2650 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2651 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2653 val << QString::number(c.redF());
2654 val << QString::number(c.greenF());
2655 val << QString::number(c.blueF());
2656 param = occParam + GEOM::propertyName( GEOM::Color );
2657 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2660 if (vType == SVTK_Viewer::Type()) {
2661 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2662 param = occParam + GEOM::propertyName( GEOM::Opacity );
2663 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2665 } else if (vType == SOCC_Viewer::Type()) {
2666 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2667 param = occParam + GEOM::propertyName( GEOM::Transparency );
2668 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2671 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2672 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2673 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2677 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2678 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2679 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2682 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2683 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2684 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2687 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2688 param = occParam + GEOM::propertyName( GEOM::Deflection );
2689 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2692 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2693 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2694 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2695 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2698 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2699 param = occParam + GEOM::propertyName( GEOM::Material );
2700 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2703 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2704 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2705 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2708 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2709 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2710 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2712 } // object iterator
2714 } // for (viewManagers)
2718 * \brief Restore visual parameters
2720 * This method is called after the study document is opened.
2721 * Restore visual parameters from AttributeParameter attribute(s)
2723 void GeometryGUI::restoreVisualParameters (int savePoint)
2725 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2726 if (!appStudy || !appStudy->studyDS())
2728 _PTR(Study) studyDS = appStudy->studyDS();
2730 // componentName is used for encoding of entries when storing them in IParameters
2731 std::string componentName = myComponentGeom->ComponentDataType();
2732 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2733 //if (!aSComponent) return;
2736 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2737 componentName.c_str(),
2739 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2741 std::vector<std::string> entries = ip->getEntries();
2743 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2745 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2746 QString entry (ip->decodeEntry(*entIt).c_str());
2748 // Check that the entry corresponds to a real object in the Study
2749 // as the object may be deleted or modified after the visual state is saved.
2750 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2751 if (!so) continue; //Skip the not existent entry
2753 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2754 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2756 std::vector<std::string>::iterator namesIt = paramNames.begin();
2757 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2759 // actors are stored in a map after displaying of them for
2760 // quicker access in the future: map < viewID to actor >
2761 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2762 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2764 QString viewerTypStr;
2765 QString viewIndexStr;
2767 QVector<PropMap> aListOfMap;
2769 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2771 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2772 // '_' is used as separator and should not be used in viewer type or parameter names.
2773 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2774 if (lst.size() != 3)
2777 viewerTypStr = lst[0];
2778 viewIndexStr = lst[1];
2779 QString paramNameStr = lst[2];
2782 viewIndex = viewIndexStr.toUInt(&ok);
2783 if (!ok) // bad conversion of view index to integer
2786 if ((viewIndex + 1) > aListOfMap.count()) {
2787 aListOfMap.resize(viewIndex + 1);
2790 QString val((*valuesIt).c_str());
2791 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2792 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2793 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2794 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2795 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2796 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2797 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2798 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2799 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2800 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2801 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2802 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2803 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2804 QStringList rgb = val.split(GEOM::subSectionSeparator());
2805 if (rgb.count() == 3) {
2806 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2807 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2809 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2810 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2811 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2812 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2813 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2814 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2815 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2816 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2817 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2818 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2819 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2820 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2822 } // for names/parameters iterator
2824 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2826 for (int index = 0; index < aListOfMap.count(); index++) {
2828 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2830 //Get Visibility property of the current PropMap
2831 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2832 SUIT_ViewManager* vman = lst.at(index);
2833 SUIT_ViewModel* vmodel = vman->getViewModel();
2834 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2837 } // for entries iterator
2839 // update all VTK and OCC views
2840 QList<SUIT_ViewManager*> lst;
2841 getApp()->viewManagers(lst);
2842 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2843 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2846 if (vmodel->getType() == SVTK_Viewer::Type()) {
2847 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2848 vtkView->getRenderer()->ResetCameraClippingRange();
2851 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2852 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2853 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2860 void GeometryGUI::onViewAboutToShow()
2862 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2863 QAction* a = action( GEOMOp::OpSwitchVectors );
2865 a->setEnabled(true);
2866 bool vmode = window->property("VectorsMode").toBool();
2867 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2869 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2870 a->setEnabled(false);
2875 \brief Return action by id
2876 \param id identifier of the action
2879 QAction* GeometryGUI::getAction(const int id) {
2884 \brief GEOM module message handler
2886 This method can be re-implemented in the subclasses.
2887 This is a GEOM module message handler.
2889 \param msg the message received.
2891 void GeometryGUI::message(const QString& msg)
2894 QStringList data = msg.split("/");
2895 const int nbStrings = data.count();
2897 if (nbStrings > 0) {
2898 if (data[0] == "modified") {
2900 QString anIOR = nbStrings > 1 ? data[1] : QString();
2902 if ( anIOR.isEmpty() ) {
2906 // Get the geom object.
2907 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2909 // Clear the shape buffer
2910 GeometryGUI::ClearShapeBuffer (anObj);
2916 \brief Clears the shape buffer.
2918 This is a static method. It clears the shape buffer.
2920 \param theObj the object
2922 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2924 if ( CORBA::is_nil( theObj ) )
2927 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2928 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2929 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2931 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2936 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2941 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2945 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2946 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2947 _PTR(GenericAttribute) anAttr;
2948 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2949 _PTR(AttributeIOR) anIOR ( anAttr );
2950 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2951 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2957 \brief Returns the object from IOR.
2959 This is a static method. It returns the object from its IOR.
2961 \param IOR object IOR
2962 \return GEOM object.
2964 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2966 GEOM::GEOM_Object_var geomObj;
2967 if ( !IOR.isEmpty() ) {
2968 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2969 ( IOR.toLatin1().constData() );
2970 if ( !CORBA::is_nil( corbaObj ) )
2971 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2973 return geomObj._retn();
2977 \brief Returns IOR of the object.
2979 This is a static method. It returns the object's IOR.
2981 \param object the GEOM object.
2982 \return object's IOR.
2984 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2987 if ( !CORBA::is_nil( object ) ) {
2988 CORBA::String_var anIOR =
2989 SalomeApp_Application::orb()->object_to_string( object );
2996 \brief Check if this object is can't be renamed in place
2998 This method can be re-implemented in the subclasses.
2999 Return true in case if object isn't reference or component (module root).
3001 \param entry column id
3002 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3004 bool GeometryGUI::renameAllowed( const QString& entry) const {
3006 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3007 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3008 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3010 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3014 Rename object by entry.
3015 \param entry entry of the object
3016 \param name new name of the object
3017 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3019 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3021 bool result = false;
3023 SalomeApp_Application* app =
3024 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3025 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3030 _PTR(Study) aStudy = appStudy->studyDS();
3035 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3037 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3041 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3042 _PTR(GenericAttribute) anAttr;
3044 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3045 _PTR(AttributeName) aName (anAttr);
3047 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3048 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3049 if (!CORBA::is_nil(anObj)) {
3050 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3058 void GeometryGUI::updateMaterials()
3060 LightApp_Preferences* pref = preferences();
3062 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3063 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3064 if ( !materials.contains( currentMaterial ) )
3065 // user material set as default in the preferences, might be removed
3066 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3068 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3070 setPreferenceProperty( prefItem->id(),
3071 "strings", materials );
3072 prefItem->retrieve();
3078 \brief Check if the module allows "drag" operation of its objects.
3080 Overloaded from LightApp_Module class.
3082 This function is a part of the general drag-n-drop mechanism.
3083 The goal of this function is to check data object passed as a parameter
3084 and decide if it can be dragged or no.
3086 \param what data object being tested for drag operation
3087 \return \c true if module allows dragging of the specified object
3088 \sa isDropAccepted(), dropObjects()
3090 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3092 // we allow dragging object under root and object from folder
3093 int aLevel = what->level();
3094 bool anObjectInFolder = false;
3096 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3098 _PTR(SObject) aSO = dataObj->object();
3100 _PTR(GenericAttribute) anAttr;
3101 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3102 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3103 _PTR(AttributeLocalID) aLocalID( anAttr );
3104 anObjectInFolder = aLocalID->Value() == 999;
3109 return aLevel == 2 || anObjectInFolder;
3113 \brief Check if the module allows "drop" operation on the given object.
3115 Overloaded from LightApp_Module class.
3117 This function is a part of the general drag-n-drop mechanism.
3118 The goal of this function is to check data object passed as a parameter
3119 and decide if it can be used as a target for the "drop" operation.
3120 The processing of the drop operation itself is done in the dropObjects() function.
3122 \param where target data object
3123 \return \c true if module supports dropping on the \a where data object
3124 \sa isDraggable(), dropObjects()
3126 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3128 // we allow dropping into folder and top-level GEOM object
3129 int aLevel = where->level();
3130 bool isFolder = false;
3132 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3134 _PTR(SObject) aSO = dataObj->object();
3136 _PTR(GenericAttribute) anAttr;
3137 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3138 _PTR(AttributeLocalID) aLocalID( anAttr );
3139 isFolder = aLocalID->Value() == 999;
3144 return aLevel == 1 || isFolder;
3148 \brief Complete drag-n-drop operation.
3150 Overloaded from LightApp_Module class.
3152 This function is a part of the general drag-n-drop mechanism.
3153 Its goal is to handle dropping of the objects being dragged according
3154 to the chosen operation (move). The dropping is performed in the
3155 context of the parent data object \a where and the \a row (position in the
3156 children index) at which the data should be dropped. If \a row is equal to -1,
3157 this means that objects are added to the end of the children list.
3159 \param what objects being dropped
3160 \param where target data object
3161 \param row child index at which the drop operation is performed
3162 \param action drag-n-drop operation (Qt::DropAction) - move
3164 \sa isDraggable(), isDropAccepted()
3166 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3167 const int row, Qt::DropAction action )
3169 if (action != Qt::CopyAction && action != Qt::MoveAction)
3170 return; // unsupported action
3172 // get parent object
3173 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3174 if ( !dataObj ) return; // wrong parent
3175 _PTR(SObject) parentObj = dataObj->object();
3177 // Find the current Study and StudyBuilder
3178 _PTR(Study) aStudy = parentObj->GetStudy();
3179 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3180 // collect all parents of the target node
3181 QStringList parentIDs;
3182 _PTR(SObject) parent = parentObj;
3183 while( !parent->IsNull() ) {
3184 parentIDs << parent->GetID().c_str();
3185 parent = aUseCaseBuilder->GetFather(parent);
3188 // collect objects being dropped
3189 GEOM::object_list_var objects = new GEOM::object_list();
3190 objects->length( what.count() );
3192 for ( int i = 0; i < what.count(); i++ ) {
3193 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3194 if ( !dataObj ) continue; // skip wrong objects
3195 _PTR(SObject) sobj = dataObj->object();
3196 // check that dropped object is not a parent of target object
3197 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3198 return; // it's not allowed to move node into it's child
3200 objects[i] = _CAST(SObject, sobj)->GetSObject();
3203 objects->length( count );
3205 // call engine function
3206 GetGeomGen()->Move( objects.in(), // what
3207 _CAST(SObject, parentObj)->GetSObject(), // where
3210 // update Object browser
3211 getApp()->updateObjectBrowser( false );