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