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 libName = "OperationGUI";
517 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
518 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
519 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
520 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
521 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
522 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
523 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
524 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
525 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
526 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
527 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
528 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
529 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
530 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
531 libName = "RepairGUI";
533 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
534 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
535 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
536 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
537 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
538 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
539 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
540 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
541 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
542 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
543 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
544 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
545 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
546 libName = "MeasureGUI";
548 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
549 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
550 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
551 libName = "GroupGUI";
553 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
554 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
555 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
556 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
557 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
558 libName = "BlocksGUI";
560 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
561 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
562 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
563 //@@ 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 @@//
564 libName = "AdvancedGUI";
570 GEOMGUI* library = 0;
571 if ( !libName.isEmpty() ) {
573 libName = QString( "lib" ) + libName + ".so";
575 libName = libName + ".dll";
577 library = getLibrary( libName );
580 // call method of corresponding GUI library
582 library->OnGUIEvent( id, desk );
584 // Update a list of materials for "Preferences" dialog
585 if ( id == GEOMOp::OpMaterialProperties ) {
586 LightApp_Preferences* pref = preferences();
588 Material_ResourceMgr aMatResMgr;
589 QStringList aPerfMatNames = aMatResMgr.getPreferenceMaterialsNames();
590 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_FRONT_MATERIAL" ), true )->id(),
593 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_BACK_MATERIAL" ), true )->id(),
600 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
603 //=================================================================================
604 // function : GeometryGUI::OnKeyPress()
605 // purpose : Called when any key is pressed by user [static]
606 //=================================================================================
607 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
609 if ( !application() )
611 foreach ( GEOMGUI* lib, myGUIMap )
612 lib->OnKeyPress( e, application()->desktop(), w );
615 //=================================================================================
616 // function : GeometryGUI::OnMouseMove()
617 // purpose : Manages mouse move events [static]
618 //=================================================================================
619 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
621 if ( !application() )
623 foreach ( GEOMGUI* lib, myGUIMap )
624 lib->OnMouseMove( e, application()->desktop(), w );
627 //=================================================================================
628 // function : GeometryGUI::OnMouseRelease()
629 // purpose : Manages mouse release events [static]
630 //=================================================================================
631 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
633 if ( !application() )
635 foreach ( GEOMGUI* lib, myGUIMap )
636 lib->OnMouseRelease( e, application()->desktop(), w );
639 //=================================================================================
640 // function : GeometryGUI::OnMousePress()
641 // purpose : Manage mouse press events [static]
642 //=================================================================================
643 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
645 if ( !application() )
647 foreach ( GEOMGUI* lib, myGUIMap )
648 lib->OnMousePress( e, application()->desktop(), w );
651 //=======================================================================
652 // function : createGeomAction
654 //=======================================================================
655 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
656 const int accel, const bool toggle, const QString& shortcutAction )
658 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
659 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
660 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
662 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
664 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
665 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
667 application()->desktop(),
669 this, SLOT( OnGUIEvent() ),
673 //=======================================================================
674 // function : createOriginAndBaseVectors
676 //=======================================================================
677 void GeometryGUI::createOriginAndBaseVectors()
679 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
681 _PTR(Study) studyDS = appStudy->studyDS();
682 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
683 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
684 if( !aBasicOperations->_is_nil() ) {
685 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
686 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
687 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
688 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
689 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
690 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
692 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
693 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
694 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
695 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
696 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
698 getApp()->updateObjectBrowser( false );
704 //=======================================================================
705 // function : GeometryGUI::initialize()
706 // purpose : Called when GEOM module is created
707 //=======================================================================
708 void GeometryGUI::initialize( CAM_Application* app )
710 SalomeApp_Module::initialize( app );
712 // ----- create actions --------------
714 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
715 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
717 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
719 createGeomAction( GEOMOp::OpPoint, "POINT" );
720 createGeomAction( GEOMOp::OpLine, "LINE" );
721 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
722 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
723 createGeomAction( GEOMOp::OpArc, "ARC" );
724 createGeomAction( GEOMOp::OpCurve, "CURVE" );
725 createGeomAction( GEOMOp::OpVector, "VECTOR" );
726 createGeomAction( GEOMOp::OpPlane, "PLANE" );
727 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
728 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
730 createGeomAction( GEOMOp::OpBox, "BOX" );
731 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
732 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
733 createGeomAction( GEOMOp::OpTorus, "TORUS" );
734 createGeomAction( GEOMOp::OpCone, "CONE" );
735 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
736 createGeomAction( GEOMOp::OpDisk, "DISK" );
738 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
739 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
740 createGeomAction( GEOMOp::OpFilling, "FILLING" );
741 createGeomAction( GEOMOp::OpPipe, "PIPE" );
743 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
744 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
746 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
748 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
749 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
751 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
752 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
753 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
755 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
757 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
759 createGeomAction( GEOMOp::OpEdge, "EDGE" );
760 createGeomAction( GEOMOp::OpWire, "WIRE" );
761 createGeomAction( GEOMOp::OpFace, "FACE" );
762 createGeomAction( GEOMOp::OpShell, "SHELL" );
763 createGeomAction( GEOMOp::OpSolid, "SOLID" );
764 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
766 createGeomAction( GEOMOp::OpFuse, "FUSE" );
767 createGeomAction( GEOMOp::OpCommon, "COMMON" );
768 createGeomAction( GEOMOp::OpCut, "CUT" );
769 createGeomAction( GEOMOp::OpSection, "SECTION" );
771 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
772 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
773 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
774 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
775 createGeomAction( GEOMOp::OpScale, "SCALE" );
776 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
777 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
778 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
779 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
781 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
782 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
783 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
784 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
785 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
786 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
787 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
788 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
789 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
791 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
792 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
793 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
795 createGeomAction( GEOMOp::OpSewing, "SEWING" );
796 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
797 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
798 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
799 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
800 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
801 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
802 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
803 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
804 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
805 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
806 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
807 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
808 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
810 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
811 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
812 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
813 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
814 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
815 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
816 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
817 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
819 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
820 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
821 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
822 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
823 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
825 #ifdef _DEBUG_ // PAL16821
826 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
829 createGeomAction( GEOMOp::OpDisplayMode, "SHADING" );
830 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
831 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
832 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
833 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
834 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
835 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
836 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
837 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
838 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
839 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
840 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
841 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
842 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
843 createGeomAction( GEOMOp::OpHide, "ERASE" );
845 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
846 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
847 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
848 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
849 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
850 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
851 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
852 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
853 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
854 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
855 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
856 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
857 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
858 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
859 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
860 createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" );
861 createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" );
862 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
863 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
864 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
865 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
867 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
869 // Create actions for increase/decrease transparency shortcuts
870 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
871 "Geometry:Increase transparency");
872 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
873 "Geometry:Decrease transparency");
875 // Create actions for increase/decrease number of isolines
876 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
877 "Geometry:Increase number of isolines");
878 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
879 "Geometry:Decrease number of isolines");
881 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
882 //@@ 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 @@//
884 // ---- create menus --------------------------
886 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
887 createMenu( separator(), fileId, 10 );
888 createMenu( GEOMOp::OpImport, fileId, 10 );
889 createMenu( GEOMOp::OpExport, fileId, 10 );
890 createMenu( separator(), fileId, -1 );
892 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
893 createMenu( GEOMOp::OpDelete, editId, -1 );
895 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
897 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
898 createMenu( GEOMOp::OpPoint, basicId, -1 );
899 createMenu( GEOMOp::OpLine, basicId, -1 );
900 createMenu( GEOMOp::OpCircle, basicId, -1 );
901 createMenu( GEOMOp::OpEllipse, basicId, -1 );
902 createMenu( GEOMOp::OpArc, basicId, -1 );
903 createMenu( GEOMOp::OpCurve, basicId, -1 );
904 createMenu( separator(), basicId, -1 );
905 createMenu( GEOMOp::OpVector, basicId, -1 );
906 createMenu( GEOMOp::OpPlane, basicId, -1 );
907 createMenu( GEOMOp::OpLCS, basicId, -1 );
908 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
910 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
911 createMenu( GEOMOp::OpBox, primId, -1 );
912 createMenu( GEOMOp::OpCylinder, primId, -1 );
913 createMenu( GEOMOp::OpSphere, primId, -1 );
914 createMenu( GEOMOp::OpTorus, primId, -1 );
915 createMenu( GEOMOp::OpCone, primId, -1 );
916 createMenu( GEOMOp::OpRectangle, primId, -1 );
917 createMenu( GEOMOp::OpDisk, primId, -1 );
919 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
920 createMenu( GEOMOp::OpPrism, genId, -1 );
921 createMenu( GEOMOp::OpRevolution, genId, -1 );
922 createMenu( GEOMOp::OpFilling, genId, -1 );
923 createMenu( GEOMOp::OpPipe, genId, -1 );
925 int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
926 createMenu( GEOMOp::OpPipeTShape, advId, -1 );
927 // createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
928 //@@ 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 @@//
930 createMenu( separator(), newEntId, -1 );
932 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
933 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
934 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
936 createMenu( separator(), newEntId, -1 );
938 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
939 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
940 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
942 createMenu( separator(), newEntId, -1 );
944 createMenu( GEOMOp::Op2dSketcher, newEntId, -1 );
945 createMenu( GEOMOp::Op3dSketcher, newEntId, -1 );
947 createMenu( separator(), newEntId, -1 );
949 createMenu( GEOMOp::OpExplode, newEntId, -1 );
951 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
952 createMenu( GEOMOp::OpEdge, buildId, -1 );
953 createMenu( GEOMOp::OpWire, buildId, -1 );
954 createMenu( GEOMOp::OpFace, buildId, -1 );
955 createMenu( GEOMOp::OpShell, buildId, -1 );
956 createMenu( GEOMOp::OpSolid, buildId, -1 );
957 createMenu( GEOMOp::OpCompound, buildId, -1 );
959 createMenu( separator(), newEntId, -1 );
961 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
963 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
966 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
968 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
969 createMenu( GEOMOp::OpFuse, boolId, -1 );
970 createMenu( GEOMOp::OpCommon, boolId, -1 );
971 createMenu( GEOMOp::OpCut, boolId, -1 );
972 createMenu( GEOMOp::OpSection, boolId, -1 );
974 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
975 createMenu( GEOMOp::OpTranslate, transId, -1 );
976 createMenu( GEOMOp::OpRotate, transId, -1 );
977 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
978 createMenu( GEOMOp::OpMirror, transId, -1 );
979 createMenu( GEOMOp::OpScale, transId, -1 );
980 createMenu( GEOMOp::OpOffset, transId, -1 );
981 createMenu( GEOMOp::OpProjection, transId, -1 );
982 createMenu( separator(), transId, -1 );
983 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
984 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
986 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
987 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
988 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
989 createMenu( GEOMOp::OpPropagate, blockId, -1 );
991 createMenu( separator(), operId, -1 );
993 createMenu( GEOMOp::OpPartition, operId, -1 );
994 createMenu( GEOMOp::OpArchimede, operId, -1 );
995 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
996 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
998 createMenu( separator(), operId, -1 );
1000 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1001 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1002 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1003 createMenu( GEOMOp::OpChamfer, operId, -1 );
1004 //createMenu( GEOMOp::OpClipping, operId, -1 );
1006 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1007 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1008 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1009 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1010 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1011 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1012 createMenu( GEOMOp::OpSewing, repairId, -1 );
1013 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1014 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1015 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1016 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1017 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1018 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1019 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1020 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1022 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1023 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1024 createMenu( GEOMOp::OpProperties, measurId, -1 );
1025 createMenu( separator(), measurId, -1 );
1026 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1027 createMenu( GEOMOp::OpInertia, measurId, -1 );
1028 createMenu( GEOMOp::OpNormale, measurId, -1 );
1029 createMenu( separator(), measurId, -1 );
1030 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1031 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1032 createMenu( separator(), measurId, -1 );
1034 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1035 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1036 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1037 createMenu( GEOMOp::OpAngle, dimId, -1 );
1039 createMenu( separator(), measurId, -1 );
1040 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1041 createMenu( separator(), measurId, -1 );
1042 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1043 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1044 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1045 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1047 #ifdef _DEBUG_ // PAL16821
1048 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1049 createMenu( separator(), toolsId, -1 );
1050 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1053 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1054 createMenu( separator(), viewId, -1 );
1056 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1057 createMenu( GEOMOp::OpDisplayMode, dispmodeId, -1 );
1058 createMenu( separator(), dispmodeId, -1 );
1059 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1061 createMenu( separator(), viewId, -1 );
1062 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1063 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1064 createMenu( separator(), viewId, -1 );
1065 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1066 createMenu( separator(), viewId, -1 );
1070 because of these items are accessible through object browser and viewers
1071 we have removed they from main menu
1073 createMenu( GEOMOp::OpShow, viewId, -1 );
1074 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1075 createMenu( GEOMOp::OpHide, viewId, -1 );
1078 // ---- create toolbars --------------------------
1080 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1081 createTool( GEOMOp::OpPoint, basicTbId );
1082 createTool( GEOMOp::OpLine, basicTbId );
1083 createTool( GEOMOp::OpCircle, basicTbId );
1084 createTool( GEOMOp::OpEllipse, basicTbId );
1085 createTool( GEOMOp::OpArc, basicTbId );
1086 createTool( GEOMOp::OpCurve, basicTbId );
1087 createTool( GEOMOp::OpVector, basicTbId );
1088 createTool( GEOMOp::OpPlane, basicTbId );
1089 createTool( GEOMOp::OpLCS, basicTbId );
1090 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1092 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1093 createTool( GEOMOp::OpBox, primTbId );
1094 createTool( GEOMOp::OpCylinder, primTbId );
1095 createTool( GEOMOp::OpSphere, primTbId );
1096 createTool( GEOMOp::OpTorus, primTbId );
1097 createTool( GEOMOp::OpCone, primTbId );
1098 createTool( GEOMOp::OpRectangle, primTbId );
1099 createTool( GEOMOp::OpDisk, primTbId );
1101 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1102 createTool( GEOMOp::OpFuse, boolTbId );
1103 createTool( GEOMOp::OpCommon, boolTbId );
1104 createTool( GEOMOp::OpCut, boolTbId );
1105 createTool( GEOMOp::OpSection, boolTbId );
1107 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1108 createTool( GEOMOp::OpPrism, genTbId );
1109 createTool( GEOMOp::OpRevolution, genTbId );
1110 createTool( GEOMOp::OpFilling, genTbId );
1111 createTool( GEOMOp::OpPipe, genTbId );
1113 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1114 createTool( GEOMOp::OpTranslate, transTbId );
1115 createTool( GEOMOp::OpRotate, transTbId );
1116 createTool( GEOMOp::OpChangeLoc, transTbId );
1117 createTool( GEOMOp::OpMirror, transTbId );
1118 createTool( GEOMOp::OpScale, transTbId );
1119 createTool( GEOMOp::OpOffset, transTbId );
1120 createTool( GEOMOp::OpProjection, transTbId );
1121 createTool( separator(), transTbId );
1122 createTool( GEOMOp::OpMultiTranslate, transTbId );
1123 createTool( GEOMOp::OpMultiRotate, transTbId );
1125 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1126 createTool( GEOMOp::Op2dSketcher, operTbId );
1127 createTool( GEOMOp::Op3dSketcher, operTbId );
1128 createTool( separator(), operTbId );
1129 createTool( GEOMOp::OpExplode, operTbId );
1130 createTool( separator(), operTbId );
1132 createTool( GEOMOp::OpFeatureDetect, operTbId );
1134 createTool( GEOMOp::OpPictureImport, operTbId );
1135 createTool( separator(), operTbId );
1137 createTool( GEOMOp::OpPartition, operTbId );
1138 createTool( GEOMOp::OpArchimede, operTbId );
1139 createTool( GEOMOp::OpShapesOnShape, operTbId );
1140 createTool( GEOMOp::OpSharedShapes, operTbId );
1141 createTool( separator(), operTbId );
1142 createTool( GEOMOp::OpFillet1d, operTbId );
1143 createTool( GEOMOp::OpFillet2d, operTbId );
1144 createTool( GEOMOp::OpFillet3d, operTbId );
1145 createTool( GEOMOp::OpChamfer, operTbId );
1147 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1148 createTool( GEOMOp::OpEdge, buildTbId );
1149 createTool( GEOMOp::OpWire, buildTbId );
1150 createTool( GEOMOp::OpFace, buildTbId );
1151 createTool( GEOMOp::OpShell, buildTbId );
1152 createTool( GEOMOp::OpSolid, buildTbId );
1153 createTool( GEOMOp::OpCompound, buildTbId );
1155 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1156 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1157 createTool( GEOMOp::OpProperties, measureTbId );
1158 createTool( GEOMOp::OpCenterMass, measureTbId );
1159 createTool( GEOMOp::OpInertia, measureTbId );
1160 createTool( GEOMOp::OpNormale, measureTbId );
1161 createTool( separator(), measureTbId );
1162 createTool( GEOMOp::OpBoundingBox, measureTbId );
1163 createTool( GEOMOp::OpMinDistance, measureTbId );
1164 createTool( GEOMOp::OpAngle, measureTbId );
1165 createTool( GEOMOp::OpTolerance , measureTbId );
1166 createTool( separator(), measureTbId );
1167 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1168 createTool( GEOMOp::OpFreeFaces, measureTbId );
1169 createTool( separator(), measureTbId );
1170 createTool( GEOMOp::OpWhatIs, measureTbId );
1171 createTool( GEOMOp::OpCheckShape, measureTbId );
1172 createTool( GEOMOp::OpCheckCompound, measureTbId );
1173 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1175 int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1176 createTool( GEOMOp::OpPipeTShape, advancedTbId );
1177 //@@ 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 @@//
1179 // ---- create popup menus --------------------------
1181 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1182 QString clientOCC = "(client='OCCViewer')";
1183 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1184 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1186 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1187 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1188 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1189 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1191 QString autoColorPrefix =
1192 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1194 QtxPopupMgr* mgr = popupMgr();
1196 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1197 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1198 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1199 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1200 mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children
1201 mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1203 mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1204 mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1205 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1206 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1207 mgr->insert( separator(), -1, -1 ); // -----------
1208 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1209 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1210 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1211 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1212 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1213 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1214 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1215 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1216 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1217 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1218 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1219 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1220 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1221 mgr->insert( separator(), dispmodeId, -1 );
1222 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1223 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1224 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1225 mgr->insert( separator(), -1, -1 ); // -----------
1226 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1227 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1228 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1229 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1230 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1231 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1232 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1233 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1234 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1235 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1236 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1237 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1238 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1239 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1240 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1242 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1243 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1244 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1246 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1247 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1249 mgr->insert( separator(), -1, -1 ); // -----------
1250 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1251 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1252 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1253 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1254 mgr->insert( separator(), -1, -1 ); // -----------
1256 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1257 onlyComponent = "((type='Component') and selcount=1)",
1258 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1259 types = "'Shape' 'Group'";
1261 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1262 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1264 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1265 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1267 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1268 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1270 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1272 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1273 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1274 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1275 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1276 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1277 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1278 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1279 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1280 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1281 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1282 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1283 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1284 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1285 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1286 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1287 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1288 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1289 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1290 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1291 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1292 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1293 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1294 mgr->insert( separator(), selectonlyId, -1);
1295 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1296 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1297 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1298 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1299 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1300 mgr->insert( separator(), -1, -1 );
1302 mgr->insert( separator(), -1, -1 ); // -----------
1303 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1304 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1307 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1308 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1310 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1311 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1313 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1316 //=======================================================================
1317 // function : GeometryGUI::activateModule()
1318 // purpose : Called when GEOM module is activated
1319 //=======================================================================
1320 bool GeometryGUI::activateModule( SUIT_Study* study )
1322 if ( CORBA::is_nil( myComponentGeom ) )
1325 bool res = SalomeApp_Module::activateModule( study );
1329 setMenuShown( true );
1330 setToolShown( true );
1332 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1333 PyGILState_STATE gstate = PyGILState_Ensure();
1334 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1335 if(pluginsmanager==NULL)
1339 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());
1344 PyGILState_Release(gstate);
1345 // end of GEOM plugins loading
1347 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1348 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1350 // Reset actions accelerator keys
1351 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1352 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1353 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1355 GUIMap::Iterator it;
1356 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1357 it.value()->activate( application()->desktop() );
1359 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1361 SUIT_ViewManager* vm;
1362 ViewManagerList OCCViewManagers, VTKViewManagers;
1364 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1365 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1366 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1367 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1369 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1370 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1371 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1372 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1375 SALOME_ListIO selected;
1376 sm->selectedObjects( selected );
1377 sm->clearSelected();
1379 // disable OCC selectors
1380 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1381 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1382 while ( itOCCSel.hasNext() )
1383 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1384 sr->setEnabled(true);
1386 // disable VTK selectors
1387 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1388 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1389 while ( itVTKSel.hasNext() )
1390 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1391 sr->setEnabled(true);
1393 sm->setSelectedObjects( selected, true ); //NPAL 19674
1395 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1397 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1399 // 0020836 (Basic vectors and origin)
1400 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1401 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1402 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1404 _PTR(Study) studyDS = appStudy->studyDS();
1406 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1407 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1408 createOriginAndBaseVectors();
1417 //=======================================================================
1418 // function : GeometryGUI::deactivateModule()
1419 // purpose : Called when GEOM module is deactivated
1420 //=======================================================================
1421 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1423 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1425 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1427 setMenuShown( false );
1428 setToolShown( false );
1430 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1431 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1433 EmitSignalCloseAllDialogs();
1435 GUIMap::Iterator it;
1436 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1437 it.value()->deactivate();
1439 // Unset actions accelerator keys
1440 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1441 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1442 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1444 qDeleteAll(myOCCSelectors);
1445 myOCCSelectors.clear();
1446 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1448 qDeleteAll(myVTKSelectors);
1449 myVTKSelectors.clear();
1450 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1452 return SalomeApp_Module::deactivateModule( study );
1455 //=======================================================================
1456 // function : onWindowActivated()
1457 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1458 //=======================================================================
1459 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1464 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1465 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1467 // disable non-OCC viewframe menu commands
1468 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1469 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1470 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1471 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1472 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1473 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1474 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1476 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1477 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1479 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1482 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1484 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1485 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1488 void GeometryGUI::viewManagers( QStringList& lst ) const
1490 lst.append( OCCViewer_Viewer::Type() );
1493 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1495 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1497 qDebug( "connect" );
1498 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1499 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1500 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1501 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1502 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1503 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1504 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1505 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1507 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1508 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1510 // disable OCC selectors
1511 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1512 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1513 while ( itOCCSel.hasNext() )
1514 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1515 sr->setEnabled(true);
1517 else if ( vm->getType() == SVTK_Viewer::Type() )
1519 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1520 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1522 // disable VTK selectors
1523 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1524 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1525 while ( itVTKSel.hasNext() )
1526 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1527 sr->setEnabled(true);
1531 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1533 SUIT_ViewModel* viewer = vm->getViewModel();
1534 if ( vm->getType() == OCCViewer_Viewer::Type() )
1536 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1537 while ( itOCCSel.hasNext() )
1538 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1539 if ( sr->viewer() == viewer )
1541 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1545 if ( vm->getType() == SVTK_Viewer::Type() )
1547 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1548 while ( itVTKSel.hasNext() )
1549 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1550 if ( sr->viewer() == viewer )
1552 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1558 QString GeometryGUI::engineIOR() const
1560 if ( !CORBA::is_nil( GetGeomGen() ) )
1561 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1565 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1566 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1568 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1570 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1572 theWidth = theHeight = 0;
1574 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1575 Handle(TColStd_HArray1OfByte) aTexture;
1577 Handle(Graphic3d_HArray1OfBytes) aTexture;
1581 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1582 aTexture = aTextureMap[ theId ];
1583 if ( aTexture.IsNull() ) {
1584 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1585 if ( !aInsOp->_is_nil() ) {
1586 CORBA::Long aWidth, aHeight;
1587 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1588 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1590 theHeight = aHeight;
1592 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1593 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1595 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1598 for (int i = 0; i < aStream->length(); i++)
1599 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1600 aTextureMap[ theId ] = aTexture;
1608 LightApp_Selection* GeometryGUI::createSelection() const
1610 return new GEOMGUI_Selection();
1613 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1615 SalomeApp_Module::contextMenuPopup( client, menu, title );
1619 getApp()->selectionMgr()->selectedObjects(lst);
1620 if (lst.Extent() < 1)
1623 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1624 _PTR(Study) study = appStudy->studyDS();
1626 bool isImported = true;
1627 SALOME_ListIteratorOfListIO anIt (lst);
1628 for (; anIt.More() && isImported; anIt.Next()) {
1629 Handle(SALOME_InteractiveObject) io = anIt.Value();
1630 _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1632 if (lst.Extent() == 1) {
1633 // Set context menu title
1634 if (client == "OCCViewer" || client == "VTKViewer")
1635 title = QString(aSObj->GetName().c_str());
1638 CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1639 GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1640 if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1648 menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1653 void GeometryGUI::createPreferences()
1655 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1657 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1658 setPreferenceProperty( genGroup, "columns", 2 );
1660 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1661 LightApp_Preferences::Selector,
1662 "Geometry", "display_mode" );
1664 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1665 LightApp_Preferences::Color, "Geometry", "shading_color" );
1667 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1668 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1670 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1671 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1673 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1674 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1676 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1677 LightApp_Preferences::Color, "Geometry", "line_color" );
1679 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1680 LightApp_Preferences::Color, "Geometry", "point_color" );
1682 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1683 LightApp_Preferences::Color, "Geometry", "isos_color" );
1685 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1686 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1688 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1689 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1691 int front_material = addPreference( tr( "PREF_FRONT_MATERIAL" ), genGroup,
1692 LightApp_Preferences::Selector,
1693 "Geometry", "front_material" );
1695 int back_material = addPreference( tr( "PREF_BACK_MATERIAL" ), genGroup,
1696 LightApp_Preferences::Selector,
1697 "Geometry", "back_material" );
1703 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1704 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1706 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1707 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1709 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1710 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1712 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1713 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1715 for(int i = 0; i < nb; i++) {
1716 setPreferenceProperty( wd[i], "min", 1 );
1717 setPreferenceProperty( wd[i], "max", 5 );
1721 // Quantities with individual precision settings
1722 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1723 setPreferenceProperty( precGroup, "columns", 2 );
1725 const int nbQuantities = 8;
1726 int prec[nbQuantities], ii = 0;
1727 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1728 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1729 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1730 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1731 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1732 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1733 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1734 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1735 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1736 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1737 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1738 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1739 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1740 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1741 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1742 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1744 // Set property for precision value for spinboxes
1745 for ( ii = 0; ii < nbQuantities; ii++ ){
1746 setPreferenceProperty( prec[ii], "min", -14 );
1747 setPreferenceProperty( prec[ii], "max", 14 );
1748 setPreferenceProperty( prec[ii], "precision", 2 );
1751 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1752 setPreferenceProperty( VertexGroup, "columns", 2 );
1754 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1755 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1757 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1758 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1760 // Set property for default display mode
1761 QStringList aModesList;
1762 aModesList.append( tr("MEN_WIREFRAME") );
1763 aModesList.append( tr("MEN_SHADING") );
1764 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1766 QList<QVariant> anIndexesList;
1767 anIndexesList.append(0);
1768 anIndexesList.append(1);
1769 anIndexesList.append(2);
1771 setPreferenceProperty( dispmode, "strings", aModesList );
1772 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1774 // Set property for step value for spinboxes
1775 setPreferenceProperty( step, "min", 1 );
1776 setPreferenceProperty( step, "max", 10000 );
1777 setPreferenceProperty( step, "precision", 3 );
1779 // Set property for deflection value for spinboxes
1780 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1781 setPreferenceProperty( defl, "max", 1.0 );
1782 setPreferenceProperty( defl, "step", 1.0e-04 );
1783 setPreferenceProperty( defl, "precision", 6 );
1785 // Set property for default material
1786 Material_ResourceMgr aMatResMgr;
1787 QStringList aPrefMatNames = aMatResMgr.getPreferenceMaterialsNames();
1788 setPreferenceProperty( front_material, "strings", aPrefMatNames );
1789 setPreferenceProperty( back_material, "strings", aPrefMatNames );
1791 // Set property vertex marker type
1792 QList<QVariant> aMarkerTypeIndicesList;
1793 QList<QVariant> aMarkerTypeIconsList;
1795 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1796 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1797 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1798 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1799 aMarkerTypeIndicesList << (i-1);
1800 aMarkerTypeIconsList << pixmap;
1803 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1804 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1806 // Set property for vertex marker scale
1807 QList<QVariant> aMarkerScaleIndicesList;
1808 QStringList aMarkerScaleValuesList;
1810 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1811 aMarkerScaleIndicesList << iii;
1812 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1815 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1816 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1818 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1819 setPreferenceProperty( originGroup, "columns", 2 );
1821 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1822 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1823 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1824 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1826 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1827 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1830 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1831 setPreferenceProperty( operationsGroup, "columns", 2 );
1833 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1834 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1837 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1839 if (section == "Geometry") {
1840 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1841 if (param == QString("SettingsGeomStep")) {
1842 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1843 EmitSignalDefaultStepValueChanged(spin_step);
1848 LightApp_Displayer* GeometryGUI::displayer()
1851 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1855 void GeometryGUI::setLocalSelectionMode(const int mode)
1857 myLocalSelectionMode = mode;
1859 int GeometryGUI::getLocalSelectionMode() const
1861 return myLocalSelectionMode;
1864 const char gSeparator = '_'; // character used to separate parameter names
1865 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1868 * \brief Store visual parameters
1870 * This method is called just before the study document is saved.
1871 * Store visual parameters in AttributeParameter attribute(s)
1873 void GeometryGUI::storeVisualParameters (int savePoint)
1875 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1876 if ( !appStudy || !appStudy->studyDS() )
1878 _PTR(Study) studyDS = appStudy->studyDS();
1880 // componentName is used for encoding of entries when storing them in IParameters
1881 std::string componentName = myComponentGeom->ComponentDataType();
1882 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1883 //if (!aSComponent) return;
1886 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1887 componentName.c_str(),
1889 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1891 QList<SUIT_ViewManager*> lst;
1892 QList<SUIT_ViewManager*>::Iterator it;
1894 // main cycle to store parameters of displayed objects
1896 getApp()->viewManagers(lst);
1897 for (it = lst.begin(); it != lst.end(); it++) {
1898 SUIT_ViewManager* vman = *it;
1899 QString vType = vman->getType();
1900 int aMgrId = vman->getGlobalId();
1901 // saving VTK actors properties
1902 QVector<SUIT_ViewWindow*> views = vman->getViews();
1903 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1904 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1905 ObjMap::ConstIterator o_it = anObjects.begin();
1906 for (; o_it != anObjects.end(); o_it++) {
1907 const PropMap aProps = o_it.value();
1909 //Check that object exists in the study
1910 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1911 if ( !obj || !(aProps.count() > 0))
1913 // entry is "encoded" = it does NOT contain component adress, since it is a
1914 // subject to change on next component loading
1916 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1918 _PTR(GenericAttribute) anAttr;
1919 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1922 std::string param,occParam = vType.toLatin1().data();
1923 occParam += NAME_SEPARATOR;
1924 occParam += QString::number(aMgrId).toLatin1().data();
1925 occParam += NAME_SEPARATOR;
1927 if(aProps.contains(VISIBILITY_PROP)) {
1928 param = occParam + VISIBILITY_PROP;
1929 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
1932 if(aProps.contains(DISPLAY_MODE_PROP)) {
1933 param = occParam + DISPLAY_MODE_PROP;
1934 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
1937 if(aProps.contains(COLOR_PROP)) {
1938 QColor c = aProps.value(COLOR_PROP).value<QColor>();
1939 QString colorStr = QString::number(c.red()/255.);
1940 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
1941 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
1942 param = occParam + COLOR_PROP;
1943 ip->setParameter(entry, param, colorStr.toLatin1().data());
1946 if(vType == SVTK_Viewer::Type()) {
1947 if(aProps.contains(OPACITY_PROP)) {
1948 param = occParam + OPACITY_PROP;
1949 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1951 } else if (vType == SOCC_Viewer::Type()) {
1952 if(aProps.contains(TRANSPARENCY_PROP)) {
1953 param = occParam + TRANSPARENCY_PROP;
1954 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1958 if(aProps.contains(ISOS_PROP)) {
1959 param = occParam + ISOS_PROP;
1960 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
1963 if(aProps.contains(VECTOR_MODE_PROP)) {
1964 param = occParam + VECTOR_MODE_PROP;
1965 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
1968 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
1969 param = occParam + DEFLECTION_COEFF_PROP;
1970 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
1973 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
1974 if(aProps.contains(MARKER_TYPE_PROP)) {
1975 param = occParam + MARKER_TYPE_PROP;
1976 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
1979 if(aProps.contains(FRONT_MATERIAL_PROP)) {
1980 param = occParam + FRONT_MATERIAL_PROP;
1981 ip->setParameter(entry, param, aProps.value(FRONT_MATERIAL_PROP).toString().toLatin1().data());
1984 if(aProps.contains(BACK_MATERIAL_PROP)) {
1985 param = occParam + BACK_MATERIAL_PROP;
1986 ip->setParameter(entry, param, aProps.value(BACK_MATERIAL_PROP).toString().toLatin1().data());
1990 if(aProps.contains( EDGE_WIDTH_PROP )) {
1991 param = occParam + EDGE_WIDTH_PROP;
1992 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
1995 if(aProps.contains( ISOS_WIDTH_PROP )) {
1996 param = occParam + ISOS_WIDTH_PROP;
1997 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
1999 } // object iterator
2001 } // for (viewManagers)
2005 * \brief Restore visual parameters
2007 * This method is called after the study document is opened.
2008 * Restore visual parameters from AttributeParameter attribute(s)
2010 void GeometryGUI::restoreVisualParameters (int savePoint)
2012 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2013 if (!appStudy || !appStudy->studyDS())
2015 _PTR(Study) studyDS = appStudy->studyDS();
2017 // componentName is used for encoding of entries when storing them in IParameters
2018 std::string componentName = myComponentGeom->ComponentDataType();
2019 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2020 //if (!aSComponent) return;
2023 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2024 componentName.c_str(),
2026 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2028 std::vector<std::string> entries = ip->getEntries();
2030 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2032 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2033 QString entry (ip->decodeEntry(*entIt).c_str());
2035 // Check that the entry corresponds to a real object in the Study
2036 // as the object may be deleted or modified after the visual state is saved.
2037 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2038 if (!so) continue; //Skip the not existent entry
2040 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2041 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2043 std::vector<std::string>::iterator namesIt = paramNames.begin();
2044 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2046 // actors are stored in a map after displaying of them for
2047 // quicker access in the future: map < viewID to actor >
2048 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2049 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2051 QString viewerTypStr;
2052 QString viewIndexStr;
2054 QVector<PropMap> aListOfMap;
2056 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2058 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2059 // '_' is used as separator and should not be used in viewer type or parameter names.
2060 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2061 if (lst.size() != 3)
2064 viewerTypStr = lst[0];
2065 viewIndexStr = lst[1];
2066 QString paramNameStr = lst[2];
2069 viewIndex = viewIndexStr.toUInt(&ok);
2070 if (!ok) // bad conversion of view index to integer
2073 if((viewIndex + 1) > aListOfMap.count()) {
2074 aListOfMap.resize(viewIndex + 1);
2077 QString val((*valuesIt).c_str());
2078 if(paramNameStr == VISIBILITY_PROP){
2079 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2081 } else if(paramNameStr == OPACITY_PROP) {
2082 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2084 } else if(paramNameStr == TRANSPARENCY_PROP) {
2085 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, val.toDouble());
2087 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2088 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2090 } else if(paramNameStr == ISOS_PROP) {
2091 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2093 } else if(paramNameStr == COLOR_PROP) {
2094 QStringList rgb = val.split(DIGIT_SEPARATOR);
2095 if(rgb.count() == 3) {
2096 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2097 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2099 } else if(paramNameStr == VECTOR_MODE_PROP) {
2100 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2102 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2103 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2104 } else if(paramNameStr == MARKER_TYPE_PROP) {
2105 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2106 } else if(paramNameStr == FRONT_MATERIAL_PROP) {
2107 aListOfMap[viewIndex].insert( FRONT_MATERIAL_PROP, val);
2108 } else if(paramNameStr == BACK_MATERIAL_PROP) {
2109 aListOfMap[viewIndex].insert( BACK_MATERIAL_PROP, val);
2110 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2111 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2112 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2113 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2118 } // for names/parameters iterator
2120 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2122 for (int index = 0; index < aListOfMap.count(); index++) {
2124 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2126 //Get Visibility property of the current PropMap
2127 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2128 SUIT_ViewManager* vman = lst.at(index);
2129 SUIT_ViewModel* vmodel = vman->getViewModel();
2130 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2134 } // for entries iterator
2136 // update all VTK and OCC views
2137 QList<SUIT_ViewManager*> lst;
2138 getApp()->viewManagers(lst);
2139 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2140 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2143 if (vmodel->getType() == SVTK_Viewer::Type()) {
2144 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2145 vtkView->getRenderer()->ResetCameraClippingRange();
2148 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2149 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2150 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2157 void GeometryGUI::onViewAboutToShow()
2159 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2160 QAction* a = action( GEOMOp::OpSwitchVectors );
2162 a->setEnabled(true);
2163 bool vmode = window->property("VectorsMode").toBool();
2164 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2166 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2167 a->setEnabled(false);
2172 Rename object by entry.
2173 \param entry entry of the object
2174 \param name new name of the object
2175 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2177 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2179 bool appRes = SalomeApp_Module::renameObject(entry,name);
2183 bool result = false;
2185 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2186 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2191 _PTR(Study) aStudy = appStudy->studyDS();
2196 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2197 _PTR(GenericAttribute) anAttr;
2199 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2200 _PTR(AttributeName) aName (anAttr);
2202 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2203 if (!CORBA::is_nil(anObj)) {
2204 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2205 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object