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_MATERIAL" ), true )->id(),
601 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
604 //=================================================================================
605 // function : GeometryGUI::OnKeyPress()
606 // purpose : Called when any key is pressed by user [static]
607 //=================================================================================
608 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
610 if ( !application() )
612 foreach ( GEOMGUI* lib, myGUIMap )
613 lib->OnKeyPress( e, application()->desktop(), w );
616 //=================================================================================
617 // function : GeometryGUI::OnMouseMove()
618 // purpose : Manages mouse move events [static]
619 //=================================================================================
620 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
622 if ( !application() )
624 foreach ( GEOMGUI* lib, myGUIMap )
625 lib->OnMouseMove( e, application()->desktop(), w );
628 //=================================================================================
629 // function : GeometryGUI::OnMouseRelease()
630 // purpose : Manages mouse release events [static]
631 //=================================================================================
632 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
634 if ( !application() )
636 foreach ( GEOMGUI* lib, myGUIMap )
637 lib->OnMouseRelease( e, application()->desktop(), w );
640 //=================================================================================
641 // function : GeometryGUI::OnMousePress()
642 // purpose : Manage mouse press events [static]
643 //=================================================================================
644 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
646 if ( !application() )
648 foreach ( GEOMGUI* lib, myGUIMap )
649 lib->OnMousePress( e, application()->desktop(), w );
652 //=======================================================================
653 // function : createGeomAction
655 //=======================================================================
656 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
657 const int accel, const bool toggle, const QString& shortcutAction )
659 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
660 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
661 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
663 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
665 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
666 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
668 application()->desktop(),
670 this, SLOT( OnGUIEvent() ),
674 //=======================================================================
675 // function : createOriginAndBaseVectors
677 //=======================================================================
678 void GeometryGUI::createOriginAndBaseVectors()
680 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
682 _PTR(Study) studyDS = appStudy->studyDS();
683 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
684 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
685 if( !aBasicOperations->_is_nil() ) {
686 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
687 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
688 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
689 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
690 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
691 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
693 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
694 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
695 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
696 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
697 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
699 getApp()->updateObjectBrowser( false );
705 //=======================================================================
706 // function : GeometryGUI::initialize()
707 // purpose : Called when GEOM module is created
708 //=======================================================================
709 void GeometryGUI::initialize( CAM_Application* app )
711 SalomeApp_Module::initialize( app );
713 // ----- create actions --------------
715 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
716 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
718 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
720 createGeomAction( GEOMOp::OpPoint, "POINT" );
721 createGeomAction( GEOMOp::OpLine, "LINE" );
722 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
723 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
724 createGeomAction( GEOMOp::OpArc, "ARC" );
725 createGeomAction( GEOMOp::OpCurve, "CURVE" );
726 createGeomAction( GEOMOp::OpVector, "VECTOR" );
727 createGeomAction( GEOMOp::OpPlane, "PLANE" );
728 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
729 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
731 createGeomAction( GEOMOp::OpBox, "BOX" );
732 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
733 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
734 createGeomAction( GEOMOp::OpTorus, "TORUS" );
735 createGeomAction( GEOMOp::OpCone, "CONE" );
736 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
737 createGeomAction( GEOMOp::OpDisk, "DISK" );
739 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
740 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
741 createGeomAction( GEOMOp::OpFilling, "FILLING" );
742 createGeomAction( GEOMOp::OpPipe, "PIPE" );
744 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
745 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
747 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
749 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
750 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
752 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
753 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
754 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
756 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
758 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
760 createGeomAction( GEOMOp::OpEdge, "EDGE" );
761 createGeomAction( GEOMOp::OpWire, "WIRE" );
762 createGeomAction( GEOMOp::OpFace, "FACE" );
763 createGeomAction( GEOMOp::OpShell, "SHELL" );
764 createGeomAction( GEOMOp::OpSolid, "SOLID" );
765 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
767 createGeomAction( GEOMOp::OpFuse, "FUSE" );
768 createGeomAction( GEOMOp::OpCommon, "COMMON" );
769 createGeomAction( GEOMOp::OpCut, "CUT" );
770 createGeomAction( GEOMOp::OpSection, "SECTION" );
772 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
773 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
774 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
775 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
776 createGeomAction( GEOMOp::OpScale, "SCALE" );
777 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
778 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
779 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
780 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
782 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
783 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
784 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
785 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
786 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
787 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
788 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
789 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
790 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
791 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
792 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
794 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
795 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
796 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
798 createGeomAction( GEOMOp::OpSewing, "SEWING" );
799 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
800 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
801 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
802 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
803 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
804 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
805 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
806 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
807 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
808 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
809 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
810 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
811 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
813 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
814 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
815 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
816 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
817 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
818 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
819 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
820 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
822 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
823 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
824 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
825 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
826 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
828 #ifdef _DEBUG_ // PAL16821
829 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
832 createGeomAction( GEOMOp::OpDisplayMode, "SHADING" );
833 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
834 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
835 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
836 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
837 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
838 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
839 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
840 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
841 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
842 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
843 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
844 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
845 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
846 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
847 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
848 createGeomAction( GEOMOp::OpHide, "ERASE" );
850 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
851 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
852 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
853 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
854 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
855 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
856 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
857 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
858 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
859 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
860 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
861 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
862 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
863 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
864 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
865 createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" );
866 createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" );
867 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
868 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
869 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
870 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
872 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
874 // Create actions for increase/decrease transparency shortcuts
875 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
876 "Geometry:Increase transparency");
877 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
878 "Geometry:Decrease transparency");
880 // Create actions for increase/decrease number of isolines
881 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
882 "Geometry:Increase number of isolines");
883 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
884 "Geometry:Decrease number of isolines");
886 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
887 //@@ 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 @@//
889 // ---- create menus --------------------------
891 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
892 createMenu( separator(), fileId, 10 );
893 createMenu( GEOMOp::OpImport, fileId, 10 );
894 createMenu( GEOMOp::OpExport, fileId, 10 );
895 createMenu( separator(), fileId, -1 );
897 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
898 createMenu( GEOMOp::OpDelete, editId, -1 );
900 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
902 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
903 createMenu( GEOMOp::OpPoint, basicId, -1 );
904 createMenu( GEOMOp::OpLine, basicId, -1 );
905 createMenu( GEOMOp::OpCircle, basicId, -1 );
906 createMenu( GEOMOp::OpEllipse, basicId, -1 );
907 createMenu( GEOMOp::OpArc, basicId, -1 );
908 createMenu( GEOMOp::OpCurve, basicId, -1 );
909 createMenu( separator(), basicId, -1 );
910 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
911 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
912 createMenu( GEOMOp::OpVector, basicId, -1 );
913 createMenu( GEOMOp::OpPlane, basicId, -1 );
914 createMenu( GEOMOp::OpLCS, basicId, -1 );
915 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
917 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
918 createMenu( GEOMOp::OpBox, primId, -1 );
919 createMenu( GEOMOp::OpCylinder, primId, -1 );
920 createMenu( GEOMOp::OpSphere, primId, -1 );
921 createMenu( GEOMOp::OpTorus, primId, -1 );
922 createMenu( GEOMOp::OpCone, primId, -1 );
923 createMenu( GEOMOp::OpRectangle, primId, -1 );
924 createMenu( GEOMOp::OpDisk, primId, -1 );
925 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
927 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
928 createMenu( GEOMOp::OpPrism, genId, -1 );
929 createMenu( GEOMOp::OpRevolution, genId, -1 );
930 createMenu( GEOMOp::OpFilling, genId, -1 );
931 createMenu( GEOMOp::OpPipe, genId, -1 );
933 // int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
934 // createMenu( GEOMOp::OpPipeTShape, advId, -1 );
935 // createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
936 //@@ 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 @@//
938 createMenu( separator(), newEntId, -1 );
940 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
941 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
942 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
944 createMenu( separator(), newEntId, -1 );
946 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
947 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
948 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
950 createMenu( separator(), newEntId, -1 );
952 createMenu( GEOMOp::OpExplode, newEntId, -1 );
954 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
955 createMenu( GEOMOp::OpEdge, buildId, -1 );
956 createMenu( GEOMOp::OpWire, buildId, -1 );
957 createMenu( GEOMOp::OpFace, buildId, -1 );
958 createMenu( GEOMOp::OpShell, buildId, -1 );
959 createMenu( GEOMOp::OpSolid, buildId, -1 );
960 createMenu( GEOMOp::OpCompound, buildId, -1 );
962 createMenu( separator(), newEntId, -1 );
964 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
966 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
969 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
971 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
972 createMenu( GEOMOp::OpFuse, boolId, -1 );
973 createMenu( GEOMOp::OpCommon, boolId, -1 );
974 createMenu( GEOMOp::OpCut, boolId, -1 );
975 createMenu( GEOMOp::OpSection, boolId, -1 );
977 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
978 createMenu( GEOMOp::OpTranslate, transId, -1 );
979 createMenu( GEOMOp::OpRotate, transId, -1 );
980 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
981 createMenu( GEOMOp::OpMirror, transId, -1 );
982 createMenu( GEOMOp::OpScale, transId, -1 );
983 createMenu( GEOMOp::OpOffset, transId, -1 );
984 createMenu( GEOMOp::OpProjection, transId, -1 );
985 createMenu( separator(), transId, -1 );
986 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
987 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
989 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
990 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
991 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
992 createMenu( GEOMOp::OpPropagate, blockId, -1 );
994 createMenu( separator(), operId, -1 );
996 createMenu( GEOMOp::OpPartition, operId, -1 );
997 createMenu( GEOMOp::OpArchimede, operId, -1 );
998 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
999 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1001 createMenu( separator(), operId, -1 );
1003 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1004 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1005 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1006 createMenu( GEOMOp::OpChamfer, operId, -1 );
1007 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1008 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1009 //createMenu( GEOMOp::OpClipping, operId, -1 );
1011 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1012 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1013 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1014 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1015 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1016 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1017 createMenu( GEOMOp::OpSewing, repairId, -1 );
1018 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1019 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1020 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1021 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1022 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1023 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1024 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1025 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1027 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1028 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1029 createMenu( GEOMOp::OpProperties, measurId, -1 );
1030 createMenu( separator(), measurId, -1 );
1031 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1032 createMenu( GEOMOp::OpInertia, measurId, -1 );
1033 createMenu( GEOMOp::OpNormale, measurId, -1 );
1034 createMenu( separator(), measurId, -1 );
1035 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1036 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1037 createMenu( separator(), measurId, -1 );
1039 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1040 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1041 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1042 createMenu( GEOMOp::OpAngle, dimId, -1 );
1044 createMenu( separator(), measurId, -1 );
1045 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1046 createMenu( separator(), measurId, -1 );
1047 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1048 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1049 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1050 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1052 #ifdef _DEBUG_ // PAL16821
1053 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1054 createMenu( separator(), toolsId, -1 );
1055 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1058 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1059 createMenu( separator(), viewId, -1 );
1061 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1062 createMenu( GEOMOp::OpDisplayMode, dispmodeId, -1 );
1063 createMenu( separator(), dispmodeId, -1 );
1064 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1066 createMenu( separator(), viewId, -1 );
1067 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1068 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1069 createMenu( separator(), viewId, -1 );
1070 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1071 createMenu( separator(), viewId, -1 );
1075 because of these items are accessible through object browser and viewers
1076 we have removed they from main menu
1078 createMenu( GEOMOp::OpShow, viewId, -1 );
1079 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1080 createMenu( GEOMOp::OpHide, viewId, -1 );
1083 // ---- create toolbars --------------------------
1085 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1086 createTool( GEOMOp::OpPoint, basicTbId );
1087 createTool( GEOMOp::OpLine, basicTbId );
1088 createTool( GEOMOp::OpCircle, basicTbId );
1089 createTool( GEOMOp::OpEllipse, basicTbId );
1090 createTool( GEOMOp::OpArc, basicTbId );
1091 createTool( GEOMOp::OpCurve, basicTbId );
1092 createTool( GEOMOp::OpVector, basicTbId );
1093 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1094 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1095 createTool( GEOMOp::OpPlane, basicTbId );
1096 createTool( GEOMOp::OpLCS, basicTbId );
1097 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1099 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1100 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1101 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1103 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1104 createTool( GEOMOp::OpBox, primTbId );
1105 createTool( GEOMOp::OpCylinder, primTbId );
1106 createTool( GEOMOp::OpSphere, primTbId );
1107 createTool( GEOMOp::OpTorus, primTbId );
1108 createTool( GEOMOp::OpCone, primTbId );
1109 createTool( GEOMOp::OpRectangle, primTbId );
1110 createTool( GEOMOp::OpDisk, primTbId );
1111 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1113 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1114 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1116 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1117 createTool( GEOMOp::OpFuse, boolTbId );
1118 createTool( GEOMOp::OpCommon, boolTbId );
1119 createTool( GEOMOp::OpCut, boolTbId );
1120 createTool( GEOMOp::OpSection, boolTbId );
1122 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1123 createTool( GEOMOp::OpPrism, genTbId );
1124 createTool( GEOMOp::OpRevolution, genTbId );
1125 createTool( GEOMOp::OpFilling, genTbId );
1126 createTool( GEOMOp::OpPipe, genTbId );
1128 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1129 createTool( GEOMOp::OpTranslate, transTbId );
1130 createTool( GEOMOp::OpRotate, transTbId );
1131 createTool( GEOMOp::OpChangeLoc, transTbId );
1132 createTool( GEOMOp::OpMirror, transTbId );
1133 createTool( GEOMOp::OpScale, transTbId );
1134 createTool( GEOMOp::OpOffset, transTbId );
1135 createTool( GEOMOp::OpProjection, transTbId );
1136 createTool( separator(), transTbId );
1137 createTool( GEOMOp::OpMultiTranslate, transTbId );
1138 createTool( GEOMOp::OpMultiRotate, transTbId );
1140 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1141 createTool( GEOMOp::OpExplode, operTbId );
1142 createTool( GEOMOp::OpPartition, operTbId );
1143 createTool( GEOMOp::OpArchimede, operTbId );
1144 createTool( GEOMOp::OpShapesOnShape, operTbId );
1145 createTool( GEOMOp::OpSharedShapes, operTbId );
1147 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1148 createTool( GEOMOp::OpFillet1d, featTbId );
1149 createTool( GEOMOp::OpFillet2d, featTbId );
1150 createTool( GEOMOp::OpFillet3d, featTbId );
1151 createTool( GEOMOp::OpChamfer, featTbId );
1152 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1153 createTool( GEOMOp::OpExtrudedCut, featTbId );
1155 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1156 createTool( GEOMOp::OpEdge, buildTbId );
1157 createTool( GEOMOp::OpWire, buildTbId );
1158 createTool( GEOMOp::OpFace, buildTbId );
1159 createTool( GEOMOp::OpShell, buildTbId );
1160 createTool( GEOMOp::OpSolid, buildTbId );
1161 createTool( GEOMOp::OpCompound, buildTbId );
1163 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1164 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1165 createTool( GEOMOp::OpProperties, measureTbId );
1166 createTool( GEOMOp::OpCenterMass, measureTbId );
1167 createTool( GEOMOp::OpInertia, measureTbId );
1168 createTool( GEOMOp::OpNormale, measureTbId );
1169 createTool( separator(), measureTbId );
1170 createTool( GEOMOp::OpBoundingBox, measureTbId );
1171 createTool( GEOMOp::OpMinDistance, measureTbId );
1172 createTool( GEOMOp::OpAngle, measureTbId );
1173 createTool( GEOMOp::OpTolerance , measureTbId );
1174 createTool( separator(), measureTbId );
1175 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1176 createTool( GEOMOp::OpFreeFaces, measureTbId );
1177 createTool( separator(), measureTbId );
1178 createTool( GEOMOp::OpWhatIs, measureTbId );
1179 createTool( GEOMOp::OpCheckShape, measureTbId );
1180 createTool( GEOMOp::OpCheckCompound, measureTbId );
1181 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1183 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1184 createTool( GEOMOp::OpPictureImport, picturesTbId );
1186 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1189 //@@ 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 @@//
1191 // ---- create popup menus --------------------------
1193 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1194 QString clientOCC = "(client='OCCViewer')";
1195 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1196 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1198 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1199 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1200 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1201 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1203 QString autoColorPrefix =
1204 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1206 QtxPopupMgr* mgr = popupMgr();
1208 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1209 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1210 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1211 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1212 mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children
1213 mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1215 mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1216 mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1217 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1218 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1219 mgr->insert( separator(), -1, -1 ); // -----------
1221 #if OCC_VERSION_LARGE > 0x06050200
1222 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1223 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1224 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1225 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1226 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1227 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1228 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
1230 mgr->insert( separator(), -1, -1 ); // -----------
1231 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1232 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1233 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1234 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1235 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1236 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1237 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1238 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1239 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1240 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1241 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1242 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1243 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1244 mgr->insert( separator(), dispmodeId, -1 );
1245 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1246 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1247 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1248 mgr->insert( separator(), -1, -1 ); // -----------
1249 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1250 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1251 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1252 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1253 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1254 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1255 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1256 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1257 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1258 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1259 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1260 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1261 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1262 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1263 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1265 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1266 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1267 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1269 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1270 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1272 mgr->insert( separator(), -1, -1 ); // -----------
1273 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1274 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1275 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1276 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1277 mgr->insert( separator(), -1, -1 ); // -----------
1279 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1280 onlyComponent = "((type='Component') and selcount=1)",
1281 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1282 types = "'Shape' 'Group'";
1284 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1285 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1287 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1288 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1290 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1291 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1293 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1295 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1296 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1297 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1298 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1299 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1300 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1301 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1302 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1303 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1304 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1305 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1306 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1307 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1308 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1309 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1310 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1311 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1312 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1313 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1314 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1315 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1316 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1317 mgr->insert( separator(), selectonlyId, -1);
1318 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1319 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1320 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1321 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1322 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1324 mgr->insert( separator(), -1, -1 ); // -----------
1325 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1326 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1329 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1330 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1332 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1333 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1335 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1338 //=======================================================================
1339 // function : GeometryGUI::activateModule()
1340 // purpose : Called when GEOM module is activated
1341 //=======================================================================
1342 bool GeometryGUI::activateModule( SUIT_Study* study )
1344 if ( CORBA::is_nil( myComponentGeom ) )
1347 bool res = SalomeApp_Module::activateModule( study );
1351 setMenuShown( true );
1352 setToolShown( true );
1354 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1355 PyGILState_STATE gstate = PyGILState_Ensure();
1356 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1357 if(pluginsmanager==NULL)
1361 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());
1366 PyGILState_Release(gstate);
1367 // end of GEOM plugins loading
1369 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1370 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1372 // Reset actions accelerator keys
1373 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1374 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1375 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1377 GUIMap::Iterator it;
1378 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1379 it.value()->activate( application()->desktop() );
1381 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1383 SUIT_ViewManager* vm;
1384 ViewManagerList OCCViewManagers, VTKViewManagers;
1386 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1387 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1388 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1389 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1391 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1392 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1393 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1394 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1397 SALOME_ListIO selected;
1398 sm->selectedObjects( selected );
1399 sm->clearSelected();
1401 // disable OCC selectors
1402 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1403 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1404 while ( itOCCSel.hasNext() )
1405 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1406 sr->setEnabled(true);
1408 // disable VTK selectors
1409 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1410 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1411 while ( itVTKSel.hasNext() )
1412 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1413 sr->setEnabled(true);
1415 sm->setSelectedObjects( selected, true ); //NPAL 19674
1417 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1419 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1421 // 0020836 (Basic vectors and origin)
1422 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1423 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1424 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1426 _PTR(Study) studyDS = appStudy->studyDS();
1428 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1429 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1430 createOriginAndBaseVectors();
1439 //=======================================================================
1440 // function : GeometryGUI::deactivateModule()
1441 // purpose : Called when GEOM module is deactivated
1442 //=======================================================================
1443 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1445 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1447 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1449 setMenuShown( false );
1450 setToolShown( false );
1452 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1453 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1455 EmitSignalCloseAllDialogs();
1457 GUIMap::Iterator it;
1458 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1459 it.value()->deactivate();
1461 // Unset actions accelerator keys
1462 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1463 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1464 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1466 qDeleteAll(myOCCSelectors);
1467 myOCCSelectors.clear();
1468 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1470 qDeleteAll(myVTKSelectors);
1471 myVTKSelectors.clear();
1472 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1474 return SalomeApp_Module::deactivateModule( study );
1477 //=======================================================================
1478 // function : onWindowActivated()
1479 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1480 //=======================================================================
1481 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1486 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1487 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1489 // disable non-OCC viewframe menu commands
1490 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1491 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1492 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1493 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1494 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1495 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1496 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1498 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1499 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1501 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1504 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1506 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1507 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1510 void GeometryGUI::viewManagers( QStringList& lst ) const
1512 lst.append( OCCViewer_Viewer::Type() );
1515 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1517 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1519 qDebug( "connect" );
1520 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1521 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1522 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1523 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1524 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1525 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1526 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1527 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1529 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1530 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1532 // disable OCC selectors
1533 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1534 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1535 while ( itOCCSel.hasNext() )
1536 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1537 sr->setEnabled(true);
1539 else if ( vm->getType() == SVTK_Viewer::Type() )
1541 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1542 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1544 // disable VTK selectors
1545 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1546 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1547 while ( itVTKSel.hasNext() )
1548 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1549 sr->setEnabled(true);
1553 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1555 SUIT_ViewModel* viewer = vm->getViewModel();
1556 if ( vm->getType() == OCCViewer_Viewer::Type() )
1558 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1559 while ( itOCCSel.hasNext() )
1560 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1561 if ( sr->viewer() == viewer )
1563 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1567 if ( vm->getType() == SVTK_Viewer::Type() )
1569 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1570 while ( itVTKSel.hasNext() )
1571 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1572 if ( sr->viewer() == viewer )
1574 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1580 QString GeometryGUI::engineIOR() const
1582 if ( !CORBA::is_nil( GetGeomGen() ) )
1583 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1587 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1588 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1590 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1592 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1594 theWidth = theHeight = 0;
1596 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1597 Handle(TColStd_HArray1OfByte) aTexture;
1599 Handle(Graphic3d_HArray1OfBytes) aTexture;
1603 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1604 aTexture = aTextureMap[ theId ];
1605 if ( aTexture.IsNull() ) {
1606 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1607 if ( !aInsOp->_is_nil() ) {
1608 CORBA::Long aWidth, aHeight;
1609 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1610 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1612 theHeight = aHeight;
1614 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1615 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1617 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1620 for (int i = 0; i < aStream->length(); i++)
1621 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1622 aTextureMap[ theId ] = aTexture;
1630 LightApp_Selection* GeometryGUI::createSelection() const
1632 return new GEOMGUI_Selection();
1635 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1637 SalomeApp_Module::contextMenuPopup( client, menu, title );
1641 getApp()->selectionMgr()->selectedObjects(lst);
1642 if (lst.Extent() < 1)
1645 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1646 _PTR(Study) study = appStudy->studyDS();
1648 bool isImported = true;
1649 SALOME_ListIteratorOfListIO anIt (lst);
1650 for (; anIt.More() && isImported; anIt.Next()) {
1651 Handle(SALOME_InteractiveObject) io = anIt.Value();
1652 _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1654 if (lst.Extent() == 1) {
1655 // Set context menu title
1656 if (client == "OCCViewer" || client == "VTKViewer")
1657 title = QString(aSObj->GetName().c_str());
1660 CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1661 GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1662 if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1670 menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1675 void GeometryGUI::createPreferences()
1677 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1679 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1680 setPreferenceProperty( genGroup, "columns", 2 );
1682 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1683 LightApp_Preferences::Selector,
1684 "Geometry", "display_mode" );
1686 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1687 LightApp_Preferences::Color, "Geometry", "shading_color" );
1689 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1690 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1692 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1693 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1695 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1696 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1698 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1699 LightApp_Preferences::Color, "Geometry", "line_color" );
1701 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1702 LightApp_Preferences::Color, "Geometry", "point_color" );
1704 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1705 LightApp_Preferences::Color, "Geometry", "isos_color" );
1707 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1708 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1710 addPreference( "", genGroup, LightApp_Preferences::Space );
1713 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1714 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1716 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1717 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1719 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
1720 LightApp_Preferences::Selector,
1721 "Geometry", "material" );
1727 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1728 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1730 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1731 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1733 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1734 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1736 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1737 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1739 for(int i = 0; i < nb; i++) {
1740 setPreferenceProperty( wd[i], "min", 1 );
1741 setPreferenceProperty( wd[i], "max", 5 );
1745 // Quantities with individual precision settings
1746 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1747 setPreferenceProperty( precGroup, "columns", 2 );
1749 const int nbQuantities = 8;
1750 int prec[nbQuantities], ii = 0;
1751 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1752 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1753 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1754 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1755 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1756 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1757 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1758 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1759 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1760 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1761 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1762 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1763 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1764 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1765 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1766 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1768 // Set property for precision value for spinboxes
1769 for ( ii = 0; ii < nbQuantities; ii++ ){
1770 setPreferenceProperty( prec[ii], "min", -14 );
1771 setPreferenceProperty( prec[ii], "max", 14 );
1772 setPreferenceProperty( prec[ii], "precision", 2 );
1775 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1776 setPreferenceProperty( VertexGroup, "columns", 2 );
1778 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1779 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1781 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1782 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1784 // Set property for default display mode
1785 QStringList aModesList;
1786 aModesList.append( tr("MEN_WIREFRAME") );
1787 aModesList.append( tr("MEN_SHADING") );
1788 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1790 QList<QVariant> anIndexesList;
1791 anIndexesList.append(0);
1792 anIndexesList.append(1);
1793 anIndexesList.append(2);
1795 setPreferenceProperty( dispmode, "strings", aModesList );
1796 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1798 // Set property for step value for spinboxes
1799 setPreferenceProperty( step, "min", 1 );
1800 setPreferenceProperty( step, "max", 10000 );
1801 setPreferenceProperty( step, "precision", 3 );
1803 // Set property for deflection value for spinboxes
1804 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1805 setPreferenceProperty( defl, "max", 1.0 );
1806 setPreferenceProperty( defl, "step", 1.0e-04 );
1807 setPreferenceProperty( defl, "precision", 6 );
1809 // Set property for default material
1810 Material_ResourceMgr aMatResMgr;
1811 QStringList aPrefMatNames = aMatResMgr.getPreferenceMaterialsNames();
1812 setPreferenceProperty( material, "strings", aPrefMatNames );
1814 // Set property vertex marker type
1815 QList<QVariant> aMarkerTypeIndicesList;
1816 QList<QVariant> aMarkerTypeIconsList;
1818 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1819 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1820 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1821 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1822 aMarkerTypeIndicesList << (i-1);
1823 aMarkerTypeIconsList << pixmap;
1826 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1827 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1829 // Set property for vertex marker scale
1830 QList<QVariant> aMarkerScaleIndicesList;
1831 QStringList aMarkerScaleValuesList;
1833 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1834 aMarkerScaleIndicesList << iii;
1835 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1838 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1839 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1841 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1842 setPreferenceProperty( originGroup, "columns", 2 );
1844 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1845 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1846 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1847 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1849 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1850 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1853 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1854 setPreferenceProperty( operationsGroup, "columns", 2 );
1856 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1857 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1860 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1862 if (section == "Geometry") {
1863 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1864 if (param == QString("SettingsGeomStep")) {
1865 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1866 EmitSignalDefaultStepValueChanged(spin_step);
1871 LightApp_Displayer* GeometryGUI::displayer()
1874 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1878 void GeometryGUI::setLocalSelectionMode(const int mode)
1880 myLocalSelectionMode = mode;
1882 int GeometryGUI::getLocalSelectionMode() const
1884 return myLocalSelectionMode;
1887 const char gSeparator = '_'; // character used to separate parameter names
1888 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1891 * \brief Store visual parameters
1893 * This method is called just before the study document is saved.
1894 * Store visual parameters in AttributeParameter attribute(s)
1896 void GeometryGUI::storeVisualParameters (int savePoint)
1898 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1899 if ( !appStudy || !appStudy->studyDS() )
1901 _PTR(Study) studyDS = appStudy->studyDS();
1903 // componentName is used for encoding of entries when storing them in IParameters
1904 std::string componentName = myComponentGeom->ComponentDataType();
1905 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1906 //if (!aSComponent) return;
1909 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1910 componentName.c_str(),
1912 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1914 QList<SUIT_ViewManager*> lst;
1915 QList<SUIT_ViewManager*>::Iterator it;
1917 // main cycle to store parameters of displayed objects
1919 getApp()->viewManagers(lst);
1920 for (it = lst.begin(); it != lst.end(); it++) {
1921 SUIT_ViewManager* vman = *it;
1922 QString vType = vman->getType();
1923 int aMgrId = vman->getGlobalId();
1924 // saving VTK actors properties
1925 QVector<SUIT_ViewWindow*> views = vman->getViews();
1926 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1927 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1928 ObjMap::ConstIterator o_it = anObjects.begin();
1929 for (; o_it != anObjects.end(); o_it++) {
1930 const PropMap aProps = o_it.value();
1932 //Check that object exists in the study
1933 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1934 if ( !obj || !(aProps.count() > 0))
1936 // entry is "encoded" = it does NOT contain component adress, since it is a
1937 // subject to change on next component loading
1939 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1941 _PTR(GenericAttribute) anAttr;
1942 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1945 std::string param,occParam = vType.toLatin1().data();
1946 occParam += NAME_SEPARATOR;
1947 occParam += QString::number(aMgrId).toLatin1().data();
1948 occParam += NAME_SEPARATOR;
1950 if(aProps.contains(VISIBILITY_PROP)) {
1951 param = occParam + VISIBILITY_PROP;
1952 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
1955 if(aProps.contains(DISPLAY_MODE_PROP)) {
1956 param = occParam + DISPLAY_MODE_PROP;
1957 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
1960 if(aProps.contains(COLOR_PROP)) {
1961 QColor c = aProps.value(COLOR_PROP).value<QColor>();
1962 QString colorStr = QString::number(c.red()/255.);
1963 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
1964 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
1965 param = occParam + COLOR_PROP;
1966 ip->setParameter(entry, param, colorStr.toLatin1().data());
1969 if(vType == SVTK_Viewer::Type()) {
1970 if(aProps.contains(OPACITY_PROP)) {
1971 param = occParam + OPACITY_PROP;
1972 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1974 } else if (vType == SOCC_Viewer::Type()) {
1975 if(aProps.contains(TRANSPARENCY_PROP)) {
1976 param = occParam + TRANSPARENCY_PROP;
1977 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1980 if(aProps.contains(TOP_LEVEL_PROP)) {
1981 param = occParam + TOP_LEVEL_PROP;
1982 Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
1983 if (val == Standard_True)
1984 ip->setParameter(entry, param, "1");
1988 if(aProps.contains(ISOS_PROP)) {
1989 param = occParam + ISOS_PROP;
1990 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
1993 if(aProps.contains(VECTOR_MODE_PROP)) {
1994 param = occParam + VECTOR_MODE_PROP;
1995 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
1998 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
1999 param = occParam + DEFLECTION_COEFF_PROP;
2000 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
2003 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2004 if(aProps.contains(MARKER_TYPE_PROP)) {
2005 param = occParam + MARKER_TYPE_PROP;
2006 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
2009 if(aProps.contains(MATERIAL_PROP)) {
2010 param = occParam + MATERIAL_PROP;
2011 ip->setParameter(entry, param, aProps.value(MATERIAL_PROP).toString().toLatin1().data());
2014 if(aProps.contains( EDGE_WIDTH_PROP )) {
2015 param = occParam + EDGE_WIDTH_PROP;
2016 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
2019 if(aProps.contains( ISOS_WIDTH_PROP )) {
2020 param = occParam + ISOS_WIDTH_PROP;
2021 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2023 } // object iterator
2025 } // for (viewManagers)
2029 * \brief Restore visual parameters
2031 * This method is called after the study document is opened.
2032 * Restore visual parameters from AttributeParameter attribute(s)
2034 void GeometryGUI::restoreVisualParameters (int savePoint)
2036 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2037 if (!appStudy || !appStudy->studyDS())
2039 _PTR(Study) studyDS = appStudy->studyDS();
2041 // componentName is used for encoding of entries when storing them in IParameters
2042 std::string componentName = myComponentGeom->ComponentDataType();
2043 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2044 //if (!aSComponent) return;
2047 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2048 componentName.c_str(),
2050 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2052 std::vector<std::string> entries = ip->getEntries();
2054 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2056 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2057 QString entry (ip->decodeEntry(*entIt).c_str());
2059 // Check that the entry corresponds to a real object in the Study
2060 // as the object may be deleted or modified after the visual state is saved.
2061 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2062 if (!so) continue; //Skip the not existent entry
2064 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2065 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2067 std::vector<std::string>::iterator namesIt = paramNames.begin();
2068 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2070 // actors are stored in a map after displaying of them for
2071 // quicker access in the future: map < viewID to actor >
2072 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2073 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2075 QString viewerTypStr;
2076 QString viewIndexStr;
2078 QVector<PropMap> aListOfMap;
2080 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2082 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2083 // '_' is used as separator and should not be used in viewer type or parameter names.
2084 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2085 if (lst.size() != 3)
2088 viewerTypStr = lst[0];
2089 viewIndexStr = lst[1];
2090 QString paramNameStr = lst[2];
2093 viewIndex = viewIndexStr.toUInt(&ok);
2094 if (!ok) // bad conversion of view index to integer
2097 if((viewIndex + 1) > aListOfMap.count()) {
2098 aListOfMap.resize(viewIndex + 1);
2101 QString val((*valuesIt).c_str());
2102 if(paramNameStr == VISIBILITY_PROP){
2103 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2105 } else if(paramNameStr == OPACITY_PROP) {
2106 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2108 } else if(paramNameStr == TRANSPARENCY_PROP) {
2109 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
2111 } else if(paramNameStr == TOP_LEVEL_PROP) {
2112 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
2114 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2115 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2117 } else if(paramNameStr == ISOS_PROP) {
2118 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2120 } else if(paramNameStr == COLOR_PROP) {
2121 QStringList rgb = val.split(DIGIT_SEPARATOR);
2122 if(rgb.count() == 3) {
2123 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2124 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2126 } else if(paramNameStr == VECTOR_MODE_PROP) {
2127 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2129 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2130 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2131 } else if(paramNameStr == MARKER_TYPE_PROP) {
2132 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2133 } else if(paramNameStr == MATERIAL_PROP) {
2134 aListOfMap[viewIndex].insert( MATERIAL_PROP, val);
2135 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2136 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2137 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2138 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2143 } // for names/parameters iterator
2145 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2147 for (int index = 0; index < aListOfMap.count(); index++) {
2149 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2151 //Get Visibility property of the current PropMap
2152 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2153 SUIT_ViewManager* vman = lst.at(index);
2154 SUIT_ViewModel* vmodel = vman->getViewModel();
2155 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2159 } // for entries iterator
2161 // update all VTK and OCC views
2162 QList<SUIT_ViewManager*> lst;
2163 getApp()->viewManagers(lst);
2164 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2165 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2168 if (vmodel->getType() == SVTK_Viewer::Type()) {
2169 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2170 vtkView->getRenderer()->ResetCameraClippingRange();
2173 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2174 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2175 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2182 void GeometryGUI::onViewAboutToShow()
2184 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2185 QAction* a = action( GEOMOp::OpSwitchVectors );
2187 a->setEnabled(true);
2188 bool vmode = window->property("VectorsMode").toBool();
2189 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2191 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2192 a->setEnabled(false);
2197 \brief Return action by id
2198 \param id identifier of the action
2201 QAction* GeometryGUI::getAction(const int id) {
2206 \brief Check if this object is can't be renamed in place
2208 This method can be re-implemented in the subclasses.
2209 Return true in case if object isn't reference or component (module root).
2211 \param entry column id
2212 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2214 bool GeometryGUI::renameAllowed( const QString& entry) const {
2216 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2217 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2218 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2220 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2225 Rename object by entry.
2226 \param entry entry of the object
2227 \param name new name of the object
2228 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2230 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2232 bool result = false;
2234 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2235 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2240 _PTR(Study) aStudy = appStudy->studyDS();
2245 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2247 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2251 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2252 _PTR(GenericAttribute) anAttr;
2254 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2255 _PTR(AttributeName) aName (anAttr);
2257 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2258 if (!CORBA::is_nil(anObj)) {
2259 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2260 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object