1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMGUI_OCCSelector.h"
33 #include "GEOMGUI_Selection.h"
34 #include "GEOM_Constants.h"
35 #include "GEOM_Displayer.h"
36 #include "GEOM_AISShape.hxx"
38 #include "GEOM_Actor.h"
40 #include <Material_ResourceMgr.h>
42 #include <SUIT_Desktop.h>
43 #include <SUIT_MessageBox.h>
44 #include <SUIT_ResourceMgr.h>
45 #include <SUIT_Session.h>
46 #include <SUIT_ViewManager.h>
48 #include <OCCViewer_ViewWindow.h>
49 #include <OCCViewer_ViewPort3d.h>
50 #include <OCCViewer_ViewModel.h>
51 #include <OCCViewer_ViewManager.h>
53 #include <SOCC_ViewModel.h>
54 #include <SOCC_ViewWindow.h>
56 #include <SVTK_ViewWindow.h>
57 #include <SVTK_RenderWindowInteractor.h>
58 #include <SVTK_InteractorStyle.h>
59 #include <SVTK_ViewModel.h>
61 #include <SalomeApp_Application.h>
62 #include <SalomeApp_DataObject.h>
63 #include <SalomeApp_Study.h>
65 #include <LightApp_SelectionMgr.h>
66 #include <LightApp_VTKSelector.h>
67 #include <LightApp_DataObject.h>
68 #include <LightApp_Preferences.h>
70 #include <SALOME_LifeCycleCORBA.hxx>
71 #include <SALOME_ListIO.hxx>
72 #include <SALOME_ListIteratorOfListIO.hxx>
74 #include <SALOMEDSClient_ClientFactory.hxx>
75 #include <SALOMEDSClient_IParameters.hxx>
77 #include <Basics_OCCTVersion.hxx>
87 #include <AIS_Drawer.hxx>
88 #include <AIS_ListOfInteractive.hxx>
89 #include <AIS_ListIteratorOfListOfInteractive.hxx>
90 #include <Prs3d_Drawer.hxx>
91 #include <Prs3d_IsoAspect.hxx>
92 #include <Aspect_TypeOfMarker.hxx>
93 #include <OSD_SharedLibrary.hxx>
94 #include <NCollection_DataMap.hxx>
96 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
97 #include <TColStd_HArray1OfByte.hxx>
99 #include <Graphic3d_HArray1OfBytes.hxx>
102 #include <utilities.h>
104 #include <vtkCamera.h>
105 #include <vtkRenderer.h>
107 #include <GEOM_version.h>
110 #include "GEOMImpl_Types.hxx"
113 Standard_EXPORT CAM_Module* createModule() {
114 return new GeometryGUI();
117 Standard_EXPORT char* getModuleVersion() {
118 return (char*)GEOM_VERSION_STR;
122 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
124 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
126 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
128 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
129 if (CORBA::is_nil(myComponentGeom))
131 return GeometryGUI::myComponentGeom;
134 bool GeometryGUI::InitGeomGen()
137 if( CORBA::is_nil( myComponentGeom ) ) return false;
141 //=======================================================================
142 // function : ClientSObjectToObject
144 //=======================================================================
145 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
147 _PTR(GenericAttribute) anAttr;
148 CORBA::Object_var anObj;
150 std::string aValue = theSObject->GetIOR();
151 if (strcmp(aValue.c_str(), "") != 0) {
152 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
153 anObj = anORB->string_to_object(aValue.c_str());
156 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
158 return anObj._retn();
161 //=======================================================================
162 // function : ClientStudyToStudy
164 //=======================================================================
165 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
167 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
168 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
169 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
170 int aStudyID = theStudy->StudyId();
171 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
172 return aDSStudy._retn();
175 void GeometryGUI::Modified( bool theIsUpdateActions )
177 if( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
178 if( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
179 appStudy->Modified();
180 if( theIsUpdateActions )
181 app->updateActions();
186 //=======================================================================
187 // function : GeometryGUI::GeometryGUI()
188 // purpose : Constructor
189 //=======================================================================
190 GeometryGUI::GeometryGUI() :
191 SalomeApp_Module( "GEOM" ),
192 LightApp_Module( "GEOM" )
194 if ( CORBA::is_nil( myComponentGeom ) )
196 Engines::EngineComponent_var comp =
197 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
198 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
201 myActiveDialogBox = 0;
203 gp_Pnt origin = gp_Pnt(0., 0., 0.);
204 gp_Dir direction = gp_Dir(0., 0., 1.);
205 myWorkingPlane = gp_Ax3(origin, direction);
208 myLocalSelectionMode = GEOM_ALLOBJECTS;
211 //=======================================================================
212 // function : GeometryGUI::~GeometryGUI()
213 // purpose : Destructor
214 //=======================================================================
215 GeometryGUI::~GeometryGUI()
217 while (!myOCCSelectors.isEmpty())
218 delete myOCCSelectors.takeFirst();
220 while (!myVTKSelectors.isEmpty())
221 delete myVTKSelectors.takeFirst();
223 qDeleteAll(myGUIMap);
226 //=======================================================================
227 // function : GeometryGUI::getLibrary()
228 // purpose : get or load GUI library by name [ internal ]
229 //=======================================================================
230 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
231 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
233 if ( !myGUIMap.contains( libraryName ) ) {
234 // try to load library if it is not loaded yet
236 QString dirs = getenv( "LD_LIBRARY_PATH" );
239 QString dirs = getenv( "PATH" );
242 if ( !dirs.isEmpty() ) {
243 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
244 QListIterator<QString> it( dirList ); it.toBack();
245 while ( it.hasPrevious() ) {
246 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
248 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
249 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
251 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
252 continue; // continue search further
254 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
255 if ( osdF != NULL ) {
256 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
257 GEOMGUI* libGUI = (*func)( this );
259 myGUIMap[ libraryName ] = libGUI;
260 break; // found and loaded!
267 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
270 //=======================================================================
271 // function : GeometryGUI::ActiveWorkingPlane()
272 // purpose : Activate Working Plane View
273 //=======================================================================
274 void GeometryGUI::ActiveWorkingPlane()
276 gp_Dir DZ = myWorkingPlane.Direction();
277 gp_Dir DY = myWorkingPlane.YDirection();
279 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
280 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
281 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
284 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
286 Handle(V3d_View) view3d = vw->getViewPort()->getView();
288 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
289 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
294 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
296 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
298 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
299 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
300 camera->SetFocalPoint(0,0,0);
307 //=======================================================================
308 // function : GeometryGUI::SetActiveDialogBox()
309 // purpose : Set active dialog box
310 //=======================================================================
311 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
313 myActiveDialogBox = (QDialog*)aDlg;
316 //=======================================================================
317 // function : GeometryGUI::EmitSignalDeactivateDialog()
318 // purpose : Emit a signal to deactivate the active dialog Box
319 //=======================================================================
320 void GeometryGUI::EmitSignalDeactivateDialog()
322 emit SignalDeactivateActiveDialog();
325 //=======================================================================
326 // function : GeometryGUI::EmitSignalCloseAllDialogs()
327 // purpose : Emit a signal to close all non modal dialogs box
328 //=======================================================================
329 void GeometryGUI::EmitSignalCloseAllDialogs()
331 emit SignalCloseAllDialogs();
334 //=======================================================================
335 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
336 // purpose : Emit a signal to inform that default real spin box step has
338 //=======================================================================
339 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
341 emit SignalDefaultStepValueChanged(newVal);
344 //=======================================================================
345 // function : GeometryGUI::OnGUIEvent()
346 // purpose : common slot for all menu/toolbar actions
347 //=======================================================================
348 void GeometryGUI::OnGUIEvent()
350 const QObject* obj = sender();
351 if ( !obj || !obj->inherits( "QAction" ) )
353 int id = actionId((QAction*)obj);
358 //=======================================================================
359 // function : GeometryGUI::OnGUIEvent()
360 // purpose : manage all events on GUI [static]
361 //=======================================================================
362 void GeometryGUI::OnGUIEvent( int id )
364 SUIT_Application* anApp = application();
366 SUIT_Desktop* desk = anApp->desktop();
368 // check type of the active viewframe
369 SUIT_ViewWindow* window = desk->activeWindow();
370 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
371 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
372 // if current viewframe is not of OCC and not of VTK type - return immediately
373 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
374 QList<int> NotViewerDependentCommands;
375 NotViewerDependentCommands << GEOMOp::OpDelete
377 << GEOMOp::OpShowOnly
378 << GEOMOp::OpShowChildren
379 << GEOMOp::OpHideChildren
380 << GEOMOp::OpUnpublishObject
381 << GEOMOp::OpPublishObject
382 << GEOMOp::OpPointMarker;
383 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
386 // fix for IPAL9103, point 2
387 if ( CORBA::is_nil( GetGeomGen() ) ) {
388 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
393 // find corresponding GUI library
395 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
396 createOriginAndBaseVectors(); // internal operation
398 case GEOMOp::OpImport: // MENU FILE - IMPORT
399 case GEOMOp::OpExport: // MENU FILE - EXPORT
400 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
401 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
402 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
403 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
404 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
405 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
406 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
407 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
408 case GEOMOp::OpDelete: // MENU EDIT - DELETE
409 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
410 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
411 case GEOMOp::OpColor: // POPUP MENU - COLOR
412 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
413 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
414 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
415 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
416 case GEOMOp::OpIsos: // POPUP MENU - ISOS
417 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
418 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
419 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
420 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
421 case GEOMOp::OpShowChildren: // POPUP MENU - SHOW CHILDREN
422 case GEOMOp::OpHideChildren: // POPUP MENU - HIDE CHILDREN
423 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
424 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
425 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
426 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
427 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
428 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
429 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
430 case GEOMOp::OpClsBringToFront: //
431 libName = "GEOMToolsGUI";
433 case GEOMOp::OpDisplayMode: // MENU VIEW - WIREFRAME/SHADING
434 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
435 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
436 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
437 case GEOMOp::OpHide: // MENU VIEW - ERASE
438 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
439 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
440 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
441 case GEOMOp::OpShading: // POPUP MENU - SHADING
442 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
443 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
444 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
445 libName = "DisplayGUI";
447 case GEOMOp::OpPoint: // MENU BASIC - POINT
448 case GEOMOp::OpLine: // MENU BASIC - LINE
449 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
450 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
451 case GEOMOp::OpArc: // MENU BASIC - ARC
452 case GEOMOp::OpVector: // MENU BASIC - VECTOR
453 case GEOMOp::OpPlane: // MENU BASIC - PLANE
454 case GEOMOp::OpCurve: // MENU BASIC - CURVE
455 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
456 libName = "BasicGUI";
458 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
459 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
460 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
461 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
462 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
463 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
464 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
465 libName = "PrimitiveGUI";
467 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
468 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
469 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
470 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
471 libName = "GenerationGUI";
473 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
474 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
475 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
477 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
479 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
480 libName = "EntityGUI";
482 case GEOMOp::OpEdge: // MENU BUILD - EDGE
483 case GEOMOp::OpWire: // MENU BUILD - WIRE
484 case GEOMOp::OpFace: // MENU BUILD - FACE
485 case GEOMOp::OpShell: // MENU BUILD - SHELL
486 case GEOMOp::OpSolid: // MENU BUILD - SOLID
487 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
488 libName = "BuildGUI";
490 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
491 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
492 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
493 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
494 libName = "BooleanGUI";
496 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
497 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
498 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
499 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
500 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
501 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
502 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
503 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
504 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
505 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
506 libName = "TransformationGUI";
508 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
509 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
510 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
511 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
512 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
513 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
514 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
515 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
516 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
517 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
518 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
519 libName = "OperationGUI";
521 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
522 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
523 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
524 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
525 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
526 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
527 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
528 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
529 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
530 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
531 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
532 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
533 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
534 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
535 libName = "RepairGUI";
537 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
538 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
539 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
540 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
541 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
542 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
543 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
544 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
545 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
546 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
547 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
548 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
549 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
550 libName = "MeasureGUI";
552 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
553 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
554 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
555 libName = "GroupGUI";
557 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
558 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
559 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
560 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
561 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
562 libName = "BlocksGUI";
564 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
565 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
566 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
567 //@@ 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 @@//
568 libName = "AdvancedGUI";
574 GEOMGUI* library = 0;
575 if ( !libName.isEmpty() ) {
577 libName = QString( "lib" ) + libName + ".so";
579 libName = libName + ".dll";
581 library = getLibrary( libName );
584 // call method of corresponding GUI library
586 library->OnGUIEvent( id, desk );
588 // Update a list of materials for "Preferences" dialog
589 if ( id == GEOMOp::OpMaterialProperties ) {
590 LightApp_Preferences* pref = preferences();
592 Material_ResourceMgr aMatResMgr;
593 QStringList aPerfMatNames = aMatResMgr.getPreferenceMaterialsNames();
594 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_FRONT_MATERIAL" ), true )->id(),
597 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_BACK_MATERIAL" ), true )->id(),
604 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
607 //=================================================================================
608 // function : GeometryGUI::OnKeyPress()
609 // purpose : Called when any key is pressed by user [static]
610 //=================================================================================
611 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
613 if ( !application() )
615 foreach ( GEOMGUI* lib, myGUIMap )
616 lib->OnKeyPress( e, application()->desktop(), w );
619 //=================================================================================
620 // function : GeometryGUI::OnMouseMove()
621 // purpose : Manages mouse move events [static]
622 //=================================================================================
623 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
625 if ( !application() )
627 foreach ( GEOMGUI* lib, myGUIMap )
628 lib->OnMouseMove( e, application()->desktop(), w );
631 //=================================================================================
632 // function : GeometryGUI::OnMouseRelease()
633 // purpose : Manages mouse release events [static]
634 //=================================================================================
635 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
637 if ( !application() )
639 foreach ( GEOMGUI* lib, myGUIMap )
640 lib->OnMouseRelease( e, application()->desktop(), w );
643 //=================================================================================
644 // function : GeometryGUI::OnMousePress()
645 // purpose : Manage mouse press events [static]
646 //=================================================================================
647 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
649 if ( !application() )
651 foreach ( GEOMGUI* lib, myGUIMap )
652 lib->OnMousePress( e, application()->desktop(), w );
655 //=======================================================================
656 // function : createGeomAction
658 //=======================================================================
659 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
660 const int accel, const bool toggle, const QString& shortcutAction )
662 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
663 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
664 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
666 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
668 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
669 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
671 application()->desktop(),
673 this, SLOT( OnGUIEvent() ),
677 //=======================================================================
678 // function : createOriginAndBaseVectors
680 //=======================================================================
681 void GeometryGUI::createOriginAndBaseVectors()
683 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
685 _PTR(Study) studyDS = appStudy->studyDS();
686 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
687 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
688 if( !aBasicOperations->_is_nil() ) {
689 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
690 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
691 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
692 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
693 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
694 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
696 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
697 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
698 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
699 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
700 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
702 getApp()->updateObjectBrowser( false );
708 //=======================================================================
709 // function : GeometryGUI::initialize()
710 // purpose : Called when GEOM module is created
711 //=======================================================================
712 void GeometryGUI::initialize( CAM_Application* app )
714 SalomeApp_Module::initialize( app );
716 // ----- create actions --------------
718 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
719 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
721 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
723 createGeomAction( GEOMOp::OpPoint, "POINT" );
724 createGeomAction( GEOMOp::OpLine, "LINE" );
725 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
726 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
727 createGeomAction( GEOMOp::OpArc, "ARC" );
728 createGeomAction( GEOMOp::OpCurve, "CURVE" );
729 createGeomAction( GEOMOp::OpVector, "VECTOR" );
730 createGeomAction( GEOMOp::OpPlane, "PLANE" );
731 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
732 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
734 createGeomAction( GEOMOp::OpBox, "BOX" );
735 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
736 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
737 createGeomAction( GEOMOp::OpTorus, "TORUS" );
738 createGeomAction( GEOMOp::OpCone, "CONE" );
739 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
740 createGeomAction( GEOMOp::OpDisk, "DISK" );
742 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
743 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
744 createGeomAction( GEOMOp::OpFilling, "FILLING" );
745 createGeomAction( GEOMOp::OpPipe, "PIPE" );
747 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
748 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
750 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
752 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
753 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
755 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
756 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
757 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
759 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
761 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
763 createGeomAction( GEOMOp::OpEdge, "EDGE" );
764 createGeomAction( GEOMOp::OpWire, "WIRE" );
765 createGeomAction( GEOMOp::OpFace, "FACE" );
766 createGeomAction( GEOMOp::OpShell, "SHELL" );
767 createGeomAction( GEOMOp::OpSolid, "SOLID" );
768 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
770 createGeomAction( GEOMOp::OpFuse, "FUSE" );
771 createGeomAction( GEOMOp::OpCommon, "COMMON" );
772 createGeomAction( GEOMOp::OpCut, "CUT" );
773 createGeomAction( GEOMOp::OpSection, "SECTION" );
775 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
776 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
777 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
778 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
779 createGeomAction( GEOMOp::OpScale, "SCALE" );
780 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
781 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
782 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
783 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
785 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
786 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
787 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
788 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
789 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
790 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
791 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
792 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
793 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
794 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
795 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
797 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
798 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
799 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
801 createGeomAction( GEOMOp::OpSewing, "SEWING" );
802 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
803 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
804 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
805 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
806 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
807 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
808 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
809 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
810 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
811 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
812 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
813 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
814 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
816 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
817 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
818 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
819 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
820 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
821 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
822 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
823 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
825 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
826 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
827 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
828 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
829 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
831 #ifdef _DEBUG_ // PAL16821
832 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
835 createGeomAction( GEOMOp::OpDisplayMode, "SHADING" );
836 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
837 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
838 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
839 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
840 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
841 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
842 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
843 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
844 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
845 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
846 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
847 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
848 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
849 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
850 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
851 createGeomAction( GEOMOp::OpHide, "ERASE" );
853 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
854 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
855 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
856 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
857 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
858 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
859 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
860 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
861 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
862 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
863 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
864 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
865 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
866 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
867 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
868 createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" );
869 createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" );
870 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
871 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
872 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
873 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
875 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
877 // Create actions for increase/decrease transparency shortcuts
878 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
879 "Geometry:Increase transparency");
880 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
881 "Geometry:Decrease transparency");
883 // Create actions for increase/decrease number of isolines
884 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
885 "Geometry:Increase number of isolines");
886 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
887 "Geometry:Decrease number of isolines");
889 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
890 //@@ 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 @@//
892 // ---- create menus --------------------------
894 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
895 createMenu( separator(), fileId, 10 );
896 createMenu( GEOMOp::OpImport, fileId, 10 );
897 createMenu( GEOMOp::OpExport, fileId, 10 );
898 createMenu( separator(), fileId, -1 );
900 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
901 createMenu( GEOMOp::OpDelete, editId, -1 );
903 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
905 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
906 createMenu( GEOMOp::OpPoint, basicId, -1 );
907 createMenu( GEOMOp::OpLine, basicId, -1 );
908 createMenu( GEOMOp::OpCircle, basicId, -1 );
909 createMenu( GEOMOp::OpEllipse, basicId, -1 );
910 createMenu( GEOMOp::OpArc, basicId, -1 );
911 createMenu( GEOMOp::OpCurve, basicId, -1 );
912 createMenu( separator(), basicId, -1 );
913 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
914 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
915 createMenu( GEOMOp::OpVector, basicId, -1 );
916 createMenu( GEOMOp::OpPlane, basicId, -1 );
917 createMenu( GEOMOp::OpLCS, basicId, -1 );
918 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
920 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
921 createMenu( GEOMOp::OpBox, primId, -1 );
922 createMenu( GEOMOp::OpCylinder, primId, -1 );
923 createMenu( GEOMOp::OpSphere, primId, -1 );
924 createMenu( GEOMOp::OpTorus, primId, -1 );
925 createMenu( GEOMOp::OpCone, primId, -1 );
926 createMenu( GEOMOp::OpRectangle, primId, -1 );
927 createMenu( GEOMOp::OpDisk, primId, -1 );
928 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
930 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
931 createMenu( GEOMOp::OpPrism, genId, -1 );
932 createMenu( GEOMOp::OpRevolution, genId, -1 );
933 createMenu( GEOMOp::OpFilling, genId, -1 );
934 createMenu( GEOMOp::OpPipe, genId, -1 );
936 // int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
937 // createMenu( GEOMOp::OpPipeTShape, advId, -1 );
938 // createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
939 //@@ 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 @@//
941 createMenu( separator(), newEntId, -1 );
943 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
944 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
945 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
947 createMenu( separator(), newEntId, -1 );
949 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
950 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
951 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
953 createMenu( separator(), newEntId, -1 );
955 createMenu( GEOMOp::OpExplode, newEntId, -1 );
957 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
958 createMenu( GEOMOp::OpEdge, buildId, -1 );
959 createMenu( GEOMOp::OpWire, buildId, -1 );
960 createMenu( GEOMOp::OpFace, buildId, -1 );
961 createMenu( GEOMOp::OpShell, buildId, -1 );
962 createMenu( GEOMOp::OpSolid, buildId, -1 );
963 createMenu( GEOMOp::OpCompound, buildId, -1 );
965 createMenu( separator(), newEntId, -1 );
967 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
969 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
972 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
974 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
975 createMenu( GEOMOp::OpFuse, boolId, -1 );
976 createMenu( GEOMOp::OpCommon, boolId, -1 );
977 createMenu( GEOMOp::OpCut, boolId, -1 );
978 createMenu( GEOMOp::OpSection, boolId, -1 );
980 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
981 createMenu( GEOMOp::OpTranslate, transId, -1 );
982 createMenu( GEOMOp::OpRotate, transId, -1 );
983 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
984 createMenu( GEOMOp::OpMirror, transId, -1 );
985 createMenu( GEOMOp::OpScale, transId, -1 );
986 createMenu( GEOMOp::OpOffset, transId, -1 );
987 createMenu( GEOMOp::OpProjection, transId, -1 );
988 createMenu( separator(), transId, -1 );
989 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
990 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
992 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
993 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
994 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
995 createMenu( GEOMOp::OpPropagate, blockId, -1 );
997 createMenu( separator(), operId, -1 );
999 createMenu( GEOMOp::OpPartition, operId, -1 );
1000 createMenu( GEOMOp::OpArchimede, operId, -1 );
1001 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1002 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1004 createMenu( separator(), operId, -1 );
1006 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1007 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1008 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1009 createMenu( GEOMOp::OpChamfer, operId, -1 );
1010 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1011 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1012 //createMenu( GEOMOp::OpClipping, operId, -1 );
1014 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1015 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1016 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1017 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1018 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1019 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1020 createMenu( GEOMOp::OpSewing, repairId, -1 );
1021 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1022 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1023 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1024 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1025 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1026 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1027 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1028 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1030 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1031 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1032 createMenu( GEOMOp::OpProperties, measurId, -1 );
1033 createMenu( separator(), measurId, -1 );
1034 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1035 createMenu( GEOMOp::OpInertia, measurId, -1 );
1036 createMenu( GEOMOp::OpNormale, measurId, -1 );
1037 createMenu( separator(), measurId, -1 );
1038 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1039 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1040 createMenu( separator(), measurId, -1 );
1042 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1043 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1044 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1045 createMenu( GEOMOp::OpAngle, dimId, -1 );
1047 createMenu( separator(), measurId, -1 );
1048 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1049 createMenu( separator(), measurId, -1 );
1050 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1051 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1052 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1053 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1055 #ifdef _DEBUG_ // PAL16821
1056 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1057 createMenu( separator(), toolsId, -1 );
1058 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1061 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1062 createMenu( separator(), viewId, -1 );
1064 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1065 createMenu( GEOMOp::OpDisplayMode, dispmodeId, -1 );
1066 createMenu( separator(), dispmodeId, -1 );
1067 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1069 createMenu( separator(), viewId, -1 );
1070 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1071 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1072 createMenu( separator(), viewId, -1 );
1073 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1074 createMenu( separator(), viewId, -1 );
1078 because of these items are accessible through object browser and viewers
1079 we have removed they from main menu
1081 createMenu( GEOMOp::OpShow, viewId, -1 );
1082 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1083 createMenu( GEOMOp::OpHide, viewId, -1 );
1086 // ---- create toolbars --------------------------
1088 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1089 createTool( GEOMOp::OpPoint, basicTbId );
1090 createTool( GEOMOp::OpLine, basicTbId );
1091 createTool( GEOMOp::OpCircle, basicTbId );
1092 createTool( GEOMOp::OpEllipse, basicTbId );
1093 createTool( GEOMOp::OpArc, basicTbId );
1094 createTool( GEOMOp::OpCurve, basicTbId );
1095 createTool( GEOMOp::OpVector, basicTbId );
1096 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1097 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1098 createTool( GEOMOp::OpPlane, basicTbId );
1099 createTool( GEOMOp::OpLCS, basicTbId );
1100 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1102 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1103 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1104 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1106 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1107 createTool( GEOMOp::OpBox, primTbId );
1108 createTool( GEOMOp::OpCylinder, primTbId );
1109 createTool( GEOMOp::OpSphere, primTbId );
1110 createTool( GEOMOp::OpTorus, primTbId );
1111 createTool( GEOMOp::OpCone, primTbId );
1112 createTool( GEOMOp::OpRectangle, primTbId );
1113 createTool( GEOMOp::OpDisk, primTbId );
1114 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1116 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1117 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1119 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1120 createTool( GEOMOp::OpFuse, boolTbId );
1121 createTool( GEOMOp::OpCommon, boolTbId );
1122 createTool( GEOMOp::OpCut, boolTbId );
1123 createTool( GEOMOp::OpSection, boolTbId );
1125 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1126 createTool( GEOMOp::OpPrism, genTbId );
1127 createTool( GEOMOp::OpRevolution, genTbId );
1128 createTool( GEOMOp::OpFilling, genTbId );
1129 createTool( GEOMOp::OpPipe, genTbId );
1131 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1132 createTool( GEOMOp::OpTranslate, transTbId );
1133 createTool( GEOMOp::OpRotate, transTbId );
1134 createTool( GEOMOp::OpChangeLoc, transTbId );
1135 createTool( GEOMOp::OpMirror, transTbId );
1136 createTool( GEOMOp::OpScale, transTbId );
1137 createTool( GEOMOp::OpOffset, transTbId );
1138 createTool( GEOMOp::OpProjection, transTbId );
1139 createTool( separator(), transTbId );
1140 createTool( GEOMOp::OpMultiTranslate, transTbId );
1141 createTool( GEOMOp::OpMultiRotate, transTbId );
1143 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1144 createTool( GEOMOp::OpExplode, operTbId );
1145 createTool( GEOMOp::OpPartition, operTbId );
1146 createTool( GEOMOp::OpArchimede, operTbId );
1147 createTool( GEOMOp::OpShapesOnShape, operTbId );
1148 createTool( GEOMOp::OpSharedShapes, operTbId );
1150 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1151 createTool( GEOMOp::OpFillet1d, featTbId );
1152 createTool( GEOMOp::OpFillet2d, featTbId );
1153 createTool( GEOMOp::OpFillet3d, featTbId );
1154 createTool( GEOMOp::OpChamfer, featTbId );
1155 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1156 createTool( GEOMOp::OpExtrudedCut, featTbId );
1158 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1159 createTool( GEOMOp::OpEdge, buildTbId );
1160 createTool( GEOMOp::OpWire, buildTbId );
1161 createTool( GEOMOp::OpFace, buildTbId );
1162 createTool( GEOMOp::OpShell, buildTbId );
1163 createTool( GEOMOp::OpSolid, buildTbId );
1164 createTool( GEOMOp::OpCompound, buildTbId );
1166 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1167 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1168 createTool( GEOMOp::OpProperties, measureTbId );
1169 createTool( GEOMOp::OpCenterMass, measureTbId );
1170 createTool( GEOMOp::OpInertia, measureTbId );
1171 createTool( GEOMOp::OpNormale, measureTbId );
1172 createTool( separator(), measureTbId );
1173 createTool( GEOMOp::OpBoundingBox, measureTbId );
1174 createTool( GEOMOp::OpMinDistance, measureTbId );
1175 createTool( GEOMOp::OpAngle, measureTbId );
1176 createTool( GEOMOp::OpTolerance , measureTbId );
1177 createTool( separator(), measureTbId );
1178 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1179 createTool( GEOMOp::OpFreeFaces, measureTbId );
1180 createTool( separator(), measureTbId );
1181 createTool( GEOMOp::OpWhatIs, measureTbId );
1182 createTool( GEOMOp::OpCheckShape, measureTbId );
1183 createTool( GEOMOp::OpCheckCompound, measureTbId );
1184 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1186 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1187 createTool( GEOMOp::OpPictureImport, picturesTbId );
1189 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1192 //@@ 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 @@//
1194 // ---- create popup menus --------------------------
1196 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1197 QString clientOCC = "(client='OCCViewer')";
1198 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1199 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1201 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1202 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1203 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1204 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1206 QString autoColorPrefix =
1207 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1209 QtxPopupMgr* mgr = popupMgr();
1211 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1212 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1213 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1214 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1215 mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children
1216 mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1218 mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1219 mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1220 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1221 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1222 mgr->insert( separator(), -1, -1 ); // -----------
1224 #if OCC_VERSION_LARGE > 0x06050200
1225 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1226 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1227 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1228 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1229 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1230 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1231 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
1233 mgr->insert( separator(), -1, -1 ); // -----------
1234 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1235 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1236 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1237 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1238 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1239 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1240 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1241 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1242 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1243 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1244 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1245 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1246 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1247 mgr->insert( separator(), dispmodeId, -1 );
1248 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1249 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1250 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1251 mgr->insert( separator(), -1, -1 ); // -----------
1252 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1253 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1254 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1255 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1256 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1257 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1258 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1259 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1260 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1261 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1262 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1263 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1264 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1265 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1266 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1268 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1269 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1270 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1272 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1273 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1275 mgr->insert( separator(), -1, -1 ); // -----------
1276 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1277 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1278 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1279 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1280 mgr->insert( separator(), -1, -1 ); // -----------
1282 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1283 onlyComponent = "((type='Component') and selcount=1)",
1284 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1285 types = "'Shape' 'Group'";
1287 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1288 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1290 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1291 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1293 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1294 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1296 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1298 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1299 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1300 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1301 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1302 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1303 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1304 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1305 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1306 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1307 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1308 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1309 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1310 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1311 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1312 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1313 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1314 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1315 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1316 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1317 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1318 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1319 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1320 mgr->insert( separator(), selectonlyId, -1);
1321 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1322 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1323 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1324 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1325 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1327 mgr->insert( separator(), -1, -1 ); // -----------
1328 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1329 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1332 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1333 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1335 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1336 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1338 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1341 //=======================================================================
1342 // function : GeometryGUI::activateModule()
1343 // purpose : Called when GEOM module is activated
1344 //=======================================================================
1345 bool GeometryGUI::activateModule( SUIT_Study* study )
1347 if ( CORBA::is_nil( myComponentGeom ) )
1350 bool res = SalomeApp_Module::activateModule( study );
1354 setMenuShown( true );
1355 setToolShown( true );
1357 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1358 PyGILState_STATE gstate = PyGILState_Ensure();
1359 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1360 if(pluginsmanager==NULL)
1364 PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"geom",tr("MEN_NEW_ENTITY").toStdString().c_str(),tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1369 PyGILState_Release(gstate);
1370 // end of GEOM plugins loading
1372 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1373 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1375 // Reset actions accelerator keys
1376 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1377 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1378 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1380 GUIMap::Iterator it;
1381 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1382 it.value()->activate( application()->desktop() );
1384 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1386 SUIT_ViewManager* vm;
1387 ViewManagerList OCCViewManagers, VTKViewManagers;
1389 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1390 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1391 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1392 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1394 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1395 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1396 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1397 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1400 SALOME_ListIO selected;
1401 sm->selectedObjects( selected );
1402 sm->clearSelected();
1404 // disable OCC selectors
1405 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1406 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1407 while ( itOCCSel.hasNext() )
1408 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1409 sr->setEnabled(true);
1411 // disable VTK selectors
1412 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1413 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1414 while ( itVTKSel.hasNext() )
1415 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1416 sr->setEnabled(true);
1418 sm->setSelectedObjects( selected, true ); //NPAL 19674
1420 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1422 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1424 // 0020836 (Basic vectors and origin)
1425 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1426 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1427 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1429 _PTR(Study) studyDS = appStudy->studyDS();
1431 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1432 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1433 createOriginAndBaseVectors();
1442 //=======================================================================
1443 // function : GeometryGUI::deactivateModule()
1444 // purpose : Called when GEOM module is deactivated
1445 //=======================================================================
1446 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1448 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1450 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1452 setMenuShown( false );
1453 setToolShown( false );
1455 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1456 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1458 EmitSignalCloseAllDialogs();
1460 GUIMap::Iterator it;
1461 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1462 it.value()->deactivate();
1464 // Unset actions accelerator keys
1465 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1466 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1467 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1469 qDeleteAll(myOCCSelectors);
1470 myOCCSelectors.clear();
1471 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1473 qDeleteAll(myVTKSelectors);
1474 myVTKSelectors.clear();
1475 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1477 return SalomeApp_Module::deactivateModule( study );
1480 //=======================================================================
1481 // function : onWindowActivated()
1482 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1483 //=======================================================================
1484 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1489 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1490 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1492 // disable non-OCC viewframe menu commands
1493 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1494 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1495 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1496 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1497 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1498 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1499 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1501 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1502 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1504 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1507 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1509 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1510 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1513 void GeometryGUI::viewManagers( QStringList& lst ) const
1515 lst.append( OCCViewer_Viewer::Type() );
1518 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1520 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1522 qDebug( "connect" );
1523 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1524 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1525 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1526 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1527 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1528 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1529 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1530 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1532 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1533 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1535 // disable OCC selectors
1536 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1537 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1538 while ( itOCCSel.hasNext() )
1539 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1540 sr->setEnabled(true);
1542 else if ( vm->getType() == SVTK_Viewer::Type() )
1544 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1545 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1547 // disable VTK selectors
1548 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1549 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1550 while ( itVTKSel.hasNext() )
1551 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1552 sr->setEnabled(true);
1556 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1558 SUIT_ViewModel* viewer = vm->getViewModel();
1559 if ( vm->getType() == OCCViewer_Viewer::Type() )
1561 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1562 while ( itOCCSel.hasNext() )
1563 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1564 if ( sr->viewer() == viewer )
1566 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1570 if ( vm->getType() == SVTK_Viewer::Type() )
1572 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1573 while ( itVTKSel.hasNext() )
1574 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1575 if ( sr->viewer() == viewer )
1577 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1583 QString GeometryGUI::engineIOR() const
1585 if ( !CORBA::is_nil( GetGeomGen() ) )
1586 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1590 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1591 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1593 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1595 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1597 theWidth = theHeight = 0;
1599 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1600 Handle(TColStd_HArray1OfByte) aTexture;
1602 Handle(Graphic3d_HArray1OfBytes) aTexture;
1606 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1607 aTexture = aTextureMap[ theId ];
1608 if ( aTexture.IsNull() ) {
1609 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1610 if ( !aInsOp->_is_nil() ) {
1611 CORBA::Long aWidth, aHeight;
1612 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1613 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1615 theHeight = aHeight;
1617 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1618 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1620 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1623 for (int i = 0; i < aStream->length(); i++)
1624 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1625 aTextureMap[ theId ] = aTexture;
1633 LightApp_Selection* GeometryGUI::createSelection() const
1635 return new GEOMGUI_Selection();
1638 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1640 SalomeApp_Module::contextMenuPopup( client, menu, title );
1644 getApp()->selectionMgr()->selectedObjects(lst);
1645 if (lst.Extent() < 1)
1648 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1649 _PTR(Study) study = appStudy->studyDS();
1651 bool isImported = true;
1652 SALOME_ListIteratorOfListIO anIt (lst);
1653 for (; anIt.More() && isImported; anIt.Next()) {
1654 Handle(SALOME_InteractiveObject) io = anIt.Value();
1655 _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1657 if (lst.Extent() == 1) {
1658 // Set context menu title
1659 if (client == "OCCViewer" || client == "VTKViewer")
1660 title = QString(aSObj->GetName().c_str());
1663 CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1664 GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1665 if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1673 menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1678 void GeometryGUI::createPreferences()
1680 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1682 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1683 setPreferenceProperty( genGroup, "columns", 2 );
1685 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1686 LightApp_Preferences::Selector,
1687 "Geometry", "display_mode" );
1689 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1690 LightApp_Preferences::Color, "Geometry", "shading_color" );
1692 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1693 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1695 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1696 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1698 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1699 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1701 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1702 LightApp_Preferences::Color, "Geometry", "line_color" );
1704 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1705 LightApp_Preferences::Color, "Geometry", "point_color" );
1707 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1708 LightApp_Preferences::Color, "Geometry", "isos_color" );
1710 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1711 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1713 addPreference( "", genGroup, LightApp_Preferences::Space );
1716 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1717 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1719 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1720 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1722 int front_material = addPreference( tr( "PREF_FRONT_MATERIAL" ), genGroup,
1723 LightApp_Preferences::Selector,
1724 "Geometry", "front_material" );
1726 int back_material = addPreference( tr( "PREF_BACK_MATERIAL" ), genGroup,
1727 LightApp_Preferences::Selector,
1728 "Geometry", "back_material" );
1734 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1735 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1737 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1738 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1740 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1741 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1743 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1744 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1746 for(int i = 0; i < nb; i++) {
1747 setPreferenceProperty( wd[i], "min", 1 );
1748 setPreferenceProperty( wd[i], "max", 5 );
1752 // Quantities with individual precision settings
1753 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1754 setPreferenceProperty( precGroup, "columns", 2 );
1756 const int nbQuantities = 8;
1757 int prec[nbQuantities], ii = 0;
1758 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1759 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1760 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1761 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1762 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1763 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1764 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1765 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1766 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1767 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1768 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1769 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1770 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1771 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1772 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1773 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1775 // Set property for precision value for spinboxes
1776 for ( ii = 0; ii < nbQuantities; ii++ ){
1777 setPreferenceProperty( prec[ii], "min", -14 );
1778 setPreferenceProperty( prec[ii], "max", 14 );
1779 setPreferenceProperty( prec[ii], "precision", 2 );
1782 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1783 setPreferenceProperty( VertexGroup, "columns", 2 );
1785 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1786 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1788 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1789 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1791 // Set property for default display mode
1792 QStringList aModesList;
1793 aModesList.append( tr("MEN_WIREFRAME") );
1794 aModesList.append( tr("MEN_SHADING") );
1795 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1797 QList<QVariant> anIndexesList;
1798 anIndexesList.append(0);
1799 anIndexesList.append(1);
1800 anIndexesList.append(2);
1802 setPreferenceProperty( dispmode, "strings", aModesList );
1803 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1805 // Set property for step value for spinboxes
1806 setPreferenceProperty( step, "min", 1 );
1807 setPreferenceProperty( step, "max", 10000 );
1808 setPreferenceProperty( step, "precision", 3 );
1810 // Set property for deflection value for spinboxes
1811 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1812 setPreferenceProperty( defl, "max", 1.0 );
1813 setPreferenceProperty( defl, "step", 1.0e-04 );
1814 setPreferenceProperty( defl, "precision", 6 );
1816 // Set property for default material
1817 Material_ResourceMgr aMatResMgr;
1818 QStringList aPrefMatNames = aMatResMgr.getPreferenceMaterialsNames();
1819 setPreferenceProperty( front_material, "strings", aPrefMatNames );
1820 setPreferenceProperty( back_material, "strings", aPrefMatNames );
1822 // Set property vertex marker type
1823 QList<QVariant> aMarkerTypeIndicesList;
1824 QList<QVariant> aMarkerTypeIconsList;
1826 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1827 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1828 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1829 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1830 aMarkerTypeIndicesList << (i-1);
1831 aMarkerTypeIconsList << pixmap;
1834 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1835 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1837 // Set property for vertex marker scale
1838 QList<QVariant> aMarkerScaleIndicesList;
1839 QStringList aMarkerScaleValuesList;
1841 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1842 aMarkerScaleIndicesList << iii;
1843 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1846 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1847 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1849 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1850 setPreferenceProperty( originGroup, "columns", 2 );
1852 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1853 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1854 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1855 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1857 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1858 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1861 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1862 setPreferenceProperty( operationsGroup, "columns", 2 );
1864 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1865 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1868 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1870 if (section == "Geometry") {
1871 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1872 if (param == QString("SettingsGeomStep")) {
1873 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1874 EmitSignalDefaultStepValueChanged(spin_step);
1879 LightApp_Displayer* GeometryGUI::displayer()
1882 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1886 void GeometryGUI::setLocalSelectionMode(const int mode)
1888 myLocalSelectionMode = mode;
1890 int GeometryGUI::getLocalSelectionMode() const
1892 return myLocalSelectionMode;
1895 const char gSeparator = '_'; // character used to separate parameter names
1896 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1899 * \brief Store visual parameters
1901 * This method is called just before the study document is saved.
1902 * Store visual parameters in AttributeParameter attribute(s)
1904 void GeometryGUI::storeVisualParameters (int savePoint)
1906 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1907 if ( !appStudy || !appStudy->studyDS() )
1909 _PTR(Study) studyDS = appStudy->studyDS();
1911 // componentName is used for encoding of entries when storing them in IParameters
1912 std::string componentName = myComponentGeom->ComponentDataType();
1913 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1914 //if (!aSComponent) return;
1917 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1918 componentName.c_str(),
1920 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1922 QList<SUIT_ViewManager*> lst;
1923 QList<SUIT_ViewManager*>::Iterator it;
1925 // main cycle to store parameters of displayed objects
1927 getApp()->viewManagers(lst);
1928 for (it = lst.begin(); it != lst.end(); it++) {
1929 SUIT_ViewManager* vman = *it;
1930 QString vType = vman->getType();
1931 int aMgrId = vman->getGlobalId();
1932 // saving VTK actors properties
1933 QVector<SUIT_ViewWindow*> views = vman->getViews();
1934 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1935 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1936 ObjMap::ConstIterator o_it = anObjects.begin();
1937 for (; o_it != anObjects.end(); o_it++) {
1938 const PropMap aProps = o_it.value();
1940 //Check that object exists in the study
1941 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1942 if ( !obj || !(aProps.count() > 0))
1944 // entry is "encoded" = it does NOT contain component adress, since it is a
1945 // subject to change on next component loading
1947 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1949 _PTR(GenericAttribute) anAttr;
1950 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1953 std::string param,occParam = vType.toLatin1().data();
1954 occParam += NAME_SEPARATOR;
1955 occParam += QString::number(aMgrId).toLatin1().data();
1956 occParam += NAME_SEPARATOR;
1958 if(aProps.contains(VISIBILITY_PROP)) {
1959 param = occParam + VISIBILITY_PROP;
1960 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
1963 if(aProps.contains(DISPLAY_MODE_PROP)) {
1964 param = occParam + DISPLAY_MODE_PROP;
1965 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
1968 if(aProps.contains(COLOR_PROP)) {
1969 QColor c = aProps.value(COLOR_PROP).value<QColor>();
1970 QString colorStr = QString::number(c.red()/255.);
1971 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
1972 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
1973 param = occParam + COLOR_PROP;
1974 ip->setParameter(entry, param, colorStr.toLatin1().data());
1977 if(vType == SVTK_Viewer::Type()) {
1978 if(aProps.contains(OPACITY_PROP)) {
1979 param = occParam + OPACITY_PROP;
1980 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1982 } else if (vType == SOCC_Viewer::Type()) {
1983 if(aProps.contains(TRANSPARENCY_PROP)) {
1984 param = occParam + TRANSPARENCY_PROP;
1985 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1988 if(aProps.contains(TOP_LEVEL_PROP)) {
1989 param = occParam + TOP_LEVEL_PROP;
1990 Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
1991 if (val == Standard_True)
1992 ip->setParameter(entry, param, "1");
1996 if(aProps.contains(ISOS_PROP)) {
1997 param = occParam + ISOS_PROP;
1998 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
2001 if(aProps.contains(VECTOR_MODE_PROP)) {
2002 param = occParam + VECTOR_MODE_PROP;
2003 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
2006 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
2007 param = occParam + DEFLECTION_COEFF_PROP;
2008 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
2011 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2012 if(aProps.contains(MARKER_TYPE_PROP)) {
2013 param = occParam + MARKER_TYPE_PROP;
2014 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
2017 if(aProps.contains(FRONT_MATERIAL_PROP)) {
2018 param = occParam + FRONT_MATERIAL_PROP;
2019 ip->setParameter(entry, param, aProps.value(FRONT_MATERIAL_PROP).toString().toLatin1().data());
2022 if(aProps.contains(BACK_MATERIAL_PROP)) {
2023 param = occParam + BACK_MATERIAL_PROP;
2024 ip->setParameter(entry, param, aProps.value(BACK_MATERIAL_PROP).toString().toLatin1().data());
2028 if(aProps.contains( EDGE_WIDTH_PROP )) {
2029 param = occParam + EDGE_WIDTH_PROP;
2030 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
2033 if(aProps.contains( ISOS_WIDTH_PROP )) {
2034 param = occParam + ISOS_WIDTH_PROP;
2035 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2037 } // object iterator
2039 } // for (viewManagers)
2043 * \brief Restore visual parameters
2045 * This method is called after the study document is opened.
2046 * Restore visual parameters from AttributeParameter attribute(s)
2048 void GeometryGUI::restoreVisualParameters (int savePoint)
2050 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2051 if (!appStudy || !appStudy->studyDS())
2053 _PTR(Study) studyDS = appStudy->studyDS();
2055 // componentName is used for encoding of entries when storing them in IParameters
2056 std::string componentName = myComponentGeom->ComponentDataType();
2057 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2058 //if (!aSComponent) return;
2061 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2062 componentName.c_str(),
2064 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2066 std::vector<std::string> entries = ip->getEntries();
2068 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2070 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2071 QString entry (ip->decodeEntry(*entIt).c_str());
2073 // Check that the entry corresponds to a real object in the Study
2074 // as the object may be deleted or modified after the visual state is saved.
2075 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2076 if (!so) continue; //Skip the not existent entry
2078 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2079 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2081 std::vector<std::string>::iterator namesIt = paramNames.begin();
2082 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2084 // actors are stored in a map after displaying of them for
2085 // quicker access in the future: map < viewID to actor >
2086 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2087 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2089 QString viewerTypStr;
2090 QString viewIndexStr;
2092 QVector<PropMap> aListOfMap;
2094 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2096 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2097 // '_' is used as separator and should not be used in viewer type or parameter names.
2098 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2099 if (lst.size() != 3)
2102 viewerTypStr = lst[0];
2103 viewIndexStr = lst[1];
2104 QString paramNameStr = lst[2];
2107 viewIndex = viewIndexStr.toUInt(&ok);
2108 if (!ok) // bad conversion of view index to integer
2111 if((viewIndex + 1) > aListOfMap.count()) {
2112 aListOfMap.resize(viewIndex + 1);
2115 QString val((*valuesIt).c_str());
2116 if(paramNameStr == VISIBILITY_PROP){
2117 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2119 } else if(paramNameStr == OPACITY_PROP) {
2120 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2122 } else if(paramNameStr == TRANSPARENCY_PROP) {
2123 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
2125 } else if(paramNameStr == TOP_LEVEL_PROP) {
2126 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
2128 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2129 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2131 } else if(paramNameStr == ISOS_PROP) {
2132 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2134 } else if(paramNameStr == COLOR_PROP) {
2135 QStringList rgb = val.split(DIGIT_SEPARATOR);
2136 if(rgb.count() == 3) {
2137 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2138 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2140 } else if(paramNameStr == VECTOR_MODE_PROP) {
2141 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2143 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2144 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2145 } else if(paramNameStr == MARKER_TYPE_PROP) {
2146 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2147 } else if(paramNameStr == FRONT_MATERIAL_PROP) {
2148 aListOfMap[viewIndex].insert( FRONT_MATERIAL_PROP, val);
2149 } else if(paramNameStr == BACK_MATERIAL_PROP) {
2150 aListOfMap[viewIndex].insert( BACK_MATERIAL_PROP, val);
2151 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2152 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2153 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2154 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2159 } // for names/parameters iterator
2161 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2163 for (int index = 0; index < aListOfMap.count(); index++) {
2165 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2167 //Get Visibility property of the current PropMap
2168 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2169 SUIT_ViewManager* vman = lst.at(index);
2170 SUIT_ViewModel* vmodel = vman->getViewModel();
2171 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2175 } // for entries iterator
2177 // update all VTK and OCC views
2178 QList<SUIT_ViewManager*> lst;
2179 getApp()->viewManagers(lst);
2180 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2181 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2184 if (vmodel->getType() == SVTK_Viewer::Type()) {
2185 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2186 vtkView->getRenderer()->ResetCameraClippingRange();
2189 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2190 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2191 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2198 void GeometryGUI::onViewAboutToShow()
2200 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2201 QAction* a = action( GEOMOp::OpSwitchVectors );
2203 a->setEnabled(true);
2204 bool vmode = window->property("VectorsMode").toBool();
2205 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2207 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2208 a->setEnabled(false);
2213 \brief Return action by id
2214 \param id identifier of the action
2217 QAction* GeometryGUI::getAction(const int id) {
2222 \brief Check if this object is can't be renamed in place
2224 This method can be re-implemented in the subclasses.
2225 Return true in case if object isn't reference or component (module root).
2227 \param entry column id
2228 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2230 bool GeometryGUI::renameAllowed( const QString& entry) const {
2232 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2233 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2234 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2236 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2241 Rename object by entry.
2242 \param entry entry of the object
2243 \param name new name of the object
2244 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2246 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2248 bool result = false;
2250 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2251 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2256 _PTR(Study) aStudy = appStudy->studyDS();
2261 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2263 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2267 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2268 _PTR(GenericAttribute) anAttr;
2270 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2271 _PTR(AttributeName) aName (anAttr);
2273 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2274 if (!CORBA::is_nil(anObj)) {
2275 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2276 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object