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" ), QString( "GEOMBasic" ) );
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" ), QString( "GEOMSketch" ) );
1363 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1364 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1366 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
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" ), QString( "GEOMBlocks" ) );
1377 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1378 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1380 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
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" ), QString( "GEOMGeneration" ) );
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" ), QString( "GEOMTransformation" ) );
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" ), QString( "GEOMOperations" ) );
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" ), QString( "GEOMModification" ) );
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" ), QString( "GEOMBuild" ) );
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" ), QString( "GEOMMeasures" ) );
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" ), QString( "GEOMPictures" ) );
1456 createTool( GEOMOp::OpPictureImport, picturesTbId );
1458 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1461 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ), QString( "GEOMImportExportXAO" ) );
1462 createTool( GEOMOp::OpExportXAO, impexpTbId );
1463 createTool( GEOMOp::OpImportXAO, impexpTbId );
1465 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ), QString( "GEOMAdvanced" ) );
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 ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1544 // material properties
1545 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1546 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1549 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1550 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1552 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1553 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1554 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1556 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1557 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1559 mgr->insert( separator(), -1, -1 ); // -----------
1560 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1561 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1562 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1563 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1564 mgr->insert( separator(), -1, -1 ); // -----------
1566 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1567 onlyComponent = "((type='Component') and selcount=1)",
1568 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1569 types = "'Shape' 'Group' 'FieldStep'";
1571 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1572 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1574 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1575 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1577 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1578 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1580 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1582 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1583 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1584 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1585 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1586 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1587 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1588 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1589 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1590 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1591 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1592 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1593 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1594 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1595 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1596 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1597 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1598 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1599 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1600 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1601 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1602 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1603 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1604 mgr->insert( separator(), selectonlyId, -1);
1605 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1606 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1607 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1608 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1609 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1610 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1611 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1613 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1615 mgr->insert( separator(), -1, -1 ); // -----------
1616 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1617 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1618 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1619 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1621 mgr->insert( separator(), -1, -1 ); // -----------
1622 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1623 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1625 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1626 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1628 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1629 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1631 mgr->insert( separator(), -1, -1 ); // -----------
1632 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1633 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1635 mgr->insert( separator(), -1, -1 ); // -----------
1636 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1637 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1639 mgr->insert( separator(), -1, -1 ); // -----------
1640 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1641 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1643 mgr->insert( separator(), -1, -1 ); // -----------
1644 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1645 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1647 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1649 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1651 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1652 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1653 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1656 // create plugin actions and menus
1660 //=======================================================================
1661 // function : GeometryGUI::addPluginActions()
1663 //=======================================================================
1664 void GeometryGUI::addPluginActions()
1667 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1668 if (!resMgr) return;
1670 // Find names of a resource XML files ("GEOMActions.xml" and others);
1672 char* cenv = getenv("GEOM_PluginsList");
1674 PluginsXml.sprintf("%s", cenv);
1676 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1677 if (PluginsXmlList.count() == 0) return;
1679 // get full names of xml files from PluginsXmlList
1680 QStringList xmlFiles;
1681 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1682 for (int i = 0; i < PluginsXmlList.count(); i++) {
1683 PluginsXml = PluginsXmlList[ i ];
1685 // Find full path to the resource XML file
1686 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1687 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1688 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1689 if ( !xmlFile.isEmpty() )
1690 xmlFiles.append( xmlFile );
1693 // create "Advanced Operations" menu and corresponding toolbar
1694 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1695 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"), QString( "Advanced" ));
1696 int id = GEOMOp::OpLastOperationID; // TODO?
1699 QString aNoAccessFiles;
1700 for (int i = 0; i < xmlFiles.count(); i++) {
1701 QString xmlFile = xmlFiles[ i ];
1703 QFile file (xmlFile);
1704 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1707 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1708 ASSERT(aXmlHandler);
1710 QXmlInputSource source (&file);
1711 QXmlSimpleReader reader;
1712 reader.setContentHandler(aXmlHandler);
1713 reader.setErrorHandler(aXmlHandler);
1714 bool ok = reader.parse(source);
1718 // bind action lib and label to its ID for activateOperation() method proper work
1719 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1721 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1722 while (anActionsIter.hasNext()) {
1723 GEOMGUI_ActionData anActionData = anActionsIter.next();
1725 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1726 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1727 anActionData.myIcon.toLatin1().constData());
1729 // path to action in menu
1730 QStringList smenus = anActionData.myMenu.split( "/" );
1731 QString actionName = smenus.last();
1732 actionName = actionName.toUpper().prepend("MEN_");
1733 smenus.removeLast();
1735 // path to action in toolbar
1736 QStringList stools = anActionData.myTooltip.split( "/" );
1737 QString actionTool = stools.last();
1738 actionTool = actionTool.toUpper().prepend("TOP_");
1739 stools.removeLast();
1741 QString actionStat = anActionData.myStatusBar;
1742 actionStat = actionStat.toUpper().prepend("STB_");
1744 createAction(id, // ~ anActionData.myLabel
1745 tr(actionTool.toLatin1().constData()),
1747 tr(actionName.toLatin1().constData()),
1748 tr(actionStat.toLatin1().constData()),
1750 application()->desktop(),
1752 this, SLOT(OnGUIEvent()),
1753 QString() /*shortcutAction*/);
1756 foreach (QString subMenu, smenus) {
1757 subMenu = subMenu.toUpper().prepend("MEN_");
1758 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1760 //createMenu(id, pluginMenuId, -1);
1761 createMenu(id, menuId, -1);
1763 QString subTool = stools[0];
1764 subTool = subTool.toUpper().prepend("TOOL_");
1765 int toolId = createTool(tr(subTool.toLatin1().constData()), subTool.toLatin1().constData());
1766 //createTool(id, advancedTbarId);
1767 createTool(id, toolId);
1769 // add action id to map
1770 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1771 myPluginActions[id] = anAction;
1777 SUIT_MessageBox::critical(application()->desktop(),
1778 tr("INF_PARSE_ERROR"),
1779 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1783 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1784 if (aNoAccessFiles.isEmpty())
1785 aNoAccessFiles = xmlFile;
1787 aNoAccessFiles += ", " + xmlFile;
1789 } // end loop on xmlFiles
1791 if (!aNoAccessFiles.isEmpty()) {
1792 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1793 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1794 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1798 //=======================================================================
1799 // function : GeometryGUI::activateModule()
1800 // purpose : Called when GEOM module is activated
1801 //=======================================================================
1802 bool GeometryGUI::activateModule( SUIT_Study* study )
1804 if ( CORBA::is_nil( myComponentGeom ) )
1807 bool res = SalomeApp_Module::activateModule( study );
1811 setMenuShown( true );
1812 setToolShown( true );
1814 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1815 PyGILState_STATE gstate = PyGILState_Ensure();
1816 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1817 if ( !pluginsmanager ) {
1821 PyObjWrapper result =
1822 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1823 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1824 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1828 PyGILState_Release(gstate);
1829 // end of GEOM plugins loading
1831 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1832 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1834 // Reset actions accelerator keys
1835 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1836 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1837 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1839 GUIMap::Iterator it;
1840 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1841 it.value()->activate( application()->desktop() );
1843 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1845 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1846 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1847 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1849 if ( !myCreationInfoWdg )
1850 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1851 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1852 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1855 SALOME_ListIO selected;
1856 sm->selectedObjects( selected );
1857 sm->clearSelected();
1859 SUIT_ViewManager* vm;
1860 ViewManagerList OCCViewManagers, VTKViewManagers;
1862 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1863 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1864 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1865 onViewManagerAdded(vm);
1867 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1868 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1869 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1870 onViewManagerAdded(vm);
1872 sm->setSelectedObjects( selected, true ); //NPAL 19674
1874 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1876 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1878 // 0020836 (Basic vectors and origin)
1879 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1880 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1881 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1883 _PTR(Study) studyDS = appStudy->studyDS();
1885 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1886 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1887 createOriginAndBaseVectors();
1895 //=======================================================================
1896 // function : GeometryGUI::deactivateModule()
1897 // purpose : Called when GEOM module is deactivated
1898 //=======================================================================
1899 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1901 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1903 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1905 setMenuShown( false );
1906 setToolShown( false );
1908 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1909 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1911 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1913 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1914 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1915 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1916 myCreationInfoWdg = 0;
1918 EmitSignalCloseAllDialogs();
1920 GUIMap::Iterator it;
1921 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1922 it.value()->deactivate();
1924 // Unset actions accelerator keys
1925 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1926 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1927 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1929 qDeleteAll(myOCCSelectors);
1930 myOCCSelectors.clear();
1931 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1933 qDeleteAll(myVTKSelectors);
1934 myVTKSelectors.clear();
1935 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1937 return SalomeApp_Module::deactivateModule( study );
1940 //=======================================================================
1941 // function : onWindowActivated()
1942 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1943 //=======================================================================
1944 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1949 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1950 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1952 // disable non-OCC viewframe menu commands
1953 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1954 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1955 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1956 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1957 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1958 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1959 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1961 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1962 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1963 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1964 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1966 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1969 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1971 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1972 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1973 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1974 if ( myCreationInfoWdg )
1975 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1978 void GeometryGUI::viewManagers( QStringList& lst ) const
1980 lst.append( OCCViewer_Viewer::Type() );
1983 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1985 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1987 qDebug( "connect" );
1988 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1989 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1990 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1991 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1992 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1993 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1994 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1995 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1997 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1998 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2000 // disable OCC selectors
2001 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2002 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2003 while ( itOCCSel.hasNext() )
2004 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2005 sr->setEnabled(true);
2007 else if ( vm->getType() == SVTK_Viewer::Type() )
2009 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2010 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2012 // disable VTK selectors
2013 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2014 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2015 while ( itVTKSel.hasNext() )
2016 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2017 sr->setEnabled(true);
2021 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2023 SUIT_ViewModel* viewer = vm->getViewModel();
2024 if ( vm->getType() == OCCViewer_Viewer::Type() )
2026 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2027 while ( itOCCSel.hasNext() )
2028 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2029 if ( sr->viewer() == viewer )
2031 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2035 if ( vm->getType() == SVTK_Viewer::Type() )
2037 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2038 while ( itVTKSel.hasNext() )
2039 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2040 if ( sr->viewer() == viewer )
2042 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2048 //================================================================================
2050 * \brief Slot called when selection changed. Shows creation info of a selected object
2052 //================================================================================
2054 void GeometryGUI::updateCreationInfo()
2056 if ( myCreationInfoWdg )
2057 myCreationInfoWdg->clear();
2059 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2060 // if ( !myCreationInfoWdg->isVisible() )
2063 // look for a sole selected GEOM_Object
2064 GEOM::GEOM_BaseObject_var geomObj;
2066 SALOME_ListIO selected;
2067 getApp()->selectionMgr()->selectedObjects( selected );
2069 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2070 SALOME_ListIteratorOfListIO selIt( selected );
2071 for ( ; selIt.More(); selIt.Next() )
2073 Handle(SALOME_InteractiveObject) io = selIt.Value();
2074 if ( !io->hasEntry() ) continue;
2075 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2076 if ( !sobj ) continue;
2077 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2078 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2079 if ( !gobj->_is_nil() )
2081 if ( !geomObj->_is_nil() )
2082 return; // several GEOM objects selected
2086 if ( geomObj->_is_nil() ) return;
2088 // pass creation info of geomObj to myCreationInfoWdg
2090 if ( myCreationInfoWdg ) {
2092 QString operationName;
2093 myCreationInfoWdg->setOperation( icon, operationName );
2097 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2099 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2100 QString name = info->operationName.in();
2101 if ( !name.isEmpty() ) {
2102 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2103 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2104 if ( operationName.startsWith( "MEN_" ))
2105 operationName = name; // no translation
2106 myCreationInfoWdg->setOperation( icon, operationName );
2108 for ( size_t i = 0; i < info->params.length(); ++i )
2109 myCreationInfoWdg->addParam( info->params[i].name.in(),
2110 info->params[i].value.in() );
2119 void GeometryGUI::onAutoBringToFront()
2121 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2122 if( !isAutoBringToFront )
2125 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2126 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2129 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2130 if (!appStudy) return;
2132 GEOM_Displayer displayer( appStudy );
2134 SALOME_View* window = displayer.GetActiveView();
2135 if ( !window ) return;
2137 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2139 SALOME_ListIO selected;
2140 getApp()->selectionMgr()->selectedObjects( selected );
2141 if (!myTopLevelIOList.IsEmpty())
2143 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2145 Handle( SALOME_InteractiveObject ) io = It.Value();
2146 bool isSelected = false;
2147 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2149 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2150 if( io->isSame( sel_io ) )
2153 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2155 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2156 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2161 myTopLevelIOList.Assign(selected);
2162 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2164 Handle( SALOME_InteractiveObject ) io = It.Value();
2165 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2166 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2169 displayer.UpdateViewer();
2170 GeometryGUI::Modified();
2173 void GeometryGUI::updateFieldColorScale()
2175 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2177 GEOM_Displayer aDisplayer( aStudy );
2178 aDisplayer.UpdateColorScale();
2182 QString GeometryGUI::engineIOR() const
2184 if ( !CORBA::is_nil( GetGeomGen() ) )
2185 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2189 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2190 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2192 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2194 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2196 theWidth = theHeight = 0;
2198 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2199 Handle(TColStd_HArray1OfByte) aTexture;
2201 Handle(Graphic3d_HArray1OfBytes) aTexture;
2205 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2206 aTexture = aTextureMap[ theId ];
2207 if ( aTexture.IsNull() ) {
2208 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2209 if ( !aInsOp->_is_nil() ) {
2210 CORBA::Long aWidth, aHeight;
2211 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2212 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2214 theHeight = aHeight;
2216 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2217 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2219 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2222 for (int i = 0; i < aStream->length(); i++)
2223 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2224 aTextureMap[ theId ] = aTexture;
2232 LightApp_Selection* GeometryGUI::createSelection() const
2234 return new GEOMGUI_Selection();
2237 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2239 SalomeApp_Module::contextMenuPopup( client, menu, title );
2241 getApp()->selectionMgr()->selectedObjects( lst );
2243 //Add submenu for predefined materials
2244 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2245 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2246 QtxPopupMgr* mgr = popupMgr();
2247 //get parrent for submenu
2248 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2250 QMenu* oldMenu = act->menu() ;
2255 QMenu* matMenu = new QMenu();
2256 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2258 //Get current material model for the object
2260 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2261 if ( anApp && anApp->activeViewManager() ) {
2262 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2264 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2267 QString curModel = "";
2268 if ( v.canConvert<QString>() ) curModel = v.toString();
2269 // get list of all predefined materials
2270 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2272 foreach ( QString material, materials )
2274 QAction* menAct = matMenu->addAction( material );
2275 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2276 signalMapper->setMapping( menAct, material );
2277 menAct->setCheckable( true );
2278 // Set checked if this material is current
2279 Material_Model aModel;
2280 aModel.fromResources( material );
2281 if ( !found && aModel.toProperties() == curModel ) {
2282 menAct->setChecked( true );
2286 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2287 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2288 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2289 this, SLOT( OnSetMaterial( const QString & ) ) );
2290 act->setMenu( matMenu );
2294 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2295 Handle(SALOME_InteractiveObject) io = lst.First();
2296 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2297 _PTR(Study) study = appStudy->studyDS();
2298 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2300 QString aName = QString( obj->GetName().c_str() );
2301 aName.remove( QRegExp("\\s+$") );
2307 void GeometryGUI::OnSetMaterial(const QString& theName)
2309 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2313 void GeometryGUI::createPreferences()
2315 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2317 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2318 setPreferenceProperty( genGroup, "columns", 2 );
2320 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2321 LightApp_Preferences::Selector,
2322 "Geometry", "display_mode" );
2324 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2325 LightApp_Preferences::Color, "Geometry", "shading_color" );
2327 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2328 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2330 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2331 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2333 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2334 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2336 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2337 LightApp_Preferences::Color, "Geometry", "line_color" );
2339 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2340 LightApp_Preferences::Color, "Geometry", "point_color" );
2342 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2343 LightApp_Preferences::Color, "Geometry", "isos_color" );
2345 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2346 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2348 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2349 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2351 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2352 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2354 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2355 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2357 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2358 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2360 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2361 LightApp_Preferences::Selector,
2362 "Geometry", "material" );
2364 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2365 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2371 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2372 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2374 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2375 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2377 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2380 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2381 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2383 for (int i = 0; i < nb; i++) {
2384 setPreferenceProperty( wd[i], "min", 1 );
2385 setPreferenceProperty( wd[i], "max", 5 );
2388 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2389 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2391 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2392 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2394 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2395 setPreferenceProperty( aDimGroupId, "columns", 2 );
2397 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2398 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2400 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2401 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2403 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2404 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2406 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2407 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2409 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2410 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2411 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2413 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2414 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2416 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2417 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2418 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2420 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2421 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2423 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2424 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2426 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2427 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2429 QStringList aListOfLengthUnits;
2430 aListOfLengthUnits << "m";
2431 aListOfLengthUnits << "cm";
2432 aListOfLengthUnits << "mm";
2433 aListOfLengthUnits << "in.";
2434 aListOfLengthUnits << "ft.";
2436 QStringList aListOfAngUnits;
2437 aListOfAngUnits << "rad";
2438 aListOfAngUnits << "deg";
2440 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2441 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2443 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2444 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2446 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2447 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2448 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2450 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2451 setPreferenceProperty( isoGroup, "columns", 2 );
2452 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2453 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2454 setPreferenceProperty( isoU, "min", 0 );
2455 setPreferenceProperty( isoU, "max", 100000 );
2456 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2457 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2458 setPreferenceProperty( isoV, "min", 0 );
2459 setPreferenceProperty( isoV, "max", 100000 );
2461 // Quantities with individual precision settings
2462 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2463 setPreferenceProperty( precGroup, "columns", 2 );
2465 const int nbQuantities = 8;
2466 int prec[nbQuantities], ii = 0;
2467 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2468 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2469 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2470 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2471 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2472 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2473 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2474 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2475 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2476 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2477 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2478 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2479 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2480 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2481 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2482 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2484 // Set property for precision value for spinboxes
2485 for ( ii = 0; ii < nbQuantities; ii++ ){
2486 setPreferenceProperty( prec[ii], "min", -14 );
2487 setPreferenceProperty( prec[ii], "max", 14 );
2488 setPreferenceProperty( prec[ii], "precision", 2 );
2491 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2492 setPreferenceProperty( VertexGroup, "columns", 2 );
2494 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2495 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2497 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2498 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2500 // Set property for default display mode
2501 QStringList aModesList;
2502 aModesList.append( tr("MEN_WIREFRAME") );
2503 aModesList.append( tr("MEN_SHADING") );
2504 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2505 aModesList.append( tr("MEN_TEXTURE") );
2507 QList<QVariant> anIndexesList;
2508 anIndexesList.append(0);
2509 anIndexesList.append(1);
2510 anIndexesList.append(2);
2511 anIndexesList.append(3);
2513 setPreferenceProperty( dispmode, "strings", aModesList );
2514 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2516 // Set property for top level display mode
2517 QStringList aTopModesList;
2518 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2519 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2520 aTopModesList.append( tr("MEN_WIREFRAME") );
2521 aTopModesList.append( tr("MEN_SHADING") );
2522 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2524 QList<QVariant> aTopIndexesList;
2525 aTopIndexesList.append(0);
2526 aTopIndexesList.append(1);
2527 aTopIndexesList.append(2);
2528 aTopIndexesList.append(3);
2529 aTopIndexesList.append(4);
2531 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2532 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2534 // Set property for step value for spinboxes
2535 setPreferenceProperty( step, "min", 1 );
2536 setPreferenceProperty( step, "max", 10000 );
2537 setPreferenceProperty( step, "precision", 3 );
2539 // Set property for trandparency value for spinboxes
2540 setPreferenceProperty( transparency, "min", 0 );
2541 setPreferenceProperty( transparency, "max", 100 );
2543 // Set property for deflection value for spinboxes
2544 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2545 setPreferenceProperty( defl, "max", 1.0 );
2546 setPreferenceProperty( defl, "step", 1.0e-04 );
2547 setPreferenceProperty( defl, "precision", 6 );
2549 // Set property for default material
2550 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2552 // Set property vertex marker type
2553 QList<QVariant> aMarkerTypeIndicesList;
2554 QList<QVariant> aMarkerTypeIconsList;
2556 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2557 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2558 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2559 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2560 aMarkerTypeIndicesList << (i-1);
2561 aMarkerTypeIconsList << pixmap;
2564 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2565 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2567 // Set property for vertex marker scale
2568 QList<QVariant> aMarkerScaleIndicesList;
2569 QStringList aMarkerScaleValuesList;
2571 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2572 aMarkerScaleIndicesList << iii;
2573 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2576 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2577 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2579 // Scalar bar for field step presentation
2580 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2581 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2583 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2584 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2585 setPreferenceProperty( sbXPosition, "min", 0 );
2586 setPreferenceProperty( sbXPosition, "max", 1 );
2587 setPreferenceProperty( sbXPosition, "step", 0.05 );
2589 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2590 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2591 setPreferenceProperty( sbYPosition, "min", 0 );
2592 setPreferenceProperty( sbYPosition, "max", 1 );
2593 setPreferenceProperty( sbYPosition, "step", 0.05 );
2595 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2596 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2597 setPreferenceProperty( sbWidth, "min", 0 );
2598 setPreferenceProperty( sbWidth, "max", 1 );
2599 setPreferenceProperty( sbWidth, "step", 0.05 );
2601 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2602 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2603 setPreferenceProperty( sbHeight, "min", 0 );
2604 setPreferenceProperty( sbHeight, "max", 1 );
2605 setPreferenceProperty( sbHeight, "step", 0.05 );
2607 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2608 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2609 setPreferenceProperty( sbTextHeight, "min", 6 );
2610 setPreferenceProperty( sbTextHeight, "max", 24 );
2611 setPreferenceProperty( sbTextHeight, "step", 1 );
2613 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2614 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2615 setPreferenceProperty( sbNbIntervals, "min", 2 );
2616 setPreferenceProperty( sbNbIntervals, "max", 64 );
2617 setPreferenceProperty( sbNbIntervals, "step", 1 );
2619 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2620 setPreferenceProperty( originGroup, "columns", 2 );
2622 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2623 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2624 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2625 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2627 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2628 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2630 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2631 setPreferenceProperty( operationsGroup, "columns", 2 );
2633 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2634 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2636 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2638 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2640 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2641 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2643 QStringList aHierarchyTypeList;
2644 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2645 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2646 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2648 QList<QVariant> aHierarchyTypeIndexesList;
2649 aHierarchyTypeIndexesList.append(0);
2650 aHierarchyTypeIndexesList.append(1);
2651 aHierarchyTypeIndexesList.append(2);
2653 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2654 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2656 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2657 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2659 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2661 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2662 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2664 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2665 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2666 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2667 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2668 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2669 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2670 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2671 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2673 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2674 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2675 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2676 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2677 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2678 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2685 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2687 if (section == "Geometry") {
2688 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2689 if (param == QString("SettingsGeomStep")) {
2690 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2691 EmitSignalDefaultStepValueChanged(spin_step);
2693 else if (param == QString("toplevel_color")) {
2694 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2695 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2697 else if (param == QString("toplevel_dm")) {
2698 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2700 else if (param == QString("scalar_bar_x_position") ||
2701 param == QString("scalar_bar_y_position") ||
2702 param == QString("scalar_bar_width") ||
2703 param == QString("scalar_bar_height") ||
2704 param == QString("scalar_bar_text_height") ||
2705 param == QString("scalar_bar_nb_intervals")) {
2706 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2708 GEOM_Displayer aDisplayer( aStudy );
2709 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2710 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2713 else if ( param == QString("dimensions_color") ||
2714 param == QString("dimensions_line_width") ||
2715 param == QString("dimensions_font_height") ||
2716 param == QString("dimensions_arrow_length") ||
2717 param == QString("dimensions_show_units") ||
2718 param == QString("dimensions_length_units") ||
2719 param == QString("dimensions_angle_units") )
2721 SalomeApp_Application* anApp = getApp();
2727 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2733 GEOM_Displayer aDisplayer( aStudy );
2735 ViewManagerList aVMs;
2736 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2737 ViewManagerList::Iterator anIt = aVMs.begin();
2738 for ( ; anIt != aVMs.end(); ++anIt )
2740 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2746 SALOME_ListIO aVisible;
2747 aViewer->GetVisible( aVisible );
2748 aDisplayer.Redisplay( aVisible, false, aViewer );
2751 aDisplayer.UpdateViewer();
2753 else if ( param.startsWith( "dependency_tree") )
2754 emit SignalDependencyTreeParamChanged( section, param );
2758 LightApp_Displayer* GeometryGUI::displayer()
2761 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2765 void GeometryGUI::setLocalSelectionMode(const int mode)
2767 myLocalSelectionMode = mode;
2770 int GeometryGUI::getLocalSelectionMode() const
2772 return myLocalSelectionMode;
2775 const char gSeparator = '_'; // character used to separate parameter names
2776 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2779 * \brief Store visual parameters
2781 * This method is called just before the study document is saved.
2782 * Store visual parameters in AttributeParameter attribute(s)
2784 void GeometryGUI::storeVisualParameters (int savePoint)
2786 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2787 if ( !appStudy || !appStudy->studyDS() )
2789 _PTR(Study) studyDS = appStudy->studyDS();
2791 // componentName is used for encoding of entries when storing them in IParameters
2792 std::string componentName = myComponentGeom->ComponentDataType();
2793 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2794 //if (!aSComponent) return;
2797 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2798 componentName.c_str(),
2800 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2802 QSet<QString> anEntriesToStoreShared;
2803 QList<SUIT_ViewManager*> lst;
2804 QList<SUIT_ViewManager*>::Iterator it;
2806 // main cycle to store parameters of displayed objects
2808 getApp()->viewManagers(lst);
2809 for (it = lst.begin(); it != lst.end(); it++) {
2810 SUIT_ViewManager* vman = *it;
2811 QString vType = vman->getType();
2812 int aMgrId = vman->getGlobalId();
2813 // saving VTK actors properties
2814 QVector<SUIT_ViewWindow*> views = vman->getViews();
2815 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2816 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2817 ObjMap::ConstIterator o_it = anObjects.begin();
2818 for (; o_it != anObjects.end(); o_it++) {
2819 const PropMap aProps = o_it.value();
2821 //Check that object exists in the study
2822 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2823 if ( !obj || !(aProps.count() > 0))
2825 // entry is "encoded" = it does NOT contain component adress, since it is a
2826 // subject to change on next component loading
2828 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2830 _PTR(GenericAttribute) anAttr;
2831 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2834 // remember entry of object to store shared GEOM properties
2835 // (e.g. dimension properties).
2836 if ( vType == OCCViewer_Viewer::Type() )
2838 anEntriesToStoreShared.insert( o_it.key() );
2841 QString param, occParam = vType;
2842 occParam += GEOM::sectionSeparator();
2843 occParam += QString::number(aMgrId);
2844 occParam += GEOM::sectionSeparator();
2846 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2847 param = occParam + GEOM::propertyName( GEOM::Visibility );
2848 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2851 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2852 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2853 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2856 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2857 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2859 val << QString::number(c.redF());
2860 val << QString::number(c.greenF());
2861 val << QString::number(c.blueF());
2862 param = occParam + GEOM::propertyName( GEOM::Color );
2863 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2866 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2867 param = occParam + GEOM::propertyName( GEOM::Texture );
2868 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2871 if (vType == SVTK_Viewer::Type()) {
2872 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2873 param = occParam + GEOM::propertyName( GEOM::Opacity );
2874 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2876 } else if (vType == SOCC_Viewer::Type()) {
2877 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2878 param = occParam + GEOM::propertyName( GEOM::Transparency );
2879 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2882 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2883 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2884 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2888 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2889 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2890 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2893 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2894 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2895 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2898 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2899 param = occParam + GEOM::propertyName( GEOM::Vertices );
2900 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2903 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2904 param = occParam + GEOM::propertyName( GEOM::Deflection );
2905 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2908 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2909 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2910 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2911 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2914 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2915 param = occParam + GEOM::propertyName( GEOM::Material );
2916 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2919 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2920 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2921 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2924 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2925 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2926 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2928 } // object iterator
2930 } // for (viewManagers)
2932 // store dimension attributes of objects:
2933 // since the displayed object always persists in property map, we remember the object entries
2934 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2935 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2936 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2937 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2939 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2940 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2942 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2944 if ( aDimensions.GetNumber() == 0 )
2949 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2954 * \brief Restore visual parameters
2956 * This method is called after the study document is opened.
2957 * Restore visual parameters from AttributeParameter attribute(s)
2959 void GeometryGUI::restoreVisualParameters (int savePoint)
2961 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2962 if (!appStudy || !appStudy->studyDS())
2964 _PTR(Study) studyDS = appStudy->studyDS();
2966 // componentName is used for encoding of entries when storing them in IParameters
2967 std::string componentName = myComponentGeom->ComponentDataType();
2968 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2969 //if (!aSComponent) return;
2972 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2973 componentName.c_str(),
2975 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2977 std::vector<std::string> entries = ip->getEntries();
2979 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2981 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2982 QString entry (ip->decodeEntry(*entIt).c_str());
2984 // Check that the entry corresponds to a real object in the Study
2985 // as the object may be deleted or modified after the visual state is saved.
2986 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2987 if (!so) continue; //Skip the not existent entry
2989 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2990 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2992 std::vector<std::string>::iterator namesIt = paramNames.begin();
2993 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2995 // actors are stored in a map after displaying of them for
2996 // quicker access in the future: map < viewID to actor >
2997 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2998 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3000 QString viewerTypStr;
3001 QString viewIndexStr;
3003 QVector<PropMap> aListOfMap;
3005 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3007 // visual parameters are stored in strings as follows:
3008 // 1) ViewerType_ViewIndex_ParamName
3009 // 2) ViewerType_ParamName (shared for GEOM module)
3010 // '_' is used as separator and should not be used in viewer type or parameter names.
3011 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3013 bool isShared = lst.size() == 2;
3014 bool isViewer = lst.size() == 3;
3015 if ( !isShared && !isViewer )
3020 // shared visual parameters
3023 QString aParamNameStr( lst[1] );
3024 QString aValuesStr( (*valuesIt).c_str() );
3026 // shared dimension properties are stored as attribute
3027 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3029 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3030 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3036 // per view visual parameters
3037 viewerTypStr = lst[0];
3038 viewIndexStr = lst[1];
3039 QString paramNameStr = lst[2];
3042 viewIndex = viewIndexStr.toUInt(&ok);
3043 if (!ok) // bad conversion of view index to integer
3046 if ((viewIndex + 1) > aListOfMap.count()) {
3047 aListOfMap.resize(viewIndex + 1);
3050 QString val((*valuesIt).c_str());
3051 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3052 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3053 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3054 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3055 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3056 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3057 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3058 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3059 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3060 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3061 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3062 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3063 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3064 QStringList rgb = val.split(GEOM::subSectionSeparator());
3065 if (rgb.count() == 3) {
3066 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3067 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3069 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3070 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3071 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3072 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3073 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3074 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3075 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3076 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3077 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3078 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3079 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3080 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3081 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3082 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3083 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3084 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3086 } // for names/parameters iterator
3088 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3090 for (int index = 0; index < aListOfMap.count(); index++) {
3092 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
3094 //Get Visibility property of the current PropMap
3095 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3096 SUIT_ViewManager* vman = lst.at(index);
3097 SUIT_ViewModel* vmodel = vman->getViewModel();
3098 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3101 } // for entries iterator
3103 // update all VTK and OCC views
3104 QList<SUIT_ViewManager*> lst;
3105 getApp()->viewManagers(lst);
3106 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3107 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3110 if (vmodel->getType() == SVTK_Viewer::Type()) {
3111 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3112 vtkView->getRenderer()->ResetCameraClippingRange();
3115 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3116 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3117 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3124 void GeometryGUI::onViewAboutToShow()
3126 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3127 QAction* a = action( GEOMOp::OpSwitchVectors );
3128 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3130 a->setEnabled(true);
3131 bool vmode = window->property("VectorsMode").toBool();
3132 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3133 aVerticesAction->setEnabled(true);
3134 vmode = window->property("VerticesMode").toBool();
3135 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3137 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3138 a->setEnabled(false);
3139 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3140 aVerticesAction->setEnabled(false);
3145 \brief Return action by id
3146 \param id identifier of the action
3149 QAction* GeometryGUI::getAction(const int id) {
3154 \brief GEOM module message handler
3156 This method can be re-implemented in the subclasses.
3157 This is a GEOM module message handler.
3159 \param msg the message received.
3161 void GeometryGUI::message(const QString& msg)
3164 QStringList data = msg.split("/");
3165 const int nbStrings = data.count();
3167 if (nbStrings > 0) {
3168 if (data[0] == "modified") {
3170 QString anIOR = nbStrings > 1 ? data[1] : QString();
3172 if ( anIOR.isEmpty() ) {
3176 // Get the geom object.
3177 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3179 // Clear the shape buffer
3180 GeometryGUI::ClearShapeBuffer (anObj);
3186 \brief Clears the shape buffer.
3188 This is a static method. It clears the shape buffer.
3190 \param theObj the object
3192 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3194 if ( CORBA::is_nil( theObj ) )
3197 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3198 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3199 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3201 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3206 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3211 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3215 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3216 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3217 _PTR(GenericAttribute) anAttr;
3218 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3219 _PTR(AttributeIOR) anIOR ( anAttr );
3220 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3221 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3227 \brief Returns the object from IOR.
3229 This is a static method. It returns the object from its IOR.
3231 \param IOR object IOR
3232 \return GEOM object.
3234 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3236 GEOM::GEOM_Object_var geomObj;
3237 if ( !IOR.isEmpty() ) {
3238 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3239 ( IOR.toLatin1().constData() );
3240 if ( !CORBA::is_nil( corbaObj ) )
3241 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3243 return geomObj._retn();
3247 \brief Returns IOR of the object.
3249 This is a static method. It returns the object's IOR.
3251 \param object the GEOM object.
3252 \return object's IOR.
3254 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3257 if ( !CORBA::is_nil( object ) ) {
3258 CORBA::String_var anIOR =
3259 SalomeApp_Application::orb()->object_to_string( object );
3266 \brief Check if this object is can't be renamed in place
3268 This method can be re-implemented in the subclasses.
3269 Return true in case if object isn't reference or component (module root).
3271 \param entry column id
3272 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3274 bool GeometryGUI::renameAllowed( const QString& entry) const {
3276 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3277 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3278 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3280 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3284 Rename object by entry.
3285 \param entry entry of the object
3286 \param name new name of the object
3287 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3289 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3291 bool result = false;
3293 SalomeApp_Application* app =
3294 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3295 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3300 _PTR(Study) aStudy = appStudy->studyDS();
3305 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3307 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3311 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3312 _PTR(GenericAttribute) anAttr;
3314 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3315 _PTR(AttributeName) aName (anAttr);
3317 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3318 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3319 if (!CORBA::is_nil(anObj)) {
3320 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3321 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3329 void GeometryGUI::updateMaterials()
3331 LightApp_Preferences* pref = preferences();
3333 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3334 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3335 if ( !materials.contains( currentMaterial ) )
3336 // user material set as default in the preferences, might be removed
3337 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3339 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3341 setPreferenceProperty( prefItem->id(),
3342 "strings", materials );
3343 prefItem->retrieve();
3349 \brief Check if the module allows "drag" operation of its objects.
3351 Overloaded from LightApp_Module class.
3353 This function is a part of the general drag-n-drop mechanism.
3354 The goal of this function is to check data object passed as a parameter
3355 and decide if it can be dragged or no.
3357 \param what data object being tested for drag operation
3358 \return \c true if module allows dragging of the specified object
3359 \sa isDropAccepted(), dropObjects()
3361 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3363 // we allow dragging object under root and object from folder
3364 int aLevel = what->level();
3365 bool anObjectInFolder = false;
3367 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3369 _PTR(SObject) aSO = dataObj->object();
3371 _PTR(GenericAttribute) anAttr;
3372 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3373 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3374 _PTR(AttributeLocalID) aLocalID( anAttr );
3375 anObjectInFolder = aLocalID->Value() == 999;
3380 return aLevel == 2 || anObjectInFolder;
3384 \brief Check if the module allows "drop" operation on the given object.
3386 Overloaded from LightApp_Module class.
3388 This function is a part of the general drag-n-drop mechanism.
3389 The goal of this function is to check data object passed as a parameter
3390 and decide if it can be used as a target for the "drop" operation.
3391 The processing of the drop operation itself is done in the dropObjects() function.
3393 \param where target data object
3394 \return \c true if module supports dropping on the \a where data object
3395 \sa isDraggable(), dropObjects()
3397 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3399 // we allow dropping into folder and top-level GEOM object
3400 int aLevel = where->level();
3401 bool isFolder = false;
3403 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3405 _PTR(SObject) aSO = dataObj->object();
3407 _PTR(GenericAttribute) anAttr;
3408 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3409 _PTR(AttributeLocalID) aLocalID( anAttr );
3410 isFolder = aLocalID->Value() == 999;
3415 return aLevel == 1 || isFolder;
3419 \brief Complete drag-n-drop operation.
3421 Overloaded from LightApp_Module class.
3423 This function is a part of the general drag-n-drop mechanism.
3424 Its goal is to handle dropping of the objects being dragged according
3425 to the chosen operation (move). The dropping is performed in the
3426 context of the parent data object \a where and the \a row (position in the
3427 children index) at which the data should be dropped. If \a row is equal to -1,
3428 this means that objects are added to the end of the children list.
3430 \param what objects being dropped
3431 \param where target data object
3432 \param row child index at which the drop operation is performed
3433 \param action drag-n-drop operation (Qt::DropAction) - move
3435 \sa isDraggable(), isDropAccepted()
3437 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3438 const int row, Qt::DropAction action )
3440 if (action != Qt::CopyAction && action != Qt::MoveAction)
3441 return; // unsupported action
3443 // get parent object
3444 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3445 if ( !dataObj ) return; // wrong parent
3446 _PTR(SObject) parentObj = dataObj->object();
3448 // Find the current Study and StudyBuilder
3449 _PTR(Study) aStudy = parentObj->GetStudy();
3450 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3451 // collect all parents of the target node
3452 QStringList parentIDs;
3453 _PTR(SObject) parent = parentObj;
3454 while( !parent->IsNull() ) {
3455 parentIDs << parent->GetID().c_str();
3456 parent = aUseCaseBuilder->GetFather(parent);
3459 // collect objects being dropped
3460 GEOM::object_list_var objects = new GEOM::object_list();
3461 objects->length( what.count() );
3463 for ( int i = 0; i < what.count(); i++ ) {
3464 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3465 if ( !dataObj ) continue; // skip wrong objects
3466 _PTR(SObject) sobj = dataObj->object();
3467 // check that dropped object is not a parent of target object
3468 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3469 return; // it's not allowed to move node into it's child
3471 objects[i] = _CAST(SObject, sobj)->GetSObject();
3474 objects->length( count );
3476 // call engine function
3477 GetGeomGen()->Move( objects.in(), // what
3478 _CAST(SObject, parentObj)->GetSObject(), // where
3481 // update Object browser
3482 getApp()->updateObjectBrowser( false );