1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_XmlHandler.h"
34 #include "GEOMGUI_OCCSelector.h"
35 #include "GEOMGUI_Selection.h"
36 #include "GEOMGUI_CreationInfoWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 // #include <SALOME_ListIO.hxx>
82 #include <SALOME_ListIteratorOfListIO.hxx>
84 #include <SALOMEDSClient_ClientFactory.hxx>
85 #include <SALOMEDSClient_IParameters.hxx>
87 #include <SALOMEDS_SObject.hxx>
89 #include <Basics_OCCTVersion.hxx>
100 #include <QSignalMapper>
102 #include <AIS_Drawer.hxx>
103 #include <AIS_ListOfInteractive.hxx>
104 #include <AIS_ListIteratorOfListOfInteractive.hxx>
105 #include <Prs3d_Drawer.hxx>
106 #include <Prs3d_IsoAspect.hxx>
107 #include <Aspect_TypeOfMarker.hxx>
108 #include <OSD_SharedLibrary.hxx>
109 #include <NCollection_DataMap.hxx>
111 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
112 #include <TColStd_HArray1OfByte.hxx>
114 #include <Graphic3d_HArray1OfBytes.hxx>
117 #include <utilities.h>
119 #include <vtkCamera.h>
120 #include <vtkRenderer.h>
122 #include <Standard_Failure.hxx>
123 #include <Standard_ErrorHandler.hxx>
125 #include "GEOM_version.h"
126 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
129 Standard_EXPORT CAM_Module* createModule() {
130 return new GeometryGUI();
133 Standard_EXPORT char* getModuleVersion() {
134 return (char*)GEOM_VERSION_STR;
138 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
140 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
142 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
144 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
145 if (CORBA::is_nil(myComponentGeom))
147 return GeometryGUI::myComponentGeom;
150 bool GeometryGUI::InitGeomGen()
153 if ( CORBA::is_nil( myComponentGeom ) ) return false;
157 //=======================================================================
158 // function : ClientSObjectToObject
160 //=======================================================================
161 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
163 _PTR(GenericAttribute) anAttr;
164 CORBA::Object_var anObj;
166 std::string aValue = theSObject->GetIOR();
167 if (strcmp(aValue.c_str(), "") != 0) {
168 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
169 anObj = anORB->string_to_object(aValue.c_str());
172 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
174 return anObj._retn();
177 //=======================================================================
178 // function : ClientStudyToStudy
180 //=======================================================================
181 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
183 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
184 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
185 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
186 int aStudyID = theStudy->StudyId();
187 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
188 return aDSStudy._retn();
191 void GeometryGUI::Modified (bool theIsUpdateActions)
193 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
194 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
195 appStudy->Modified();
196 if ( theIsUpdateActions )
197 app->updateActions();
202 //=======================================================================
203 // function : GeometryGUI::GeometryGUI()
204 // purpose : Constructor
205 //=======================================================================
206 GeometryGUI::GeometryGUI() :
207 SalomeApp_Module( "GEOM" ),
210 if ( CORBA::is_nil( myComponentGeom ) )
212 Engines::EngineComponent_var comp =
213 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
214 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
217 myActiveDialogBox = 0;
219 gp_Pnt origin = gp_Pnt(0., 0., 0.);
220 gp_Dir direction = gp_Dir(0., 0., 1.);
221 myWorkingPlane = gp_Ax3(origin, direction);
224 myLocalSelectionMode = GEOM_ALLOBJECTS;
226 myCreationInfoWdg = 0;
228 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
230 Q_INIT_RESOURCE( GEOMGUI );
233 //=======================================================================
234 // function : GeometryGUI::~GeometryGUI()
235 // purpose : Destructor
236 //=======================================================================
237 GeometryGUI::~GeometryGUI()
239 while (!myOCCSelectors.isEmpty())
240 delete myOCCSelectors.takeFirst();
242 while (!myVTKSelectors.isEmpty())
243 delete myVTKSelectors.takeFirst();
245 qDeleteAll(myGUIMap);
248 //=======================================================================
249 // function : GeometryGUI::getLibrary()
250 // purpose : get or load GUI library by name [ internal ]
251 //=======================================================================
252 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
253 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
255 if ( !myGUIMap.contains( libraryName ) ) {
256 // try to load library if it is not loaded yet
258 QString dirs = getenv( "LD_LIBRARY_PATH" );
261 QString dirs = getenv( "PATH" );
264 if ( !dirs.isEmpty() ) {
265 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
266 QListIterator<QString> it( dirList ); it.toBack();
267 while ( it.hasPrevious() ) {
268 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
270 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
271 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
273 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
274 continue; // continue search further
276 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
277 if ( osdF != NULL ) {
278 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
279 GEOMGUI* libGUI = (*func)( this );
281 myGUIMap[ libraryName ] = libGUI;
282 break; // found and loaded!
289 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
292 //=======================================================================
293 // function : GeometryGUI::getPluginLibrary()
294 // purpose : get or load GUI Plugin library by name [ internal ]
295 //=======================================================================
296 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
297 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
299 if ( !myGUIMap.contains( libraryName ) ) {
300 // try to load library if it is not loaded yet
302 QString dirs = getenv( "LD_LIBRARY_PATH" );
305 QString dirs = getenv( "PATH" );
308 if ( !dirs.isEmpty() ) {
309 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
310 QListIterator<QString> it( dirList ); it.toBack();
311 while ( it.hasPrevious() ) {
312 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
314 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
315 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
317 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
318 continue; // continue search further
320 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
321 if ( osdF != NULL ) {
322 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
323 GEOMPluginGUI* libGUI = (*func)( this );
325 myGUIMap[ libraryName ] = libGUI;
326 break; // found and loaded!
333 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
336 //=======================================================================
337 // function : GeometryGUI::ActiveWorkingPlane()
338 // purpose : Activate Working Plane View
339 //=======================================================================
340 void GeometryGUI::ActiveWorkingPlane()
342 gp_Dir DZ = myWorkingPlane.Direction();
343 gp_Dir DY = myWorkingPlane.YDirection();
345 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
346 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
347 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
350 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
352 Handle(V3d_View) view3d = vw->getViewPort()->getView();
354 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
355 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
359 else if ( ViewVTK ) {
360 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
362 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
364 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
365 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
366 camera->SetFocalPoint(0,0,0);
373 //=======================================================================
374 // function : GeometryGUI::SetActiveDialogBox()
375 // purpose : Set active dialog box
376 //=======================================================================
377 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
379 myActiveDialogBox = (QDialog*)aDlg;
382 //=======================================================================
383 // function : GeometryGUI::EmitSignalDeactivateDialog()
384 // purpose : Emit a signal to deactivate the active dialog Box
385 //=======================================================================
386 void GeometryGUI::EmitSignalDeactivateDialog()
388 emit SignalDeactivateActiveDialog();
391 //=======================================================================
392 // function : GeometryGUI::EmitSignalCloseAllDialogs()
393 // purpose : Emit a signal to close all non modal dialogs box
394 //=======================================================================
395 void GeometryGUI::EmitSignalCloseAllDialogs()
397 emit SignalCloseAllDialogs();
400 //=======================================================================
401 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
402 // purpose : Emit a signal to inform that default real spin box step has
404 //=======================================================================
405 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
407 emit SignalDefaultStepValueChanged(newVal);
410 //=======================================================================
411 // function : GeometryGUI::OnGUIEvent()
412 // purpose : common slot for all menu/toolbar actions
413 //=======================================================================
414 void GeometryGUI::OnGUIEvent()
416 const QObject* obj = sender();
417 if ( !obj || !obj->inherits( "QAction" ) )
419 int id = actionId((QAction*)obj);
424 //=======================================================================
425 // function : GeometryGUI::OnGUIEvent()
426 // purpose : manage all events on GUI [static]
427 //=======================================================================
428 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
430 SUIT_Application* anApp = application();
432 SUIT_Desktop* desk = anApp->desktop();
434 // check type of the active viewframe
435 SUIT_ViewWindow* window = desk->activeWindow();
436 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
437 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
438 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
439 // if current viewframe is not of OCC and not of VTK type - return immediately
440 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
441 QList<int> NotViewerDependentCommands;
442 NotViewerDependentCommands << GEOMOp::OpDelete
444 << GEOMOp::OpShowOnly
445 << GEOMOp::OpShowOnlyChildren
446 << GEOMOp::OpDiscloseChildren
447 << GEOMOp::OpConcealChildren
448 << GEOMOp::OpUnpublishObject
449 << GEOMOp::OpPublishObject
450 << GEOMOp::OpPointMarker
451 << GEOMOp::OpCreateFolder
452 << GEOMOp::OpSortChildren;
453 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
454 // activate OCC viewer
455 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
458 // fix for IPAL9103, point 2
459 if ( CORBA::is_nil( GetGeomGen() ) ) {
460 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
465 // find corresponding GUI library
467 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
468 createOriginAndBaseVectors(); // internal operation
470 case GEOMOp::OpImport: // MENU FILE - IMPORT
471 case GEOMOp::OpExport: // MENU FILE - EXPORT
472 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
473 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
474 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
475 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
476 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
477 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
478 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
479 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
480 case GEOMOp::OpDelete: // MENU EDIT - DELETE
481 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
482 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
483 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
484 case GEOMOp::OpColor: // POPUP MENU - COLOR
485 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
486 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
487 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
488 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
489 case GEOMOp::OpIsos: // POPUP MENU - ISOS
490 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
491 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
492 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
493 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
494 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
495 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
496 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
497 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
498 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
499 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
500 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
501 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
502 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
503 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
504 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
505 case GEOMOp::OpClsBringToFront: //
506 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
507 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
508 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
509 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
510 libName = "GEOMToolsGUI";
512 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
513 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
514 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
515 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
516 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
517 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
518 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
519 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
520 case GEOMOp::OpHide: // MENU VIEW - ERASE
521 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
522 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
523 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
524 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
525 case GEOMOp::OpShading: // POPUP MENU - SHADING
526 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
527 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
528 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
529 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
530 libName = "DisplayGUI";
532 case GEOMOp::OpPoint: // MENU BASIC - POINT
533 case GEOMOp::OpLine: // MENU BASIC - LINE
534 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
535 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
536 case GEOMOp::OpArc: // MENU BASIC - ARC
537 case GEOMOp::OpVector: // MENU BASIC - VECTOR
538 case GEOMOp::OpPlane: // MENU BASIC - PLANE
539 case GEOMOp::OpCurve: // MENU BASIC - CURVE
540 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
541 libName = "BasicGUI";
543 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
544 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
545 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
546 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
547 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
548 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
549 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
550 libName = "PrimitiveGUI";
552 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
553 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
554 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
555 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
556 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
557 libName = "GenerationGUI";
559 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
560 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
561 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
562 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
564 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
566 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
567 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
568 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
569 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
570 libName = "EntityGUI";
572 case GEOMOp::OpEdge: // MENU BUILD - EDGE
573 case GEOMOp::OpWire: // MENU BUILD - WIRE
574 case GEOMOp::OpFace: // MENU BUILD - FACE
575 case GEOMOp::OpShell: // MENU BUILD - SHELL
576 case GEOMOp::OpSolid: // MENU BUILD - SOLID
577 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
578 libName = "BuildGUI";
580 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
581 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
582 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
583 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
584 libName = "BooleanGUI";
586 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
587 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
588 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
589 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
590 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
591 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
592 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
593 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
594 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
595 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
596 libName = "TransformationGUI";
598 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
599 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
600 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
601 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
602 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
603 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
604 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
605 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
606 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
607 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
608 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
609 #ifdef DEBUG_CURVE_CREATOR
610 // for debug purposes, to be removed
611 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
613 libName = "OperationGUI";
615 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
616 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
617 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
618 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
619 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
620 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
621 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
622 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
623 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
624 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
625 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
626 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
627 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
628 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
629 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
630 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
631 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
632 libName = "RepairGUI";
634 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
635 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
636 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
637 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
638 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
639 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
640 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
641 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
642 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
643 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
644 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
645 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
646 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
647 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
648 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
649 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
650 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
651 libName = "MeasureGUI";
653 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
654 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
655 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
656 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
657 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
658 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
659 libName = "GroupGUI";
661 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
662 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
663 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
664 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
665 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
666 libName = "BlocksGUI";
668 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
669 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
670 libName = "ImportExportGUI";
672 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
673 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
674 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
675 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
676 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
677 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
678 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
679 //libName = "AdvancedGUI";
682 if (myPluginActions.contains(id)) {
683 libName = myPluginActions[id].first;
685 GEOMPluginGUI* library = 0;
686 if ( !libName.isEmpty() ) {
688 libName = QString( "lib" ) + libName + ".so";
690 libName = libName + ".dll";
692 library = getPluginLibrary( libName );
695 // call method of corresponding GUI library
697 //QString action ("%1");
698 //action = action.arg(id);
700 //if( !theParam.isValid() )
701 library->OnGUIEvent( myPluginActions[id].second, desk );
703 // library->OnGUIEvent( id, desk, theParam);
706 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
708 updateCreationInfo();
714 GEOMGUI* library = 0;
715 if ( !libName.isEmpty() ) {
717 libName = QString( "lib" ) + libName + ".so";
719 libName = libName + ".dll";
721 library = getLibrary( libName );
724 // call method of corresponding GUI library
726 if( !theParam.isValid() )
727 library->OnGUIEvent( id, desk );
729 library->OnGUIEvent( id, desk, theParam);
732 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
734 updateCreationInfo();
737 //=================================================================================
738 // function : GeometryGUI::activateOperation()
740 //=================================================================================
741 bool GeometryGUI::activateOperation( int actionId )
743 OnGUIEvent(actionId);
747 //=================================================================================
748 // function : GeometryGUI::activateOperation()
750 //=================================================================================
751 bool GeometryGUI::activateOperation( const QString& actionId )
755 int id = actionId.toInt(&isOk);
762 //=================================================================================
763 // function : GeometryGUI::activateOperation()
765 //=================================================================================
766 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
770 QString pluginLib = plugin;
771 // TODO: if <plugin> is a plugin name, find plugin library name
772 if (myPluginLibs.contains(plugin))
773 pluginLib = myPluginLibs[plugin];
775 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
776 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
777 const PluginAction& anAction = actionsIter.value();
778 if (anAction.first == pluginLib && anAction.second == actionId) {
779 // activate operation
780 OnGUIEvent(actionsIter.key());
788 //=================================================================================
789 // function : GeometryGUI::OnKeyPress()
790 // purpose : Called when any key is pressed by user [static]
791 //=================================================================================
792 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
794 if ( !application() )
796 foreach ( GEOMGUI* lib, myGUIMap )
797 lib->OnKeyPress( e, application()->desktop(), w );
800 //=================================================================================
801 // function : GeometryGUI::OnMouseMove()
802 // purpose : Manages mouse move events [static]
803 //=================================================================================
804 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
806 if ( !application() )
808 foreach ( GEOMGUI* lib, myGUIMap )
809 lib->OnMouseMove( e, application()->desktop(), w );
812 //=================================================================================
813 // function : GeometryGUI::OnMouseRelease()
814 // purpose : Manages mouse release events [static]
815 //=================================================================================
816 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
818 if ( !application() )
820 foreach ( GEOMGUI* lib, myGUIMap )
821 lib->OnMouseRelease( e, application()->desktop(), w );
824 //=================================================================================
825 // function : GeometryGUI::OnMousePress()
826 // purpose : Manage mouse press events [static]
827 //=================================================================================
828 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
830 if ( !application() )
832 foreach ( GEOMGUI* lib, myGUIMap )
833 lib->OnMousePress( e, application()->desktop(), w );
836 //=======================================================================
837 // function : createGeomAction
839 //=======================================================================
840 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
841 const int accel, const bool toggle, const QString& shortcutAction )
843 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
844 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
845 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
847 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
849 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
850 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
852 application()->desktop(),
854 this, SLOT( OnGUIEvent() ),
858 //=======================================================================
859 // function : createOriginAndBaseVectors
861 //=======================================================================
862 void GeometryGUI::createOriginAndBaseVectors()
864 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
865 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
867 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
871 _PTR(Study) studyDS = appStudy->studyDS();
872 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
873 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
874 if ( !aBasicOperations->_is_nil() ) {
875 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
876 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
877 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
878 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
879 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
880 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
882 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
883 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
884 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
885 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
886 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
888 getApp()->updateObjectBrowser( true );
894 //=======================================================================
895 // function : GeometryGUI::initialize()
896 // purpose : Called when GEOM module is created
897 //=======================================================================
898 void GeometryGUI::initialize( CAM_Application* app )
900 SalomeApp_Module::initialize( app );
902 // ----- create actions --------------
904 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
905 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
907 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
909 createGeomAction( GEOMOp::OpPoint, "POINT" );
910 createGeomAction( GEOMOp::OpLine, "LINE" );
911 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
912 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
913 createGeomAction( GEOMOp::OpArc, "ARC" );
914 createGeomAction( GEOMOp::OpCurve, "CURVE" );
915 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
916 createGeomAction( GEOMOp::OpVector, "VECTOR" );
917 createGeomAction( GEOMOp::OpPlane, "PLANE" );
918 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
919 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
921 createGeomAction( GEOMOp::OpBox, "BOX" );
922 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
923 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
924 createGeomAction( GEOMOp::OpTorus, "TORUS" );
925 createGeomAction( GEOMOp::OpCone, "CONE" );
926 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
927 createGeomAction( GEOMOp::OpDisk, "DISK" );
929 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
930 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
931 createGeomAction( GEOMOp::OpFilling, "FILLING" );
932 createGeomAction( GEOMOp::OpPipe, "PIPE" );
933 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
935 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
936 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
937 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
938 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
939 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
941 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
942 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
944 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
946 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
947 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
949 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
950 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
951 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
952 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
954 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
956 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
958 createGeomAction( GEOMOp::OpEdge, "EDGE" );
959 createGeomAction( GEOMOp::OpWire, "WIRE" );
960 createGeomAction( GEOMOp::OpFace, "FACE" );
961 createGeomAction( GEOMOp::OpShell, "SHELL" );
962 createGeomAction( GEOMOp::OpSolid, "SOLID" );
963 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
965 createGeomAction( GEOMOp::OpFuse, "FUSE" );
966 createGeomAction( GEOMOp::OpCommon, "COMMON" );
967 createGeomAction( GEOMOp::OpCut, "CUT" );
968 createGeomAction( GEOMOp::OpSection, "SECTION" );
970 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
971 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
972 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
973 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
974 createGeomAction( GEOMOp::OpScale, "SCALE" );
975 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
976 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
977 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
978 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
980 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
981 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
982 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
983 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
984 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
985 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
986 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
987 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
988 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
989 #ifdef DEBUG_CURVE_CREATOR
990 // for debug purposes, to be removed
991 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
993 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
994 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
996 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
997 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
998 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1000 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1001 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1002 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1003 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1004 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1005 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1006 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1007 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1008 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1009 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1010 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1011 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1012 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1013 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1014 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1015 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1016 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1018 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1019 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1020 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1021 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1022 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1023 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1024 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1025 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1026 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1028 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1029 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1030 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1031 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1032 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1033 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1035 #ifdef _DEBUG_ // PAL16821
1036 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1039 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1040 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1041 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1042 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1043 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1044 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1045 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1046 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1047 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1048 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1049 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1050 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1051 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1052 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1053 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1054 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1055 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1056 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1057 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1058 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1059 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1060 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1061 createGeomAction( GEOMOp::OpHide, "ERASE" );
1063 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1064 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1065 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1066 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1067 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1068 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1069 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1070 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1071 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1072 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1073 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1074 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1075 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1076 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1077 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1078 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1079 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1080 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1081 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1082 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1083 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1084 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1085 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1086 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1087 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1088 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1089 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1090 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1091 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1092 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1094 // Create actions for increase/decrease transparency shortcuts
1095 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1096 "Geometry:Increase transparency");
1097 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1098 "Geometry:Decrease transparency");
1100 // Create actions for increase/decrease number of isolines
1101 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1102 "Geometry:Increase number of isolines");
1103 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1104 "Geometry:Decrease number of isolines");
1106 // Import/Export XAO
1107 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1108 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1110 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1111 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1112 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1113 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1114 //@@ 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 @@//
1116 // ---- create menus --------------------------
1118 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1119 createMenu( separator(), fileId, 10 );
1120 createMenu( GEOMOp::OpImport, fileId, 10 );
1121 createMenu( GEOMOp::OpExport, fileId, 10 );
1122 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1123 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1124 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1125 createMenu( separator(), fileId, -1 );
1127 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1128 createMenu( GEOMOp::OpDelete, editId, -1 );
1130 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1132 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1133 createMenu( GEOMOp::OpPoint, basicId, -1 );
1134 createMenu( GEOMOp::OpLine, basicId, -1 );
1135 createMenu( GEOMOp::OpCircle, basicId, -1 );
1136 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1137 createMenu( GEOMOp::OpArc, basicId, -1 );
1138 createMenu( GEOMOp::OpCurve, basicId, -1 );
1139 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1140 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1141 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1142 createMenu( separator(), basicId, -1 );
1143 createMenu( GEOMOp::OpVector, basicId, -1 );
1144 createMenu( GEOMOp::OpPlane, basicId, -1 );
1145 createMenu( GEOMOp::OpLCS, basicId, -1 );
1146 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1148 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1149 createMenu( GEOMOp::OpBox, primId, -1 );
1150 createMenu( GEOMOp::OpCylinder, primId, -1 );
1151 createMenu( GEOMOp::OpSphere, primId, -1 );
1152 createMenu( GEOMOp::OpTorus, primId, -1 );
1153 createMenu( GEOMOp::OpCone, primId, -1 );
1154 createMenu( GEOMOp::OpRectangle, primId, -1 );
1155 createMenu( GEOMOp::OpDisk, primId, -1 );
1156 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1158 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1159 createMenu( GEOMOp::OpPrism, genId, -1 );
1160 createMenu( GEOMOp::OpRevolution, genId, -1 );
1161 createMenu( GEOMOp::OpFilling, genId, -1 );
1162 createMenu( GEOMOp::OpPipe, genId, -1 );
1163 #if OCC_VERSION_LARGE > 0x06050300
1164 createMenu( GEOMOp::OpPipePath, genId, -1 );
1167 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1168 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1169 //@@ 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 @@//
1171 createMenu( separator(), newEntId, -1 );
1173 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1174 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1175 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1176 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1177 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1178 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1180 createMenu( separator(), newEntId, -1 );
1182 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1183 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1184 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1186 createMenu( separator(), newEntId, -1 );
1188 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1189 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1190 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1191 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1192 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1194 createMenu( separator(), newEntId, -1 );
1196 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1198 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1199 createMenu( GEOMOp::OpEdge, buildId, -1 );
1200 createMenu( GEOMOp::OpWire, buildId, -1 );
1201 createMenu( GEOMOp::OpFace, buildId, -1 );
1202 createMenu( GEOMOp::OpShell, buildId, -1 );
1203 createMenu( GEOMOp::OpSolid, buildId, -1 );
1204 createMenu( GEOMOp::OpCompound, buildId, -1 );
1206 createMenu( separator(), newEntId, -1 );
1208 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1210 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1213 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1215 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1216 createMenu( GEOMOp::OpFuse, boolId, -1 );
1217 createMenu( GEOMOp::OpCommon, boolId, -1 );
1218 createMenu( GEOMOp::OpCut, boolId, -1 );
1219 createMenu( GEOMOp::OpSection, boolId, -1 );
1221 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1222 createMenu( GEOMOp::OpTranslate, transId, -1 );
1223 createMenu( GEOMOp::OpRotate, transId, -1 );
1224 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1225 createMenu( GEOMOp::OpMirror, transId, -1 );
1226 createMenu( GEOMOp::OpScale, transId, -1 );
1227 createMenu( GEOMOp::OpOffset, transId, -1 );
1228 createMenu( GEOMOp::OpProjection, transId, -1 );
1229 createMenu( separator(), transId, -1 );
1230 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1231 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1233 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1234 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1235 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1236 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1238 createMenu( separator(), operId, -1 );
1240 createMenu( GEOMOp::OpPartition, operId, -1 );
1241 createMenu( GEOMOp::OpArchimede, operId, -1 );
1242 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1243 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1245 createMenu( separator(), operId, -1 );
1247 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1248 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1249 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1250 createMenu( GEOMOp::OpChamfer, operId, -1 );
1251 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1252 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1253 #ifdef DEBUG_CURVE_CREATOR
1254 // for debug purposes, to be removed
1255 createMenu( separator(), operId, -1 );
1256 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1258 //createMenu( GEOMOp::OpClipping, operId, -1 );
1260 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1261 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1262 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1263 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1264 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1265 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1266 createMenu( GEOMOp::OpSewing, repairId, -1 );
1267 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1268 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1269 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1270 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1271 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1272 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1273 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1274 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1275 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1276 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1277 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1279 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1280 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1281 createMenu( GEOMOp::OpProperties, measurId, -1 );
1282 createMenu( separator(), measurId, -1 );
1283 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1284 createMenu( GEOMOp::OpInertia, measurId, -1 );
1285 createMenu( GEOMOp::OpNormale, measurId, -1 );
1286 createMenu( separator(), measurId, -1 );
1287 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1288 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1289 createMenu( separator(), measurId, -1 );
1291 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1292 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1293 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1294 createMenu( GEOMOp::OpAngle, dimId, -1 );
1295 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1297 createMenu( separator(), measurId, -1 );
1298 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1299 createMenu( separator(), measurId, -1 );
1300 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1301 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1302 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1303 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1304 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1306 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1307 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1308 createMenu( separator(), toolsId, -1 );
1309 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1312 createMenu( separator(), toolsId, -1 );
1313 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1314 createMenu( separator(), toolsId, -1 );
1316 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1317 createMenu( separator(), viewId, -1 );
1319 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1320 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1321 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1322 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1323 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1324 createMenu( separator(), dispmodeId, -1 );
1325 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1326 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1328 createMenu( separator(), viewId, -1 );
1329 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1330 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1331 createMenu( separator(), viewId, -1 );
1332 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1333 createMenu( separator(), viewId, -1 );
1337 because of these items are accessible through object browser and viewers
1338 we have removed they from main menu
1340 createMenu( GEOMOp::OpShow, viewId, -1 );
1341 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1342 createMenu( GEOMOp::OpHide, viewId, -1 );
1345 // ---- create toolbars --------------------------
1347 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1348 createTool( GEOMOp::OpPoint, basicTbId );
1349 createTool( GEOMOp::OpLine, basicTbId );
1350 createTool( GEOMOp::OpCircle, basicTbId );
1351 createTool( GEOMOp::OpEllipse, basicTbId );
1352 createTool( GEOMOp::OpArc, basicTbId );
1353 createTool( GEOMOp::OpCurve, basicTbId );
1354 createTool( GEOMOp::OpVector, basicTbId );
1355 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1356 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1357 createTool( GEOMOp::OpIsoline, basicTbId );
1358 createTool( GEOMOp::OpPlane, basicTbId );
1359 createTool( GEOMOp::OpLCS, basicTbId );
1360 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1362 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1363 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1364 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1366 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1367 createTool( GEOMOp::OpBox, primTbId );
1368 createTool( GEOMOp::OpCylinder, primTbId );
1369 createTool( GEOMOp::OpSphere, primTbId );
1370 createTool( GEOMOp::OpTorus, primTbId );
1371 createTool( GEOMOp::OpCone, primTbId );
1372 createTool( GEOMOp::OpRectangle, primTbId );
1373 createTool( GEOMOp::OpDisk, primTbId );
1374 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1376 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1377 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1378 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1380 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1381 createTool( GEOMOp::OpFuse, boolTbId );
1382 createTool( GEOMOp::OpCommon, boolTbId );
1383 createTool( GEOMOp::OpCut, boolTbId );
1384 createTool( GEOMOp::OpSection, boolTbId );
1386 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1387 createTool( GEOMOp::OpPrism, genTbId );
1388 createTool( GEOMOp::OpRevolution, genTbId );
1389 createTool( GEOMOp::OpFilling, genTbId );
1390 createTool( GEOMOp::OpPipe, genTbId );
1391 #if OCC_VERSION_LARGE > 0x06050300
1392 createTool( GEOMOp::OpPipePath, genTbId );
1395 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1396 createTool( GEOMOp::OpTranslate, transTbId );
1397 createTool( GEOMOp::OpRotate, transTbId );
1398 createTool( GEOMOp::OpChangeLoc, transTbId );
1399 createTool( GEOMOp::OpMirror, transTbId );
1400 createTool( GEOMOp::OpScale, transTbId );
1401 createTool( GEOMOp::OpOffset, transTbId );
1402 createTool( GEOMOp::OpProjection, transTbId );
1403 createTool( separator(), transTbId );
1404 createTool( GEOMOp::OpMultiTranslate, transTbId );
1405 createTool( GEOMOp::OpMultiRotate, transTbId );
1407 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1408 createTool( GEOMOp::OpExplode, operTbId );
1409 createTool( GEOMOp::OpPartition, operTbId );
1410 createTool( GEOMOp::OpArchimede, operTbId );
1411 createTool( GEOMOp::OpShapesOnShape, operTbId );
1412 createTool( GEOMOp::OpSharedShapes, operTbId );
1414 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1415 createTool( GEOMOp::OpFillet1d, featTbId );
1416 createTool( GEOMOp::OpFillet2d, featTbId );
1417 createTool( GEOMOp::OpFillet3d, featTbId );
1418 createTool( GEOMOp::OpChamfer, featTbId );
1419 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1420 createTool( GEOMOp::OpExtrudedCut, featTbId );
1421 #ifdef DEBUG_CURVE_CREATOR
1422 // for debug purposes, to be removed
1423 createTool( GEOMOp::OpCurveCreator, featTbId );
1426 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1427 createTool( GEOMOp::OpEdge, buildTbId );
1428 createTool( GEOMOp::OpWire, buildTbId );
1429 createTool( GEOMOp::OpFace, buildTbId );
1430 createTool( GEOMOp::OpShell, buildTbId );
1431 createTool( GEOMOp::OpSolid, buildTbId );
1432 createTool( GEOMOp::OpCompound, buildTbId );
1434 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1435 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1436 createTool( GEOMOp::OpProperties, measureTbId );
1437 createTool( GEOMOp::OpCenterMass, measureTbId );
1438 createTool( GEOMOp::OpInertia, measureTbId );
1439 createTool( GEOMOp::OpNormale, measureTbId );
1440 createTool( separator(), measureTbId );
1441 createTool( GEOMOp::OpBoundingBox, measureTbId );
1442 createTool( GEOMOp::OpMinDistance, measureTbId );
1443 createTool( GEOMOp::OpAngle, measureTbId );
1444 createTool( GEOMOp::OpTolerance , measureTbId );
1445 createTool( separator(), measureTbId );
1446 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1447 createTool( GEOMOp::OpFreeFaces, measureTbId );
1448 createTool( separator(), measureTbId );
1449 createTool( GEOMOp::OpWhatIs, measureTbId );
1450 createTool( GEOMOp::OpCheckShape, measureTbId );
1451 createTool( GEOMOp::OpCheckCompound, measureTbId );
1452 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1453 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1455 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1456 createTool( GEOMOp::OpPictureImport, picturesTbId );
1458 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1461 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1462 createTool( GEOMOp::OpExportXAO, impexpTbId );
1463 createTool( GEOMOp::OpImportXAO, impexpTbId );
1465 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1466 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1467 //@@ 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 @@//
1469 // ---- create popup menus --------------------------
1471 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1472 QString clientOCC = "(client='OCCViewer')";
1473 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1474 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1476 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1477 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1478 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1479 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1481 QString autoColorPrefix =
1482 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1484 QtxPopupMgr* mgr = popupMgr();
1486 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1487 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1488 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1489 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1490 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1491 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1492 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1493 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1495 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1496 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1497 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1498 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1499 mgr->insert( separator(), -1, -1 ); // -----------
1501 #if OCC_VERSION_LARGE > 0x06050200
1502 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1503 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1504 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1505 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1506 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1507 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1508 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1510 mgr->insert( separator(), -1, -1 ); // -----------
1511 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1512 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1513 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1514 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1515 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1516 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1517 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1518 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1519 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1520 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1521 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1522 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1523 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1524 mgr->insert( separator(), dispmodeId, -1 );
1525 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1526 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1527 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1528 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1529 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1530 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1531 mgr->insert( separator(), -1, -1 ); // -----------
1533 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1534 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1535 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1536 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1538 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1539 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1540 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1541 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1542 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1543 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1545 // material properties
1546 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1547 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1550 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1551 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1553 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1554 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1555 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1557 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1558 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1560 mgr->insert( separator(), -1, -1 ); // -----------
1561 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1562 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1563 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1564 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1565 mgr->insert( separator(), -1, -1 ); // -----------
1567 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1568 onlyComponent = "((type='Component') and selcount=1)",
1569 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1570 types = "'Shape' 'Group' 'FieldStep'";
1572 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1573 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1575 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1576 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1578 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1579 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1581 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1583 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1584 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1585 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1586 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1587 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1588 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1589 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1590 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1591 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1592 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1593 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1594 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1595 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1596 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1597 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1598 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1599 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1600 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1601 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1602 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1603 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1604 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1605 mgr->insert( separator(), selectonlyId, -1);
1606 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1607 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1608 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1609 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1610 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1611 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1612 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1614 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1616 mgr->insert( separator(), -1, -1 ); // -----------
1617 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1618 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1619 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1620 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1622 mgr->insert( separator(), -1, -1 ); // -----------
1623 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1624 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1626 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1627 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1629 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1630 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1632 mgr->insert( separator(), -1, -1 ); // -----------
1633 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1634 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1636 mgr->insert( separator(), -1, -1 ); // -----------
1637 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1638 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1640 mgr->insert( separator(), -1, -1 ); // -----------
1641 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1642 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1644 mgr->insert( separator(), -1, -1 ); // -----------
1645 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1646 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1648 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1650 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1652 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1653 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1654 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1657 // create plugin actions and menus
1661 //=======================================================================
1662 // function : GeometryGUI::addPluginActions()
1664 //=======================================================================
1665 void GeometryGUI::addPluginActions()
1668 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1669 if (!resMgr) return;
1671 // Find names of a resource XML files ("GEOMActions.xml" and others);
1673 char* cenv = getenv("GEOM_PluginsList");
1675 PluginsXml.sprintf("%s", cenv);
1677 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1678 if (PluginsXmlList.count() == 0) return;
1680 // get full names of xml files from PluginsXmlList
1681 QStringList xmlFiles;
1682 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1683 for (int i = 0; i < PluginsXmlList.count(); i++) {
1684 PluginsXml = PluginsXmlList[ i ];
1686 // Find full path to the resource XML file
1687 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1688 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1689 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1690 if ( !xmlFile.isEmpty() )
1691 xmlFiles.append( xmlFile );
1694 // create "Advanced Operations" menu and corresponding toolbar
1695 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1696 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1697 int id = GEOMOp::OpLastOperationID; // TODO?
1700 QString aNoAccessFiles;
1701 for (int i = 0; i < xmlFiles.count(); i++) {
1702 QString xmlFile = xmlFiles[ i ];
1704 QFile file (xmlFile);
1705 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1708 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1709 ASSERT(aXmlHandler);
1711 QXmlInputSource source (&file);
1712 QXmlSimpleReader reader;
1713 reader.setContentHandler(aXmlHandler);
1714 reader.setErrorHandler(aXmlHandler);
1715 bool ok = reader.parse(source);
1719 // bind action lib and label to its ID for activateOperation() method proper work
1720 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1722 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1723 while (anActionsIter.hasNext()) {
1724 GEOMGUI_ActionData anActionData = anActionsIter.next();
1726 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1727 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1728 anActionData.myIcon.toLatin1().constData());
1730 // path to action in menu
1731 QStringList smenus = anActionData.myMenu.split( "/" );
1732 QString actionName = smenus.last();
1733 actionName = actionName.toUpper().prepend("MEN_");
1734 smenus.removeLast();
1736 // path to action in toolbar
1737 QStringList stools = anActionData.myTooltip.split( "/" );
1738 QString actionTool = stools.last();
1739 actionTool = actionTool.toUpper().prepend("TOP_");
1740 stools.removeLast();
1742 QString actionStat = anActionData.myStatusBar;
1743 actionStat = actionStat.toUpper().prepend("STB_");
1745 createAction(id, // ~ anActionData.myLabel
1746 tr(actionTool.toLatin1().constData()),
1748 tr(actionName.toLatin1().constData()),
1749 tr(actionStat.toLatin1().constData()),
1751 application()->desktop(),
1753 this, SLOT(OnGUIEvent()),
1754 QString() /*shortcutAction*/);
1757 foreach (QString subMenu, smenus) {
1758 subMenu = subMenu.toUpper().prepend("MEN_");
1759 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1761 //createMenu(id, pluginMenuId, -1);
1762 createMenu(id, menuId, -1);
1764 QString subTool = stools[0];
1765 subTool = subTool.toUpper().prepend("TOOL_");
1766 int toolId = createTool(tr(subTool.toLatin1().constData()));
1767 //createTool(id, advancedTbarId);
1768 createTool(id, toolId);
1770 // add action id to map
1771 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1772 myPluginActions[id] = anAction;
1778 SUIT_MessageBox::critical(application()->desktop(),
1779 tr("INF_PARSE_ERROR"),
1780 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1784 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1785 if (aNoAccessFiles.isEmpty())
1786 aNoAccessFiles = xmlFile;
1788 aNoAccessFiles += ", " + xmlFile;
1790 } // end loop on xmlFiles
1792 if (!aNoAccessFiles.isEmpty()) {
1793 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1794 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1795 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1799 //=======================================================================
1800 // function : GeometryGUI::activateModule()
1801 // purpose : Called when GEOM module is activated
1802 //=======================================================================
1803 bool GeometryGUI::activateModule( SUIT_Study* study )
1805 if ( CORBA::is_nil( myComponentGeom ) )
1808 bool res = SalomeApp_Module::activateModule( study );
1812 setMenuShown( true );
1813 setToolShown( true );
1815 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1816 PyGILState_STATE gstate = PyGILState_Ensure();
1817 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1818 if ( !pluginsmanager ) {
1822 PyObjWrapper result =
1823 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1824 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1825 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1829 PyGILState_Release(gstate);
1830 // end of GEOM plugins loading
1832 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1833 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1835 // Reset actions accelerator keys
1836 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1837 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1838 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1840 GUIMap::Iterator it;
1841 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1842 it.value()->activate( application()->desktop() );
1844 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1846 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1847 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1848 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1850 if ( !myCreationInfoWdg )
1851 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1852 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1853 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1856 SALOME_ListIO selected;
1857 sm->selectedObjects( selected );
1858 sm->clearSelected();
1860 SUIT_ViewManager* vm;
1861 ViewManagerList OCCViewManagers, VTKViewManagers;
1863 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1864 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1865 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1866 onViewManagerAdded(vm);
1868 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1869 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1870 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1871 onViewManagerAdded(vm);
1873 sm->setSelectedObjects( selected, true ); //NPAL 19674
1875 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1877 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1879 // 0020836 (Basic vectors and origin)
1880 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1881 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1882 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1884 _PTR(Study) studyDS = appStudy->studyDS();
1886 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1887 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1888 createOriginAndBaseVectors();
1896 //=======================================================================
1897 // function : GeometryGUI::deactivateModule()
1898 // purpose : Called when GEOM module is deactivated
1899 //=======================================================================
1900 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1902 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1904 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1906 setMenuShown( false );
1907 setToolShown( false );
1909 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1910 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1912 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1914 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1915 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1916 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1917 myCreationInfoWdg = 0;
1919 EmitSignalCloseAllDialogs();
1921 GUIMap::Iterator it;
1922 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1923 it.value()->deactivate();
1925 // Unset actions accelerator keys
1926 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1927 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1928 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1930 qDeleteAll(myOCCSelectors);
1931 myOCCSelectors.clear();
1932 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1934 qDeleteAll(myVTKSelectors);
1935 myVTKSelectors.clear();
1936 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1938 return SalomeApp_Module::deactivateModule( study );
1941 //=======================================================================
1942 // function : onWindowActivated()
1943 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1944 //=======================================================================
1945 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1950 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1951 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1953 // disable non-OCC viewframe menu commands
1954 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1955 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1956 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1957 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1958 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1959 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1960 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1962 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1963 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1964 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1965 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1967 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1970 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1972 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1973 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1974 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1975 if ( myCreationInfoWdg )
1976 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1979 void GeometryGUI::viewManagers( QStringList& lst ) const
1981 lst.append( OCCViewer_Viewer::Type() );
1984 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1986 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1988 qDebug( "connect" );
1989 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1990 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1991 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1992 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1993 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1994 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1995 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1996 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1998 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1999 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2001 // disable OCC selectors
2002 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2003 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2004 while ( itOCCSel.hasNext() )
2005 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2006 sr->setEnabled(true);
2008 else if ( vm->getType() == SVTK_Viewer::Type() )
2010 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2011 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2013 // disable VTK selectors
2014 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2015 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2016 while ( itVTKSel.hasNext() )
2017 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2018 sr->setEnabled(true);
2022 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2024 SUIT_ViewModel* viewer = vm->getViewModel();
2025 if ( vm->getType() == OCCViewer_Viewer::Type() )
2027 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2028 while ( itOCCSel.hasNext() )
2029 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2030 if ( sr->viewer() == viewer )
2032 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2036 if ( vm->getType() == SVTK_Viewer::Type() )
2038 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2039 while ( itVTKSel.hasNext() )
2040 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2041 if ( sr->viewer() == viewer )
2043 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2049 //================================================================================
2051 * \brief Slot called when selection changed. Shows creation info of a selected object
2053 //================================================================================
2055 void GeometryGUI::updateCreationInfo()
2057 if ( myCreationInfoWdg )
2058 myCreationInfoWdg->clear();
2060 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2061 // if ( !myCreationInfoWdg->isVisible() )
2064 // look for a sole selected GEOM_Object
2065 GEOM::GEOM_BaseObject_var geomObj;
2067 SALOME_ListIO selected;
2068 getApp()->selectionMgr()->selectedObjects( selected );
2070 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2071 SALOME_ListIteratorOfListIO selIt( selected );
2072 for ( ; selIt.More(); selIt.Next() )
2074 Handle(SALOME_InteractiveObject) io = selIt.Value();
2075 if ( !io->hasEntry() ) continue;
2076 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2077 if ( !sobj ) continue;
2078 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2079 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2080 if ( !gobj->_is_nil() )
2082 if ( !geomObj->_is_nil() )
2083 return; // several GEOM objects selected
2087 if ( geomObj->_is_nil() ) return;
2089 // pass creation info of geomObj to myCreationInfoWdg
2091 if ( myCreationInfoWdg ) {
2093 QString operationName;
2094 myCreationInfoWdg->setOperation( icon, operationName );
2098 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2100 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2101 QString name = info->operationName.in();
2102 if ( !name.isEmpty() ) {
2103 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2104 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2105 if ( operationName.startsWith( "MEN_" ))
2106 operationName = name; // no translation
2107 myCreationInfoWdg->setOperation( icon, operationName );
2109 for ( size_t i = 0; i < info->params.length(); ++i )
2110 myCreationInfoWdg->addParam( info->params[i].name.in(),
2111 info->params[i].value.in() );
2120 void GeometryGUI::onAutoBringToFront()
2122 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2123 if( !isAutoBringToFront )
2126 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2127 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2130 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2131 if (!appStudy) return;
2133 GEOM_Displayer displayer( appStudy );
2135 SALOME_View* window = displayer.GetActiveView();
2136 if ( !window ) return;
2138 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2140 SALOME_ListIO selected;
2141 getApp()->selectionMgr()->selectedObjects( selected );
2142 if (!myTopLevelIOList.IsEmpty())
2144 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2146 Handle( SALOME_InteractiveObject ) io = It.Value();
2147 bool isSelected = false;
2148 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2150 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2151 if( io->isSame( sel_io ) )
2154 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2156 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2157 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2162 myTopLevelIOList.Assign(selected);
2163 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2165 Handle( SALOME_InteractiveObject ) io = It.Value();
2166 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2167 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2170 displayer.UpdateViewer();
2171 GeometryGUI::Modified();
2174 void GeometryGUI::updateFieldColorScale()
2176 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2178 GEOM_Displayer aDisplayer( aStudy );
2179 aDisplayer.UpdateColorScale();
2183 QString GeometryGUI::engineIOR() const
2185 if ( !CORBA::is_nil( GetGeomGen() ) )
2186 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2190 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2191 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2193 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2195 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2197 theWidth = theHeight = 0;
2199 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2200 Handle(TColStd_HArray1OfByte) aTexture;
2202 Handle(Graphic3d_HArray1OfBytes) aTexture;
2206 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2207 aTexture = aTextureMap[ theId ];
2208 if ( aTexture.IsNull() ) {
2209 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2210 if ( !aInsOp->_is_nil() ) {
2211 CORBA::Long aWidth, aHeight;
2212 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2213 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2215 theHeight = aHeight;
2217 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2218 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2220 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2223 for (int i = 0; i < aStream->length(); i++)
2224 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2225 aTextureMap[ theId ] = aTexture;
2233 LightApp_Selection* GeometryGUI::createSelection() const
2235 return new GEOMGUI_Selection();
2238 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2240 SalomeApp_Module::contextMenuPopup( client, menu, title );
2242 getApp()->selectionMgr()->selectedObjects( lst );
2244 //Add submenu for predefined materials
2245 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2246 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2247 QtxPopupMgr* mgr = popupMgr();
2248 //get parrent for submenu
2249 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2251 QMenu* oldMenu = act->menu() ;
2256 QMenu* matMenu = new QMenu();
2257 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2259 //Get current material model for the object
2261 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2262 if ( anApp && anApp->activeViewManager() ) {
2263 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2265 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2268 QString curModel = "";
2269 if ( v.canConvert<QString>() ) curModel = v.toString();
2270 // get list of all predefined materials
2271 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2273 foreach ( QString material, materials )
2275 QAction* menAct = matMenu->addAction( material );
2276 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2277 signalMapper->setMapping( menAct, material );
2278 menAct->setCheckable( true );
2279 // Set checked if this material is current
2280 Material_Model aModel;
2281 aModel.fromResources( material );
2282 if ( !found && aModel.toProperties() == curModel ) {
2283 menAct->setChecked( true );
2287 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2288 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2289 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2290 this, SLOT( OnSetMaterial( const QString & ) ) );
2291 act->setMenu( matMenu );
2295 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2296 Handle(SALOME_InteractiveObject) io = lst.First();
2297 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2298 _PTR(Study) study = appStudy->studyDS();
2299 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2301 QString aName = QString( obj->GetName().c_str() );
2302 aName.remove( QRegExp("\\s+$") );
2308 void GeometryGUI::OnSetMaterial(const QString& theName)
2310 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2314 void GeometryGUI::createPreferences()
2316 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2318 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2319 setPreferenceProperty( genGroup, "columns", 2 );
2321 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2322 LightApp_Preferences::Selector,
2323 "Geometry", "display_mode" );
2325 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2326 LightApp_Preferences::Color, "Geometry", "shading_color" );
2328 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2329 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2331 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2332 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2334 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2335 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2337 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2338 LightApp_Preferences::Color, "Geometry", "line_color" );
2340 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2341 LightApp_Preferences::Color, "Geometry", "point_color" );
2343 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2344 LightApp_Preferences::Color, "Geometry", "isos_color" );
2346 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2347 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2349 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2350 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2352 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2353 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2355 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2356 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2358 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2359 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2361 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2362 LightApp_Preferences::Selector,
2363 "Geometry", "material" );
2365 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2366 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2372 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2373 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2375 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2378 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2379 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2381 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2384 for (int i = 0; i < nb; i++) {
2385 setPreferenceProperty( wd[i], "min", 1 );
2386 setPreferenceProperty( wd[i], "max", 5 );
2389 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2390 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2392 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2393 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2395 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2396 setPreferenceProperty( aDimGroupId, "columns", 2 );
2398 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2399 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2401 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2402 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2404 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2405 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2407 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2408 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2410 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2411 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2412 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2414 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2415 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2417 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2418 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2419 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2421 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2422 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2424 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2425 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2427 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2428 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2430 QStringList aListOfLengthUnits;
2431 aListOfLengthUnits << "m";
2432 aListOfLengthUnits << "cm";
2433 aListOfLengthUnits << "mm";
2434 aListOfLengthUnits << "in.";
2435 aListOfLengthUnits << "ft.";
2437 QStringList aListOfAngUnits;
2438 aListOfAngUnits << "rad";
2439 aListOfAngUnits << "deg";
2441 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2442 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2444 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2445 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2447 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2448 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2449 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2451 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2452 setPreferenceProperty( isoGroup, "columns", 2 );
2453 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2454 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2455 setPreferenceProperty( isoU, "min", 0 );
2456 setPreferenceProperty( isoU, "max", 100000 );
2457 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2458 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2459 setPreferenceProperty( isoV, "min", 0 );
2460 setPreferenceProperty( isoV, "max", 100000 );
2462 // Quantities with individual precision settings
2463 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2464 setPreferenceProperty( precGroup, "columns", 2 );
2466 const int nbQuantities = 8;
2467 int prec[nbQuantities], ii = 0;
2468 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2469 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2470 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2471 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2472 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2473 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2474 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2475 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2476 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2477 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2478 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2479 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2480 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2481 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2482 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2483 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2485 // Set property for precision value for spinboxes
2486 for ( ii = 0; ii < nbQuantities; ii++ ){
2487 setPreferenceProperty( prec[ii], "min", -14 );
2488 setPreferenceProperty( prec[ii], "max", 14 );
2489 setPreferenceProperty( prec[ii], "precision", 2 );
2492 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2493 setPreferenceProperty( VertexGroup, "columns", 2 );
2495 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2496 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2498 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2499 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2501 // Set property for default display mode
2502 QStringList aModesList;
2503 aModesList.append( tr("MEN_WIREFRAME") );
2504 aModesList.append( tr("MEN_SHADING") );
2505 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2506 aModesList.append( tr("MEN_TEXTURE") );
2508 QList<QVariant> anIndexesList;
2509 anIndexesList.append(0);
2510 anIndexesList.append(1);
2511 anIndexesList.append(2);
2512 anIndexesList.append(3);
2514 setPreferenceProperty( dispmode, "strings", aModesList );
2515 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2517 // Set property for top level display mode
2518 QStringList aTopModesList;
2519 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2520 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2521 aTopModesList.append( tr("MEN_WIREFRAME") );
2522 aTopModesList.append( tr("MEN_SHADING") );
2523 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2525 QList<QVariant> aTopIndexesList;
2526 aTopIndexesList.append(0);
2527 aTopIndexesList.append(1);
2528 aTopIndexesList.append(2);
2529 aTopIndexesList.append(3);
2530 aTopIndexesList.append(4);
2532 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2533 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2535 // Set property for step value for spinboxes
2536 setPreferenceProperty( step, "min", 1 );
2537 setPreferenceProperty( step, "max", 10000 );
2538 setPreferenceProperty( step, "precision", 3 );
2540 // Set property for trandparency value for spinboxes
2541 setPreferenceProperty( transparency, "min", 0 );
2542 setPreferenceProperty( transparency, "max", 100 );
2544 // Set property for deflection value for spinboxes
2545 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2546 setPreferenceProperty( defl, "max", 1.0 );
2547 setPreferenceProperty( defl, "step", 1.0e-04 );
2548 setPreferenceProperty( defl, "precision", 6 );
2550 // Set property for default material
2551 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2553 // Set property vertex marker type
2554 QList<QVariant> aMarkerTypeIndicesList;
2555 QList<QVariant> aMarkerTypeIconsList;
2557 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2558 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2559 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2560 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2561 aMarkerTypeIndicesList << (i-1);
2562 aMarkerTypeIconsList << pixmap;
2565 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2566 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2568 // Set property for vertex marker scale
2569 QList<QVariant> aMarkerScaleIndicesList;
2570 QStringList aMarkerScaleValuesList;
2572 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2573 aMarkerScaleIndicesList << iii;
2574 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2577 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2578 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2580 // Scalar bar for field step presentation
2581 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2582 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2584 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2585 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2586 setPreferenceProperty( sbXPosition, "min", 0 );
2587 setPreferenceProperty( sbXPosition, "max", 1 );
2588 setPreferenceProperty( sbXPosition, "step", 0.05 );
2590 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2591 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2592 setPreferenceProperty( sbYPosition, "min", 0 );
2593 setPreferenceProperty( sbYPosition, "max", 1 );
2594 setPreferenceProperty( sbYPosition, "step", 0.05 );
2596 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2597 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2598 setPreferenceProperty( sbWidth, "min", 0 );
2599 setPreferenceProperty( sbWidth, "max", 1 );
2600 setPreferenceProperty( sbWidth, "step", 0.05 );
2602 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2603 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2604 setPreferenceProperty( sbHeight, "min", 0 );
2605 setPreferenceProperty( sbHeight, "max", 1 );
2606 setPreferenceProperty( sbHeight, "step", 0.05 );
2608 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2609 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2610 setPreferenceProperty( sbTextHeight, "min", 6 );
2611 setPreferenceProperty( sbTextHeight, "max", 24 );
2612 setPreferenceProperty( sbTextHeight, "step", 1 );
2614 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2615 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2616 setPreferenceProperty( sbNbIntervals, "min", 2 );
2617 setPreferenceProperty( sbNbIntervals, "max", 64 );
2618 setPreferenceProperty( sbNbIntervals, "step", 1 );
2620 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2621 setPreferenceProperty( originGroup, "columns", 2 );
2623 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2624 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2625 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2626 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2628 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2629 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2631 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2632 setPreferenceProperty( operationsGroup, "columns", 2 );
2634 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2635 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2637 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2639 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2641 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2642 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2644 QStringList aHierarchyTypeList;
2645 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2646 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2647 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2649 QList<QVariant> aHierarchyTypeIndexesList;
2650 aHierarchyTypeIndexesList.append(0);
2651 aHierarchyTypeIndexesList.append(1);
2652 aHierarchyTypeIndexesList.append(2);
2654 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2655 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2657 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2658 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2660 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2662 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2663 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2665 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2666 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2667 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2668 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2669 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2670 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2671 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2672 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2674 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2675 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2676 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2677 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2678 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2679 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2686 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2688 if (section == "Geometry") {
2689 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2690 if (param == QString("SettingsGeomStep")) {
2691 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2692 EmitSignalDefaultStepValueChanged(spin_step);
2694 else if (param == QString("toplevel_color")) {
2695 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2696 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2698 else if (param == QString("toplevel_dm")) {
2699 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2701 else if (param == QString("scalar_bar_x_position") ||
2702 param == QString("scalar_bar_y_position") ||
2703 param == QString("scalar_bar_width") ||
2704 param == QString("scalar_bar_height") ||
2705 param == QString("scalar_bar_text_height") ||
2706 param == QString("scalar_bar_nb_intervals")) {
2707 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2709 GEOM_Displayer aDisplayer( aStudy );
2710 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2711 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2714 else if ( param == QString("dimensions_color") ||
2715 param == QString("dimensions_line_width") ||
2716 param == QString("dimensions_font_height") ||
2717 param == QString("dimensions_arrow_length") ||
2718 param == QString("dimensions_show_units") ||
2719 param == QString("dimensions_length_units") ||
2720 param == QString("dimensions_angle_units") )
2722 SalomeApp_Application* anApp = getApp();
2728 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2734 GEOM_Displayer aDisplayer( aStudy );
2736 ViewManagerList aVMs;
2737 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2738 ViewManagerList::Iterator anIt = aVMs.begin();
2739 for ( ; anIt != aVMs.end(); ++anIt )
2741 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2747 SALOME_ListIO aVisible;
2748 aViewer->GetVisible( aVisible );
2749 aDisplayer.Redisplay( aVisible, false, aViewer );
2752 aDisplayer.UpdateViewer();
2754 else if ( param.startsWith( "dependency_tree") )
2755 emit SignalDependencyTreeParamChanged( section, param );
2759 LightApp_Displayer* GeometryGUI::displayer()
2762 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2766 void GeometryGUI::setLocalSelectionMode(const int mode)
2768 myLocalSelectionMode = mode;
2771 int GeometryGUI::getLocalSelectionMode() const
2773 return myLocalSelectionMode;
2776 const char gSeparator = '_'; // character used to separate parameter names
2777 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2780 * \brief Store visual parameters
2782 * This method is called just before the study document is saved.
2783 * Store visual parameters in AttributeParameter attribute(s)
2785 void GeometryGUI::storeVisualParameters (int savePoint)
2787 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2788 if ( !appStudy || !appStudy->studyDS() )
2790 _PTR(Study) studyDS = appStudy->studyDS();
2792 // componentName is used for encoding of entries when storing them in IParameters
2793 std::string componentName = myComponentGeom->ComponentDataType();
2794 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2795 //if (!aSComponent) return;
2798 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2799 componentName.c_str(),
2801 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2803 QSet<QString> anEntriesToStoreShared;
2804 QList<SUIT_ViewManager*> lst;
2805 QList<SUIT_ViewManager*>::Iterator it;
2807 // main cycle to store parameters of displayed objects
2809 getApp()->viewManagers(lst);
2810 for (it = lst.begin(); it != lst.end(); it++) {
2811 SUIT_ViewManager* vman = *it;
2812 QString vType = vman->getType();
2813 int aMgrId = vman->getGlobalId();
2814 // saving VTK actors properties
2815 QVector<SUIT_ViewWindow*> views = vman->getViews();
2816 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2817 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2818 ObjMap::ConstIterator o_it = anObjects.begin();
2819 for (; o_it != anObjects.end(); o_it++) {
2820 const PropMap aProps = o_it.value();
2822 //Check that object exists in the study
2823 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2824 if ( !obj || !(aProps.count() > 0))
2826 // entry is "encoded" = it does NOT contain component adress, since it is a
2827 // subject to change on next component loading
2829 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2831 _PTR(GenericAttribute) anAttr;
2832 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2835 // remember entry of object to store shared GEOM properties
2836 // (e.g. dimension properties).
2837 if ( vType == OCCViewer_Viewer::Type() )
2839 anEntriesToStoreShared.insert( o_it.key() );
2842 QString param, occParam = vType;
2843 occParam += GEOM::sectionSeparator();
2844 occParam += QString::number(aMgrId);
2845 occParam += GEOM::sectionSeparator();
2847 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2848 param = occParam + GEOM::propertyName( GEOM::Visibility );
2849 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2852 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2853 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2854 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2857 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2858 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2860 val << QString::number(c.redF());
2861 val << QString::number(c.greenF());
2862 val << QString::number(c.blueF());
2863 param = occParam + GEOM::propertyName( GEOM::Color );
2864 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2867 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2868 param = occParam + GEOM::propertyName( GEOM::Texture );
2869 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2872 if (vType == SVTK_Viewer::Type()) {
2873 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2874 param = occParam + GEOM::propertyName( GEOM::Opacity );
2875 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2877 } else if (vType == SOCC_Viewer::Type()) {
2878 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2879 param = occParam + GEOM::propertyName( GEOM::Transparency );
2880 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2883 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2884 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2885 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2889 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2890 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2891 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2894 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2895 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2896 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2899 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2900 param = occParam + GEOM::propertyName( GEOM::Vertices );
2901 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2904 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2905 param = occParam + GEOM::propertyName( GEOM::Deflection );
2906 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2909 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2910 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2911 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2912 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2915 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2916 param = occParam + GEOM::propertyName( GEOM::Material );
2917 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2920 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2921 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2922 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2925 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2926 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2927 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2929 } // object iterator
2931 } // for (viewManagers)
2933 // store dimension attributes of objects:
2934 // since the displayed object always persists in property map, we remember the object entries
2935 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2936 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2937 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2938 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2940 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2941 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2943 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2945 if ( aDimensions.GetNumber() == 0 )
2950 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2955 * \brief Restore visual parameters
2957 * This method is called after the study document is opened.
2958 * Restore visual parameters from AttributeParameter attribute(s)
2960 void GeometryGUI::restoreVisualParameters (int savePoint)
2962 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2963 if (!appStudy || !appStudy->studyDS())
2965 _PTR(Study) studyDS = appStudy->studyDS();
2967 // componentName is used for encoding of entries when storing them in IParameters
2968 std::string componentName = myComponentGeom->ComponentDataType();
2969 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2970 //if (!aSComponent) return;
2973 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2974 componentName.c_str(),
2976 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2978 std::vector<std::string> entries = ip->getEntries();
2980 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2982 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2983 QString entry (ip->decodeEntry(*entIt).c_str());
2985 // Check that the entry corresponds to a real object in the Study
2986 // as the object may be deleted or modified after the visual state is saved.
2987 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2988 if (!so) continue; //Skip the not existent entry
2990 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2991 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2993 std::vector<std::string>::iterator namesIt = paramNames.begin();
2994 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2996 // actors are stored in a map after displaying of them for
2997 // quicker access in the future: map < viewID to actor >
2998 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2999 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3001 QString viewerTypStr;
3002 QString viewIndexStr;
3004 QVector<PropMap> aListOfMap;
3006 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3008 // visual parameters are stored in strings as follows:
3009 // 1) ViewerType_ViewIndex_ParamName
3010 // 2) ViewerType_ParamName (shared for GEOM module)
3011 // '_' is used as separator and should not be used in viewer type or parameter names.
3012 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3014 bool isShared = lst.size() == 2;
3015 bool isViewer = lst.size() == 3;
3016 if ( !isShared && !isViewer )
3021 // shared visual parameters
3024 QString aParamNameStr( lst[1] );
3025 QString aValuesStr( (*valuesIt).c_str() );
3027 // shared dimension properties are stored as attribute
3028 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3030 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3031 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3037 // per view visual parameters
3038 viewerTypStr = lst[0];
3039 viewIndexStr = lst[1];
3040 QString paramNameStr = lst[2];
3043 viewIndex = viewIndexStr.toUInt(&ok);
3044 if (!ok) // bad conversion of view index to integer
3047 if ((viewIndex + 1) > aListOfMap.count()) {
3048 aListOfMap.resize(viewIndex + 1);
3051 QString val((*valuesIt).c_str());
3052 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3053 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3054 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3055 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3056 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3057 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3058 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3059 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3060 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3061 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3062 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3063 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3064 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3065 QStringList rgb = val.split(GEOM::subSectionSeparator());
3066 if (rgb.count() == 3) {
3067 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3068 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3070 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3071 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3072 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3073 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3074 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3075 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3076 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3077 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3078 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3079 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3080 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3081 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3082 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3083 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3084 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3085 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3087 } // for names/parameters iterator
3089 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3091 for (int index = 0; index < aListOfMap.count(); index++) {
3093 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
3095 //Get Visibility property of the current PropMap
3096 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3097 SUIT_ViewManager* vman = lst.at(index);
3098 SUIT_ViewModel* vmodel = vman->getViewModel();
3099 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3102 } // for entries iterator
3104 // update all VTK and OCC views
3105 QList<SUIT_ViewManager*> lst;
3106 getApp()->viewManagers(lst);
3107 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3108 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3111 if (vmodel->getType() == SVTK_Viewer::Type()) {
3112 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3113 vtkView->getRenderer()->ResetCameraClippingRange();
3116 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3117 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3118 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3125 void GeometryGUI::onViewAboutToShow()
3127 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3128 QAction* a = action( GEOMOp::OpSwitchVectors );
3129 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3131 a->setEnabled(true);
3132 bool vmode = window->property("VectorsMode").toBool();
3133 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3134 aVerticesAction->setEnabled(true);
3135 vmode = window->property("VerticesMode").toBool();
3136 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3138 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3139 a->setEnabled(false);
3140 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3141 aVerticesAction->setEnabled(false);
3146 \brief Return action by id
3147 \param id identifier of the action
3150 QAction* GeometryGUI::getAction(const int id) {
3155 \brief GEOM module message handler
3157 This method can be re-implemented in the subclasses.
3158 This is a GEOM module message handler.
3160 \param msg the message received.
3162 void GeometryGUI::message(const QString& msg)
3165 QStringList data = msg.split("/");
3166 const int nbStrings = data.count();
3168 if (nbStrings > 0) {
3169 if (data[0] == "modified") {
3171 QString anIOR = nbStrings > 1 ? data[1] : QString();
3173 if ( anIOR.isEmpty() ) {
3177 // Get the geom object.
3178 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3180 // Clear the shape buffer
3181 GeometryGUI::ClearShapeBuffer (anObj);
3187 \brief Clears the shape buffer.
3189 This is a static method. It clears the shape buffer.
3191 \param theObj the object
3193 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3195 if ( CORBA::is_nil( theObj ) )
3198 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3199 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3200 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3202 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3207 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3212 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3216 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3217 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3218 _PTR(GenericAttribute) anAttr;
3219 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3220 _PTR(AttributeIOR) anIOR ( anAttr );
3221 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3222 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3228 \brief Returns the object from IOR.
3230 This is a static method. It returns the object from its IOR.
3232 \param IOR object IOR
3233 \return GEOM object.
3235 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3237 GEOM::GEOM_Object_var geomObj;
3238 if ( !IOR.isEmpty() ) {
3239 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3240 ( IOR.toLatin1().constData() );
3241 if ( !CORBA::is_nil( corbaObj ) )
3242 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3244 return geomObj._retn();
3248 \brief Returns IOR of the object.
3250 This is a static method. It returns the object's IOR.
3252 \param object the GEOM object.
3253 \return object's IOR.
3255 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3258 if ( !CORBA::is_nil( object ) ) {
3259 CORBA::String_var anIOR =
3260 SalomeApp_Application::orb()->object_to_string( object );
3267 \brief Check if this object is can't be renamed in place
3269 This method can be re-implemented in the subclasses.
3270 Return true in case if object isn't reference or component (module root).
3272 \param entry column id
3273 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3275 bool GeometryGUI::renameAllowed( const QString& entry) const {
3277 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3278 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3279 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3281 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3285 Rename object by entry.
3286 \param entry entry of the object
3287 \param name new name of the object
3288 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3290 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3292 bool result = false;
3294 SalomeApp_Application* app =
3295 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3296 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3301 _PTR(Study) aStudy = appStudy->studyDS();
3306 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3308 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3312 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3313 _PTR(GenericAttribute) anAttr;
3315 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3316 _PTR(AttributeName) aName (anAttr);
3318 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3319 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3320 if (!CORBA::is_nil(anObj)) {
3321 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3322 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3330 void GeometryGUI::updateMaterials()
3332 LightApp_Preferences* pref = preferences();
3334 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3335 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3336 if ( !materials.contains( currentMaterial ) )
3337 // user material set as default in the preferences, might be removed
3338 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3340 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3342 setPreferenceProperty( prefItem->id(),
3343 "strings", materials );
3344 prefItem->retrieve();
3350 \brief Check if the module allows "drag" operation of its objects.
3352 Overloaded from LightApp_Module class.
3354 This function is a part of the general drag-n-drop mechanism.
3355 The goal of this function is to check data object passed as a parameter
3356 and decide if it can be dragged or no.
3358 \param what data object being tested for drag operation
3359 \return \c true if module allows dragging of the specified object
3360 \sa isDropAccepted(), dropObjects()
3362 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3364 // we allow dragging object under root and object from folder
3365 int aLevel = what->level();
3366 bool anObjectInFolder = false;
3368 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3370 _PTR(SObject) aSO = dataObj->object();
3372 _PTR(GenericAttribute) anAttr;
3373 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3374 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3375 _PTR(AttributeLocalID) aLocalID( anAttr );
3376 anObjectInFolder = aLocalID->Value() == 999;
3381 return aLevel == 2 || anObjectInFolder;
3385 \brief Check if the module allows "drop" operation on the given object.
3387 Overloaded from LightApp_Module class.
3389 This function is a part of the general drag-n-drop mechanism.
3390 The goal of this function is to check data object passed as a parameter
3391 and decide if it can be used as a target for the "drop" operation.
3392 The processing of the drop operation itself is done in the dropObjects() function.
3394 \param where target data object
3395 \return \c true if module supports dropping on the \a where data object
3396 \sa isDraggable(), dropObjects()
3398 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3400 // we allow dropping into folder and top-level GEOM object
3401 int aLevel = where->level();
3402 bool isFolder = false;
3404 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3406 _PTR(SObject) aSO = dataObj->object();
3408 _PTR(GenericAttribute) anAttr;
3409 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3410 _PTR(AttributeLocalID) aLocalID( anAttr );
3411 isFolder = aLocalID->Value() == 999;
3416 return aLevel == 1 || isFolder;
3420 \brief Complete drag-n-drop operation.
3422 Overloaded from LightApp_Module class.
3424 This function is a part of the general drag-n-drop mechanism.
3425 Its goal is to handle dropping of the objects being dragged according
3426 to the chosen operation (move). The dropping is performed in the
3427 context of the parent data object \a where and the \a row (position in the
3428 children index) at which the data should be dropped. If \a row is equal to -1,
3429 this means that objects are added to the end of the children list.
3431 \param what objects being dropped
3432 \param where target data object
3433 \param row child index at which the drop operation is performed
3434 \param action drag-n-drop operation (Qt::DropAction) - move
3436 \sa isDraggable(), isDropAccepted()
3438 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3439 const int row, Qt::DropAction action )
3441 if (action != Qt::CopyAction && action != Qt::MoveAction)
3442 return; // unsupported action
3444 // get parent object
3445 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3446 if ( !dataObj ) return; // wrong parent
3447 _PTR(SObject) parentObj = dataObj->object();
3449 // Find the current Study and StudyBuilder
3450 _PTR(Study) aStudy = parentObj->GetStudy();
3451 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3452 // collect all parents of the target node
3453 QStringList parentIDs;
3454 _PTR(SObject) parent = parentObj;
3455 while( !parent->IsNull() ) {
3456 parentIDs << parent->GetID().c_str();
3457 parent = aUseCaseBuilder->GetFather(parent);
3460 // collect objects being dropped
3461 GEOM::object_list_var objects = new GEOM::object_list();
3462 objects->length( what.count() );
3464 for ( int i = 0; i < what.count(); i++ ) {
3465 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3466 if ( !dataObj ) continue; // skip wrong objects
3467 _PTR(SObject) sobj = dataObj->object();
3468 // check that dropped object is not a parent of target object
3469 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3470 return; // it's not allowed to move node into it's child
3472 objects[i] = _CAST(SObject, sobj)->GetSObject();
3475 objects->length( count );
3477 // call engine function
3478 GetGeomGen()->Move( objects.in(), // what
3479 _CAST(SObject, parentObj)->GetSObject(), // where
3482 // update Object browser
3483 getApp()->updateObjectBrowser( false );