1 // Copyright (C) 2007-2011 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 libName = "GEOMToolsGUI";
431 case GEOMOp::OpDisplayMode: // MENU VIEW - WIREFRAME/SHADING
432 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
433 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
434 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
435 case GEOMOp::OpHide: // MENU VIEW - ERASE
436 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
437 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
438 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
439 case GEOMOp::OpShading: // POPUP MENU - SHADING
440 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
441 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
442 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
443 libName = "DisplayGUI";
445 case GEOMOp::OpPoint: // MENU BASIC - POINT
446 case GEOMOp::OpLine: // MENU BASIC - LINE
447 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
448 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
449 case GEOMOp::OpArc: // MENU BASIC - ARC
450 case GEOMOp::OpVector: // MENU BASIC - VECTOR
451 case GEOMOp::OpPlane: // MENU BASIC - PLANE
452 case GEOMOp::OpCurve: // MENU BASIC - CURVE
453 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
454 libName = "BasicGUI";
456 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
457 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
458 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
459 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
460 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
461 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
462 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
463 libName = "PrimitiveGUI";
465 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
466 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
467 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
468 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
469 libName = "GenerationGUI";
471 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
472 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
473 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
475 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
477 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
478 libName = "EntityGUI";
480 case GEOMOp::OpEdge: // MENU BUILD - EDGE
481 case GEOMOp::OpWire: // MENU BUILD - WIRE
482 case GEOMOp::OpFace: // MENU BUILD - FACE
483 case GEOMOp::OpShell: // MENU BUILD - SHELL
484 case GEOMOp::OpSolid: // MENU BUILD - SOLID
485 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
486 libName = "BuildGUI";
488 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
489 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
490 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
491 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
492 libName = "BooleanGUI";
494 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
495 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
496 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
497 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
498 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
499 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
500 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
501 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
502 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
503 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
504 libName = "TransformationGUI";
506 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
507 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
508 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
509 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
510 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
511 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
512 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
513 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
514 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
515 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
516 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
517 libName = "OperationGUI";
519 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
520 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
521 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
522 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
523 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
524 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
525 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
526 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
527 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
528 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
529 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
530 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
531 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
532 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
533 libName = "RepairGUI";
535 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
536 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
537 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
538 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
539 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
540 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
541 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
542 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
543 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
544 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
545 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
546 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
547 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
548 libName = "MeasureGUI";
550 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
551 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
552 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
553 libName = "GroupGUI";
555 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
556 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
557 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
558 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
559 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
560 libName = "BlocksGUI";
562 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
563 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
564 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
565 //@@ 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 @@//
566 libName = "AdvancedGUI";
572 GEOMGUI* library = 0;
573 if ( !libName.isEmpty() ) {
575 libName = QString( "lib" ) + libName + ".so";
577 libName = libName + ".dll";
579 library = getLibrary( libName );
582 // call method of corresponding GUI library
584 library->OnGUIEvent( id, desk );
586 // Update a list of materials for "Preferences" dialog
587 if ( id == GEOMOp::OpMaterialProperties ) {
588 LightApp_Preferences* pref = preferences();
590 Material_ResourceMgr aMatResMgr;
591 QStringList aPerfMatNames = aMatResMgr.getPreferenceMaterialsNames();
592 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_FRONT_MATERIAL" ), true )->id(),
595 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_BACK_MATERIAL" ), true )->id(),
602 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
605 //=================================================================================
606 // function : GeometryGUI::OnKeyPress()
607 // purpose : Called when any key is pressed by user [static]
608 //=================================================================================
609 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
611 if ( !application() )
613 foreach ( GEOMGUI* lib, myGUIMap )
614 lib->OnKeyPress( e, application()->desktop(), w );
617 //=================================================================================
618 // function : GeometryGUI::OnMouseMove()
619 // purpose : Manages mouse move events [static]
620 //=================================================================================
621 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
623 if ( !application() )
625 foreach ( GEOMGUI* lib, myGUIMap )
626 lib->OnMouseMove( e, application()->desktop(), w );
629 //=================================================================================
630 // function : GeometryGUI::OnMouseRelease()
631 // purpose : Manages mouse release events [static]
632 //=================================================================================
633 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
635 if ( !application() )
637 foreach ( GEOMGUI* lib, myGUIMap )
638 lib->OnMouseRelease( e, application()->desktop(), w );
641 //=================================================================================
642 // function : GeometryGUI::OnMousePress()
643 // purpose : Manage mouse press events [static]
644 //=================================================================================
645 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
647 if ( !application() )
649 foreach ( GEOMGUI* lib, myGUIMap )
650 lib->OnMousePress( e, application()->desktop(), w );
653 //=======================================================================
654 // function : createGeomAction
656 //=======================================================================
657 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
658 const int accel, const bool toggle, const QString& shortcutAction )
660 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
661 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
662 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
664 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
666 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
667 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
669 application()->desktop(),
671 this, SLOT( OnGUIEvent() ),
675 //=======================================================================
676 // function : createOriginAndBaseVectors
678 //=======================================================================
679 void GeometryGUI::createOriginAndBaseVectors()
681 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
683 _PTR(Study) studyDS = appStudy->studyDS();
684 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
685 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
686 if( !aBasicOperations->_is_nil() ) {
687 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
688 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
689 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
690 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
691 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
692 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
694 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
695 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
696 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
697 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
698 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
700 getApp()->updateObjectBrowser( false );
706 //=======================================================================
707 // function : GeometryGUI::initialize()
708 // purpose : Called when GEOM module is created
709 //=======================================================================
710 void GeometryGUI::initialize( CAM_Application* app )
712 SalomeApp_Module::initialize( app );
714 // ----- create actions --------------
716 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
717 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
719 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
721 createGeomAction( GEOMOp::OpPoint, "POINT" );
722 createGeomAction( GEOMOp::OpLine, "LINE" );
723 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
724 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
725 createGeomAction( GEOMOp::OpArc, "ARC" );
726 createGeomAction( GEOMOp::OpCurve, "CURVE" );
727 createGeomAction( GEOMOp::OpVector, "VECTOR" );
728 createGeomAction( GEOMOp::OpPlane, "PLANE" );
729 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
730 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
732 createGeomAction( GEOMOp::OpBox, "BOX" );
733 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
734 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
735 createGeomAction( GEOMOp::OpTorus, "TORUS" );
736 createGeomAction( GEOMOp::OpCone, "CONE" );
737 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
738 createGeomAction( GEOMOp::OpDisk, "DISK" );
740 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
741 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
742 createGeomAction( GEOMOp::OpFilling, "FILLING" );
743 createGeomAction( GEOMOp::OpPipe, "PIPE" );
745 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
746 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
748 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
750 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
751 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
753 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
754 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
755 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
757 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
759 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
761 createGeomAction( GEOMOp::OpEdge, "EDGE" );
762 createGeomAction( GEOMOp::OpWire, "WIRE" );
763 createGeomAction( GEOMOp::OpFace, "FACE" );
764 createGeomAction( GEOMOp::OpShell, "SHELL" );
765 createGeomAction( GEOMOp::OpSolid, "SOLID" );
766 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
768 createGeomAction( GEOMOp::OpFuse, "FUSE" );
769 createGeomAction( GEOMOp::OpCommon, "COMMON" );
770 createGeomAction( GEOMOp::OpCut, "CUT" );
771 createGeomAction( GEOMOp::OpSection, "SECTION" );
773 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
774 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
775 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
776 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
777 createGeomAction( GEOMOp::OpScale, "SCALE" );
778 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
779 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
780 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
781 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
783 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
784 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
785 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
786 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
787 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
788 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
789 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
790 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
791 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
792 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
793 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
795 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
796 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
797 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
799 createGeomAction( GEOMOp::OpSewing, "SEWING" );
800 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
801 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
802 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
803 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
804 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
805 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
806 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
807 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
808 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
809 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
810 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
811 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
812 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
814 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
815 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
816 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
817 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
818 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
819 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
820 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
821 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
823 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
824 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
825 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
826 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
827 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
829 #ifdef _DEBUG_ // PAL16821
830 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
833 createGeomAction( GEOMOp::OpDisplayMode, "SHADING" );
834 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
835 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
836 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
837 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
838 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
839 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
840 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
841 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
842 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
843 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
844 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
845 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
846 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
847 createGeomAction( GEOMOp::OpHide, "ERASE" );
849 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
850 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
851 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
852 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
853 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
854 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
855 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
856 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
857 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
858 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
859 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
860 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
861 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
862 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
863 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
864 createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" );
865 createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" );
866 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
867 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
868 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
869 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
871 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
873 // Create actions for increase/decrease transparency shortcuts
874 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
875 "Geometry:Increase transparency");
876 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
877 "Geometry:Decrease transparency");
879 // Create actions for increase/decrease number of isolines
880 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
881 "Geometry:Increase number of isolines");
882 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
883 "Geometry:Decrease number of isolines");
885 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
886 //@@ 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 @@//
888 // ---- create menus --------------------------
890 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
891 createMenu( separator(), fileId, 10 );
892 createMenu( GEOMOp::OpImport, fileId, 10 );
893 createMenu( GEOMOp::OpExport, fileId, 10 );
894 createMenu( separator(), fileId, -1 );
896 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
897 createMenu( GEOMOp::OpDelete, editId, -1 );
899 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
901 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
902 createMenu( GEOMOp::OpPoint, basicId, -1 );
903 createMenu( GEOMOp::OpLine, basicId, -1 );
904 createMenu( GEOMOp::OpCircle, basicId, -1 );
905 createMenu( GEOMOp::OpEllipse, basicId, -1 );
906 createMenu( GEOMOp::OpArc, basicId, -1 );
907 createMenu( GEOMOp::OpCurve, basicId, -1 );
908 createMenu( separator(), basicId, -1 );
909 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
910 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
911 createMenu( GEOMOp::OpVector, basicId, -1 );
912 createMenu( GEOMOp::OpPlane, basicId, -1 );
913 createMenu( GEOMOp::OpLCS, basicId, -1 );
914 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
916 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
917 createMenu( GEOMOp::OpBox, primId, -1 );
918 createMenu( GEOMOp::OpCylinder, primId, -1 );
919 createMenu( GEOMOp::OpSphere, primId, -1 );
920 createMenu( GEOMOp::OpTorus, primId, -1 );
921 createMenu( GEOMOp::OpCone, primId, -1 );
922 createMenu( GEOMOp::OpRectangle, primId, -1 );
923 createMenu( GEOMOp::OpDisk, primId, -1 );
924 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
926 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
927 createMenu( GEOMOp::OpPrism, genId, -1 );
928 createMenu( GEOMOp::OpRevolution, genId, -1 );
929 createMenu( GEOMOp::OpFilling, genId, -1 );
930 createMenu( GEOMOp::OpPipe, genId, -1 );
932 // int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
933 // createMenu( GEOMOp::OpPipeTShape, advId, -1 );
934 // createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
935 //@@ 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 @@//
937 createMenu( separator(), newEntId, -1 );
939 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
940 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
941 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
943 createMenu( separator(), newEntId, -1 );
945 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
946 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
947 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
949 createMenu( separator(), newEntId, -1 );
951 createMenu( GEOMOp::OpExplode, newEntId, -1 );
953 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
954 createMenu( GEOMOp::OpEdge, buildId, -1 );
955 createMenu( GEOMOp::OpWire, buildId, -1 );
956 createMenu( GEOMOp::OpFace, buildId, -1 );
957 createMenu( GEOMOp::OpShell, buildId, -1 );
958 createMenu( GEOMOp::OpSolid, buildId, -1 );
959 createMenu( GEOMOp::OpCompound, buildId, -1 );
961 createMenu( separator(), newEntId, -1 );
963 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
965 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
968 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
970 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
971 createMenu( GEOMOp::OpFuse, boolId, -1 );
972 createMenu( GEOMOp::OpCommon, boolId, -1 );
973 createMenu( GEOMOp::OpCut, boolId, -1 );
974 createMenu( GEOMOp::OpSection, boolId, -1 );
976 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
977 createMenu( GEOMOp::OpTranslate, transId, -1 );
978 createMenu( GEOMOp::OpRotate, transId, -1 );
979 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
980 createMenu( GEOMOp::OpMirror, transId, -1 );
981 createMenu( GEOMOp::OpScale, transId, -1 );
982 createMenu( GEOMOp::OpOffset, transId, -1 );
983 createMenu( GEOMOp::OpProjection, transId, -1 );
984 createMenu( separator(), transId, -1 );
985 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
986 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
988 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
989 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
990 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
991 createMenu( GEOMOp::OpPropagate, blockId, -1 );
993 createMenu( separator(), operId, -1 );
995 createMenu( GEOMOp::OpPartition, operId, -1 );
996 createMenu( GEOMOp::OpArchimede, operId, -1 );
997 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
998 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1000 createMenu( separator(), operId, -1 );
1002 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1003 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1004 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1005 createMenu( GEOMOp::OpChamfer, operId, -1 );
1006 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1007 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1008 //createMenu( GEOMOp::OpClipping, operId, -1 );
1010 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1011 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1012 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1013 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1014 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1015 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1016 createMenu( GEOMOp::OpSewing, repairId, -1 );
1017 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1018 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1019 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1020 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1021 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1022 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1023 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1024 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1026 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1027 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1028 createMenu( GEOMOp::OpProperties, measurId, -1 );
1029 createMenu( separator(), measurId, -1 );
1030 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1031 createMenu( GEOMOp::OpInertia, measurId, -1 );
1032 createMenu( GEOMOp::OpNormale, measurId, -1 );
1033 createMenu( separator(), measurId, -1 );
1034 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1035 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1036 createMenu( separator(), measurId, -1 );
1038 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1039 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1040 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1041 createMenu( GEOMOp::OpAngle, dimId, -1 );
1043 createMenu( separator(), measurId, -1 );
1044 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1045 createMenu( separator(), measurId, -1 );
1046 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1047 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1048 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1049 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1051 #ifdef _DEBUG_ // PAL16821
1052 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1053 createMenu( separator(), toolsId, -1 );
1054 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1057 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1058 createMenu( separator(), viewId, -1 );
1060 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1061 createMenu( GEOMOp::OpDisplayMode, dispmodeId, -1 );
1062 createMenu( separator(), dispmodeId, -1 );
1063 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1065 createMenu( separator(), viewId, -1 );
1066 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1067 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1068 createMenu( separator(), viewId, -1 );
1069 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1070 createMenu( separator(), viewId, -1 );
1074 because of these items are accessible through object browser and viewers
1075 we have removed they from main menu
1077 createMenu( GEOMOp::OpShow, viewId, -1 );
1078 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1079 createMenu( GEOMOp::OpHide, viewId, -1 );
1082 // ---- create toolbars --------------------------
1084 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1085 createTool( GEOMOp::OpPoint, basicTbId );
1086 createTool( GEOMOp::OpLine, basicTbId );
1087 createTool( GEOMOp::OpCircle, basicTbId );
1088 createTool( GEOMOp::OpEllipse, basicTbId );
1089 createTool( GEOMOp::OpArc, basicTbId );
1090 createTool( GEOMOp::OpCurve, basicTbId );
1091 createTool( GEOMOp::OpVector, basicTbId );
1092 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1093 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1094 createTool( GEOMOp::OpPlane, basicTbId );
1095 createTool( GEOMOp::OpLCS, basicTbId );
1096 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1098 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1099 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1100 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1102 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1103 createTool( GEOMOp::OpBox, primTbId );
1104 createTool( GEOMOp::OpCylinder, primTbId );
1105 createTool( GEOMOp::OpSphere, primTbId );
1106 createTool( GEOMOp::OpTorus, primTbId );
1107 createTool( GEOMOp::OpCone, primTbId );
1108 createTool( GEOMOp::OpRectangle, primTbId );
1109 createTool( GEOMOp::OpDisk, primTbId );
1110 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1112 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1113 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1115 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1116 createTool( GEOMOp::OpFuse, boolTbId );
1117 createTool( GEOMOp::OpCommon, boolTbId );
1118 createTool( GEOMOp::OpCut, boolTbId );
1119 createTool( GEOMOp::OpSection, boolTbId );
1121 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1122 createTool( GEOMOp::OpPrism, genTbId );
1123 createTool( GEOMOp::OpRevolution, genTbId );
1124 createTool( GEOMOp::OpFilling, genTbId );
1125 createTool( GEOMOp::OpPipe, genTbId );
1127 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1128 createTool( GEOMOp::OpTranslate, transTbId );
1129 createTool( GEOMOp::OpRotate, transTbId );
1130 createTool( GEOMOp::OpChangeLoc, transTbId );
1131 createTool( GEOMOp::OpMirror, transTbId );
1132 createTool( GEOMOp::OpScale, transTbId );
1133 createTool( GEOMOp::OpOffset, transTbId );
1134 createTool( GEOMOp::OpProjection, transTbId );
1135 createTool( separator(), transTbId );
1136 createTool( GEOMOp::OpMultiTranslate, transTbId );
1137 createTool( GEOMOp::OpMultiRotate, transTbId );
1139 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1140 createTool( GEOMOp::OpExplode, operTbId );
1141 createTool( GEOMOp::OpPartition, operTbId );
1142 createTool( GEOMOp::OpArchimede, operTbId );
1143 createTool( GEOMOp::OpShapesOnShape, operTbId );
1144 createTool( GEOMOp::OpSharedShapes, operTbId );
1146 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1147 createTool( GEOMOp::OpFillet1d, featTbId );
1148 createTool( GEOMOp::OpFillet2d, featTbId );
1149 createTool( GEOMOp::OpFillet3d, featTbId );
1150 createTool( GEOMOp::OpChamfer, featTbId );
1151 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1152 createTool( GEOMOp::OpExtrudedCut, featTbId );
1154 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1155 createTool( GEOMOp::OpEdge, buildTbId );
1156 createTool( GEOMOp::OpWire, buildTbId );
1157 createTool( GEOMOp::OpFace, buildTbId );
1158 createTool( GEOMOp::OpShell, buildTbId );
1159 createTool( GEOMOp::OpSolid, buildTbId );
1160 createTool( GEOMOp::OpCompound, buildTbId );
1162 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1163 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1164 createTool( GEOMOp::OpProperties, measureTbId );
1165 createTool( GEOMOp::OpCenterMass, measureTbId );
1166 createTool( GEOMOp::OpInertia, measureTbId );
1167 createTool( GEOMOp::OpNormale, measureTbId );
1168 createTool( separator(), measureTbId );
1169 createTool( GEOMOp::OpBoundingBox, measureTbId );
1170 createTool( GEOMOp::OpMinDistance, measureTbId );
1171 createTool( GEOMOp::OpAngle, measureTbId );
1172 createTool( GEOMOp::OpTolerance , measureTbId );
1173 createTool( separator(), measureTbId );
1174 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1175 createTool( GEOMOp::OpFreeFaces, measureTbId );
1176 createTool( separator(), measureTbId );
1177 createTool( GEOMOp::OpWhatIs, measureTbId );
1178 createTool( GEOMOp::OpCheckShape, measureTbId );
1179 createTool( GEOMOp::OpCheckCompound, measureTbId );
1180 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1182 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1183 createTool( GEOMOp::OpPictureImport, picturesTbId );
1185 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1188 //@@ 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 @@//
1190 // ---- create popup menus --------------------------
1192 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1193 QString clientOCC = "(client='OCCViewer')";
1194 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1195 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1197 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1198 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1199 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1200 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1202 QString autoColorPrefix =
1203 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1205 QtxPopupMgr* mgr = popupMgr();
1207 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1208 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1209 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1210 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1211 mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children
1212 mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1214 mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1215 mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1216 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1217 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1218 mgr->insert( separator(), -1, -1 ); // -----------
1219 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1220 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1221 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1222 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1223 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1224 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1225 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1226 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1227 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1228 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1229 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1230 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1231 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1232 mgr->insert( separator(), dispmodeId, -1 );
1233 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1234 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1235 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1236 mgr->insert( separator(), -1, -1 ); // -----------
1237 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1238 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1239 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1240 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1241 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1242 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1243 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1244 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1245 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1246 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1247 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1248 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1249 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1250 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1251 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1253 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1254 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1255 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1257 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1258 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1260 mgr->insert( separator(), -1, -1 ); // -----------
1261 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1262 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1263 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1264 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1265 mgr->insert( separator(), -1, -1 ); // -----------
1267 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1268 onlyComponent = "((type='Component') and selcount=1)",
1269 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1270 types = "'Shape' 'Group'";
1272 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1273 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1275 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1276 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1278 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1279 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1281 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1283 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1284 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1285 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1286 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1287 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1288 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1289 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1290 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1291 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1292 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1293 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1294 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1295 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1296 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1297 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1298 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1299 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1300 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1301 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1302 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1303 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1304 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1305 mgr->insert( separator(), selectonlyId, -1);
1306 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1307 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1308 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1309 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1310 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1311 mgr->insert( separator(), -1, -1 );
1313 mgr->insert( separator(), -1, -1 ); // -----------
1314 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1315 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1318 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1319 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1321 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1322 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1324 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1327 //=======================================================================
1328 // function : GeometryGUI::activateModule()
1329 // purpose : Called when GEOM module is activated
1330 //=======================================================================
1331 bool GeometryGUI::activateModule( SUIT_Study* study )
1333 if ( CORBA::is_nil( myComponentGeom ) )
1336 bool res = SalomeApp_Module::activateModule( study );
1340 setMenuShown( true );
1341 setToolShown( true );
1343 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1344 PyGILState_STATE gstate = PyGILState_Ensure();
1345 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1346 if(pluginsmanager==NULL)
1350 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());
1355 PyGILState_Release(gstate);
1356 // end of GEOM plugins loading
1358 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1359 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1361 // Reset actions accelerator keys
1362 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1363 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1364 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1366 GUIMap::Iterator it;
1367 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1368 it.value()->activate( application()->desktop() );
1370 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1372 SUIT_ViewManager* vm;
1373 ViewManagerList OCCViewManagers, VTKViewManagers;
1375 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1376 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1377 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1378 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1380 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1381 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1382 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1383 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1386 SALOME_ListIO selected;
1387 sm->selectedObjects( selected );
1388 sm->clearSelected();
1390 // disable OCC selectors
1391 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1392 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1393 while ( itOCCSel.hasNext() )
1394 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1395 sr->setEnabled(true);
1397 // disable VTK selectors
1398 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1399 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1400 while ( itVTKSel.hasNext() )
1401 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1402 sr->setEnabled(true);
1404 sm->setSelectedObjects( selected, true ); //NPAL 19674
1406 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1408 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1410 // 0020836 (Basic vectors and origin)
1411 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1412 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1413 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1415 _PTR(Study) studyDS = appStudy->studyDS();
1417 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1418 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1419 createOriginAndBaseVectors();
1428 //=======================================================================
1429 // function : GeometryGUI::deactivateModule()
1430 // purpose : Called when GEOM module is deactivated
1431 //=======================================================================
1432 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1434 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1436 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1438 setMenuShown( false );
1439 setToolShown( false );
1441 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1442 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1444 EmitSignalCloseAllDialogs();
1446 GUIMap::Iterator it;
1447 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1448 it.value()->deactivate();
1450 // Unset actions accelerator keys
1451 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1452 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1453 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1455 qDeleteAll(myOCCSelectors);
1456 myOCCSelectors.clear();
1457 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1459 qDeleteAll(myVTKSelectors);
1460 myVTKSelectors.clear();
1461 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1463 return SalomeApp_Module::deactivateModule( study );
1466 //=======================================================================
1467 // function : onWindowActivated()
1468 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1469 //=======================================================================
1470 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1475 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1476 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1478 // disable non-OCC viewframe menu commands
1479 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1480 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1481 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1482 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1483 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1484 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1485 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1487 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1488 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1490 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1493 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1495 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1496 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1499 void GeometryGUI::viewManagers( QStringList& lst ) const
1501 lst.append( OCCViewer_Viewer::Type() );
1504 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1506 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1508 qDebug( "connect" );
1509 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1510 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1511 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1512 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1513 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1514 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1515 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1516 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1518 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1519 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1521 // disable OCC selectors
1522 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1523 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1524 while ( itOCCSel.hasNext() )
1525 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1526 sr->setEnabled(true);
1528 else if ( vm->getType() == SVTK_Viewer::Type() )
1530 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1531 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1533 // disable VTK selectors
1534 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1535 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1536 while ( itVTKSel.hasNext() )
1537 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1538 sr->setEnabled(true);
1542 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1544 SUIT_ViewModel* viewer = vm->getViewModel();
1545 if ( vm->getType() == OCCViewer_Viewer::Type() )
1547 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1548 while ( itOCCSel.hasNext() )
1549 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1550 if ( sr->viewer() == viewer )
1552 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1556 if ( vm->getType() == SVTK_Viewer::Type() )
1558 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1559 while ( itVTKSel.hasNext() )
1560 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1561 if ( sr->viewer() == viewer )
1563 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1569 QString GeometryGUI::engineIOR() const
1571 if ( !CORBA::is_nil( GetGeomGen() ) )
1572 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1576 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1577 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1579 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1581 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1583 theWidth = theHeight = 0;
1585 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1586 Handle(TColStd_HArray1OfByte) aTexture;
1588 Handle(Graphic3d_HArray1OfBytes) aTexture;
1592 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1593 aTexture = aTextureMap[ theId ];
1594 if ( aTexture.IsNull() ) {
1595 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1596 if ( !aInsOp->_is_nil() ) {
1597 CORBA::Long aWidth, aHeight;
1598 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1599 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1601 theHeight = aHeight;
1603 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1604 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1606 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1609 for (int i = 0; i < aStream->length(); i++)
1610 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1611 aTextureMap[ theId ] = aTexture;
1619 LightApp_Selection* GeometryGUI::createSelection() const
1621 return new GEOMGUI_Selection();
1624 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1626 SalomeApp_Module::contextMenuPopup( client, menu, title );
1630 getApp()->selectionMgr()->selectedObjects(lst);
1631 if (lst.Extent() < 1)
1634 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1635 _PTR(Study) study = appStudy->studyDS();
1637 bool isImported = true;
1638 SALOME_ListIteratorOfListIO anIt (lst);
1639 for (; anIt.More() && isImported; anIt.Next()) {
1640 Handle(SALOME_InteractiveObject) io = anIt.Value();
1641 _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1643 if (lst.Extent() == 1) {
1644 // Set context menu title
1645 if (client == "OCCViewer" || client == "VTKViewer")
1646 title = QString(aSObj->GetName().c_str());
1649 CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1650 GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1651 if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1659 menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1664 void GeometryGUI::createPreferences()
1666 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1668 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1669 setPreferenceProperty( genGroup, "columns", 2 );
1671 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1672 LightApp_Preferences::Selector,
1673 "Geometry", "display_mode" );
1675 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1676 LightApp_Preferences::Color, "Geometry", "shading_color" );
1678 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1679 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1681 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1682 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1684 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1685 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1687 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1688 LightApp_Preferences::Color, "Geometry", "line_color" );
1690 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1691 LightApp_Preferences::Color, "Geometry", "point_color" );
1693 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1694 LightApp_Preferences::Color, "Geometry", "isos_color" );
1696 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1697 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1699 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1700 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1702 int front_material = addPreference( tr( "PREF_FRONT_MATERIAL" ), genGroup,
1703 LightApp_Preferences::Selector,
1704 "Geometry", "front_material" );
1706 int back_material = addPreference( tr( "PREF_BACK_MATERIAL" ), genGroup,
1707 LightApp_Preferences::Selector,
1708 "Geometry", "back_material" );
1714 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1715 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1717 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1718 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1720 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1721 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1723 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1724 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1726 for(int i = 0; i < nb; i++) {
1727 setPreferenceProperty( wd[i], "min", 1 );
1728 setPreferenceProperty( wd[i], "max", 5 );
1732 // Quantities with individual precision settings
1733 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1734 setPreferenceProperty( precGroup, "columns", 2 );
1736 const int nbQuantities = 8;
1737 int prec[nbQuantities], ii = 0;
1738 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1739 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1740 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1741 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1742 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1743 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1744 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1745 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1746 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1747 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1748 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1749 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1750 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1751 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1752 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1753 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1755 // Set property for precision value for spinboxes
1756 for ( ii = 0; ii < nbQuantities; ii++ ){
1757 setPreferenceProperty( prec[ii], "min", -14 );
1758 setPreferenceProperty( prec[ii], "max", 14 );
1759 setPreferenceProperty( prec[ii], "precision", 2 );
1762 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1763 setPreferenceProperty( VertexGroup, "columns", 2 );
1765 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1766 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1768 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1769 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1771 // Set property for default display mode
1772 QStringList aModesList;
1773 aModesList.append( tr("MEN_WIREFRAME") );
1774 aModesList.append( tr("MEN_SHADING") );
1775 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1777 QList<QVariant> anIndexesList;
1778 anIndexesList.append(0);
1779 anIndexesList.append(1);
1780 anIndexesList.append(2);
1782 setPreferenceProperty( dispmode, "strings", aModesList );
1783 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1785 // Set property for step value for spinboxes
1786 setPreferenceProperty( step, "min", 1 );
1787 setPreferenceProperty( step, "max", 10000 );
1788 setPreferenceProperty( step, "precision", 3 );
1790 // Set property for deflection value for spinboxes
1791 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1792 setPreferenceProperty( defl, "max", 1.0 );
1793 setPreferenceProperty( defl, "step", 1.0e-04 );
1794 setPreferenceProperty( defl, "precision", 6 );
1796 // Set property for default material
1797 Material_ResourceMgr aMatResMgr;
1798 QStringList aPrefMatNames = aMatResMgr.getPreferenceMaterialsNames();
1799 setPreferenceProperty( front_material, "strings", aPrefMatNames );
1800 setPreferenceProperty( back_material, "strings", aPrefMatNames );
1802 // Set property vertex marker type
1803 QList<QVariant> aMarkerTypeIndicesList;
1804 QList<QVariant> aMarkerTypeIconsList;
1806 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1807 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1808 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1809 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1810 aMarkerTypeIndicesList << (i-1);
1811 aMarkerTypeIconsList << pixmap;
1814 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1815 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1817 // Set property for vertex marker scale
1818 QList<QVariant> aMarkerScaleIndicesList;
1819 QStringList aMarkerScaleValuesList;
1821 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1822 aMarkerScaleIndicesList << iii;
1823 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1826 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1827 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1829 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1830 setPreferenceProperty( originGroup, "columns", 2 );
1832 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1833 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1834 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1835 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1837 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1838 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1841 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1842 setPreferenceProperty( operationsGroup, "columns", 2 );
1844 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1845 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1848 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1850 if (section == "Geometry") {
1851 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1852 if (param == QString("SettingsGeomStep")) {
1853 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1854 EmitSignalDefaultStepValueChanged(spin_step);
1859 LightApp_Displayer* GeometryGUI::displayer()
1862 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1866 void GeometryGUI::setLocalSelectionMode(const int mode)
1868 myLocalSelectionMode = mode;
1870 int GeometryGUI::getLocalSelectionMode() const
1872 return myLocalSelectionMode;
1875 const char gSeparator = '_'; // character used to separate parameter names
1876 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1879 * \brief Store visual parameters
1881 * This method is called just before the study document is saved.
1882 * Store visual parameters in AttributeParameter attribute(s)
1884 void GeometryGUI::storeVisualParameters (int savePoint)
1886 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1887 if ( !appStudy || !appStudy->studyDS() )
1889 _PTR(Study) studyDS = appStudy->studyDS();
1891 // componentName is used for encoding of entries when storing them in IParameters
1892 std::string componentName = myComponentGeom->ComponentDataType();
1893 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1894 //if (!aSComponent) return;
1897 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1898 componentName.c_str(),
1900 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1902 QList<SUIT_ViewManager*> lst;
1903 QList<SUIT_ViewManager*>::Iterator it;
1905 // main cycle to store parameters of displayed objects
1907 getApp()->viewManagers(lst);
1908 for (it = lst.begin(); it != lst.end(); it++) {
1909 SUIT_ViewManager* vman = *it;
1910 QString vType = vman->getType();
1911 int aMgrId = vman->getGlobalId();
1912 // saving VTK actors properties
1913 QVector<SUIT_ViewWindow*> views = vman->getViews();
1914 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1915 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1916 ObjMap::ConstIterator o_it = anObjects.begin();
1917 for (; o_it != anObjects.end(); o_it++) {
1918 const PropMap aProps = o_it.value();
1920 //Check that object exists in the study
1921 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1922 if ( !obj || !(aProps.count() > 0))
1924 // entry is "encoded" = it does NOT contain component adress, since it is a
1925 // subject to change on next component loading
1927 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1929 _PTR(GenericAttribute) anAttr;
1930 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1933 std::string param,occParam = vType.toLatin1().data();
1934 occParam += NAME_SEPARATOR;
1935 occParam += QString::number(aMgrId).toLatin1().data();
1936 occParam += NAME_SEPARATOR;
1938 if(aProps.contains(VISIBILITY_PROP)) {
1939 param = occParam + VISIBILITY_PROP;
1940 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
1943 if(aProps.contains(DISPLAY_MODE_PROP)) {
1944 param = occParam + DISPLAY_MODE_PROP;
1945 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
1948 if(aProps.contains(COLOR_PROP)) {
1949 QColor c = aProps.value(COLOR_PROP).value<QColor>();
1950 QString colorStr = QString::number(c.red()/255.);
1951 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
1952 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
1953 param = occParam + COLOR_PROP;
1954 ip->setParameter(entry, param, colorStr.toLatin1().data());
1957 if(vType == SVTK_Viewer::Type()) {
1958 if(aProps.contains(OPACITY_PROP)) {
1959 param = occParam + OPACITY_PROP;
1960 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1962 } else if (vType == SOCC_Viewer::Type()) {
1963 if(aProps.contains(TRANSPARENCY_PROP)) {
1964 param = occParam + TRANSPARENCY_PROP;
1965 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1969 if(aProps.contains(ISOS_PROP)) {
1970 param = occParam + ISOS_PROP;
1971 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
1974 if(aProps.contains(VECTOR_MODE_PROP)) {
1975 param = occParam + VECTOR_MODE_PROP;
1976 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
1979 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
1980 param = occParam + DEFLECTION_COEFF_PROP;
1981 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
1984 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
1985 if(aProps.contains(MARKER_TYPE_PROP)) {
1986 param = occParam + MARKER_TYPE_PROP;
1987 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
1990 if(aProps.contains(FRONT_MATERIAL_PROP)) {
1991 param = occParam + FRONT_MATERIAL_PROP;
1992 ip->setParameter(entry, param, aProps.value(FRONT_MATERIAL_PROP).toString().toLatin1().data());
1995 if(aProps.contains(BACK_MATERIAL_PROP)) {
1996 param = occParam + BACK_MATERIAL_PROP;
1997 ip->setParameter(entry, param, aProps.value(BACK_MATERIAL_PROP).toString().toLatin1().data());
2001 if(aProps.contains( EDGE_WIDTH_PROP )) {
2002 param = occParam + EDGE_WIDTH_PROP;
2003 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
2006 if(aProps.contains( ISOS_WIDTH_PROP )) {
2007 param = occParam + ISOS_WIDTH_PROP;
2008 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2010 } // object iterator
2012 } // for (viewManagers)
2016 * \brief Restore visual parameters
2018 * This method is called after the study document is opened.
2019 * Restore visual parameters from AttributeParameter attribute(s)
2021 void GeometryGUI::restoreVisualParameters (int savePoint)
2023 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2024 if (!appStudy || !appStudy->studyDS())
2026 _PTR(Study) studyDS = appStudy->studyDS();
2028 // componentName is used for encoding of entries when storing them in IParameters
2029 std::string componentName = myComponentGeom->ComponentDataType();
2030 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2031 //if (!aSComponent) return;
2034 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2035 componentName.c_str(),
2037 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2039 std::vector<std::string> entries = ip->getEntries();
2041 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2043 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2044 QString entry (ip->decodeEntry(*entIt).c_str());
2046 // Check that the entry corresponds to a real object in the Study
2047 // as the object may be deleted or modified after the visual state is saved.
2048 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2049 if (!so) continue; //Skip the not existent entry
2051 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2052 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2054 std::vector<std::string>::iterator namesIt = paramNames.begin();
2055 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2057 // actors are stored in a map after displaying of them for
2058 // quicker access in the future: map < viewID to actor >
2059 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2060 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2062 QString viewerTypStr;
2063 QString viewIndexStr;
2065 QVector<PropMap> aListOfMap;
2067 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2069 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2070 // '_' is used as separator and should not be used in viewer type or parameter names.
2071 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2072 if (lst.size() != 3)
2075 viewerTypStr = lst[0];
2076 viewIndexStr = lst[1];
2077 QString paramNameStr = lst[2];
2080 viewIndex = viewIndexStr.toUInt(&ok);
2081 if (!ok) // bad conversion of view index to integer
2084 if((viewIndex + 1) > aListOfMap.count()) {
2085 aListOfMap.resize(viewIndex + 1);
2088 QString val((*valuesIt).c_str());
2089 if(paramNameStr == VISIBILITY_PROP){
2090 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2092 } else if(paramNameStr == OPACITY_PROP) {
2093 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2095 } else if(paramNameStr == TRANSPARENCY_PROP) {
2096 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, val.toDouble());
2098 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2099 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2101 } else if(paramNameStr == ISOS_PROP) {
2102 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2104 } else if(paramNameStr == COLOR_PROP) {
2105 QStringList rgb = val.split(DIGIT_SEPARATOR);
2106 if(rgb.count() == 3) {
2107 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2108 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2110 } else if(paramNameStr == VECTOR_MODE_PROP) {
2111 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2113 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2114 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2115 } else if(paramNameStr == MARKER_TYPE_PROP) {
2116 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2117 } else if(paramNameStr == FRONT_MATERIAL_PROP) {
2118 aListOfMap[viewIndex].insert( FRONT_MATERIAL_PROP, val);
2119 } else if(paramNameStr == BACK_MATERIAL_PROP) {
2120 aListOfMap[viewIndex].insert( BACK_MATERIAL_PROP, val);
2121 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2122 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2123 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2124 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2129 } // for names/parameters iterator
2131 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2133 for (int index = 0; index < aListOfMap.count(); index++) {
2135 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2137 //Get Visibility property of the current PropMap
2138 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2139 SUIT_ViewManager* vman = lst.at(index);
2140 SUIT_ViewModel* vmodel = vman->getViewModel();
2141 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2145 } // for entries iterator
2147 // update all VTK and OCC views
2148 QList<SUIT_ViewManager*> lst;
2149 getApp()->viewManagers(lst);
2150 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2151 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2154 if (vmodel->getType() == SVTK_Viewer::Type()) {
2155 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2156 vtkView->getRenderer()->ResetCameraClippingRange();
2159 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2160 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2161 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2168 void GeometryGUI::onViewAboutToShow()
2170 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2171 QAction* a = action( GEOMOp::OpSwitchVectors );
2173 a->setEnabled(true);
2174 bool vmode = window->property("VectorsMode").toBool();
2175 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2177 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2178 a->setEnabled(false);
2183 Rename object by entry.
2184 \param entry entry of the object
2185 \param name new name of the object
2186 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2188 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2190 bool appRes = SalomeApp_Module::renameObject(entry,name);
2194 bool result = false;
2196 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2197 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2202 _PTR(Study) aStudy = appStudy->studyDS();
2207 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2208 _PTR(GenericAttribute) anAttr;
2210 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2211 _PTR(AttributeName) aName (anAttr);
2213 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2214 if (!CORBA::is_nil(anObj)) {
2215 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2216 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object