1 // Copyright (C) 2007-2013 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>
41 #include <Material_Model.h>
43 #include <SUIT_Desktop.h>
44 #include <SUIT_MessageBox.h>
45 #include <SUIT_ResourceMgr.h>
46 #include <SUIT_Session.h>
47 #include <SUIT_ViewManager.h>
49 #include <OCCViewer_ViewWindow.h>
50 #include <OCCViewer_ViewPort3d.h>
51 #include <OCCViewer_ViewModel.h>
52 #include <OCCViewer_ViewManager.h>
54 #include <SOCC_ViewModel.h>
55 #include <SOCC_ViewWindow.h>
57 #include <SVTK_ViewWindow.h>
58 #include <SVTK_RenderWindowInteractor.h>
59 #include <SVTK_InteractorStyle.h>
60 #include <SVTK_ViewModel.h>
62 #include <SalomeApp_Application.h>
63 #include <SalomeApp_DataObject.h>
64 #include <SalomeApp_Study.h>
65 #include <SalomeApp_Tools.h>
67 #include <LightApp_SelectionMgr.h>
68 #include <LightApp_VTKSelector.h>
69 #include <LightApp_DataObject.h>
70 #include <LightApp_Preferences.h>
72 #include <SALOME_LifeCycleCORBA.hxx>
73 #include <SALOME_ListIO.hxx>
74 #include <SALOME_ListIteratorOfListIO.hxx>
76 #include <SALOMEDSClient_ClientFactory.hxx>
77 #include <SALOMEDSClient_IParameters.hxx>
79 #include <Basics_OCCTVersion.hxx>
88 #include <QSignalMapper>
90 #include <AIS_Drawer.hxx>
91 #include <AIS_ListOfInteractive.hxx>
92 #include <AIS_ListIteratorOfListOfInteractive.hxx>
93 #include <Prs3d_Drawer.hxx>
94 #include <Prs3d_IsoAspect.hxx>
95 #include <Aspect_TypeOfMarker.hxx>
96 #include <OSD_SharedLibrary.hxx>
97 #include <NCollection_DataMap.hxx>
99 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
100 #include <TColStd_HArray1OfByte.hxx>
102 #include <Graphic3d_HArray1OfBytes.hxx>
105 #include <utilities.h>
107 #include <vtkCamera.h>
108 #include <vtkRenderer.h>
110 #include <GEOM_version.h>
112 #include "GEOMImpl_Types.hxx"
115 Standard_EXPORT CAM_Module* createModule() {
116 return new GeometryGUI();
119 Standard_EXPORT char* getModuleVersion() {
120 return (char*)GEOM_VERSION_STR;
124 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
126 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
128 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
130 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
131 if (CORBA::is_nil(myComponentGeom))
133 return GeometryGUI::myComponentGeom;
136 bool GeometryGUI::InitGeomGen()
139 if ( CORBA::is_nil( myComponentGeom ) ) return false;
143 //=======================================================================
144 // function : ClientSObjectToObject
146 //=======================================================================
147 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
149 _PTR(GenericAttribute) anAttr;
150 CORBA::Object_var anObj;
152 std::string aValue = theSObject->GetIOR();
153 if (strcmp(aValue.c_str(), "") != 0) {
154 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
155 anObj = anORB->string_to_object(aValue.c_str());
158 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
160 return anObj._retn();
163 //=======================================================================
164 // function : ClientStudyToStudy
166 //=======================================================================
167 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
169 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
170 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
171 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
172 int aStudyID = theStudy->StudyId();
173 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
174 return aDSStudy._retn();
177 void GeometryGUI::Modified (bool theIsUpdateActions)
179 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
180 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
181 appStudy->Modified();
182 if ( theIsUpdateActions )
183 app->updateActions();
188 //=======================================================================
189 // function : GeometryGUI::GeometryGUI()
190 // purpose : Constructor
191 //=======================================================================
192 GeometryGUI::GeometryGUI() :
193 SalomeApp_Module( "GEOM" )
195 if ( CORBA::is_nil( myComponentGeom ) )
197 Engines::EngineComponent_var comp =
198 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
199 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
202 myActiveDialogBox = 0;
204 gp_Pnt origin = gp_Pnt(0., 0., 0.);
205 gp_Dir direction = gp_Dir(0., 0., 1.);
206 myWorkingPlane = gp_Ax3(origin, direction);
209 myLocalSelectionMode = GEOM_ALLOBJECTS;
211 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
214 //=======================================================================
215 // function : GeometryGUI::~GeometryGUI()
216 // purpose : Destructor
217 //=======================================================================
218 GeometryGUI::~GeometryGUI()
220 while (!myOCCSelectors.isEmpty())
221 delete myOCCSelectors.takeFirst();
223 while (!myVTKSelectors.isEmpty())
224 delete myVTKSelectors.takeFirst();
226 qDeleteAll(myGUIMap);
229 //=======================================================================
230 // function : GeometryGUI::getLibrary()
231 // purpose : get or load GUI library by name [ internal ]
232 //=======================================================================
233 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
234 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
236 if ( !myGUIMap.contains( libraryName ) ) {
237 // try to load library if it is not loaded yet
239 QString dirs = getenv( "LD_LIBRARY_PATH" );
242 QString dirs = getenv( "PATH" );
245 if ( !dirs.isEmpty() ) {
246 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
247 QListIterator<QString> it( dirList ); it.toBack();
248 while ( it.hasPrevious() ) {
249 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
251 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
252 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
254 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
255 continue; // continue search further
257 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
258 if ( osdF != NULL ) {
259 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
260 GEOMGUI* libGUI = (*func)( this );
262 myGUIMap[ libraryName ] = libGUI;
263 break; // found and loaded!
270 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
273 //=======================================================================
274 // function : GeometryGUI::ActiveWorkingPlane()
275 // purpose : Activate Working Plane View
276 //=======================================================================
277 void GeometryGUI::ActiveWorkingPlane()
279 gp_Dir DZ = myWorkingPlane.Direction();
280 gp_Dir DY = myWorkingPlane.YDirection();
282 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
283 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
284 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
287 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
289 Handle(V3d_View) view3d = vw->getViewPort()->getView();
291 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
292 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
296 else if ( ViewVTK ) {
297 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
299 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
301 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
302 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
303 camera->SetFocalPoint(0,0,0);
310 //=======================================================================
311 // function : GeometryGUI::SetActiveDialogBox()
312 // purpose : Set active dialog box
313 //=======================================================================
314 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
316 myActiveDialogBox = (QDialog*)aDlg;
319 //=======================================================================
320 // function : GeometryGUI::EmitSignalDeactivateDialog()
321 // purpose : Emit a signal to deactivate the active dialog Box
322 //=======================================================================
323 void GeometryGUI::EmitSignalDeactivateDialog()
325 emit SignalDeactivateActiveDialog();
328 //=======================================================================
329 // function : GeometryGUI::EmitSignalCloseAllDialogs()
330 // purpose : Emit a signal to close all non modal dialogs box
331 //=======================================================================
332 void GeometryGUI::EmitSignalCloseAllDialogs()
334 emit SignalCloseAllDialogs();
337 //=======================================================================
338 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
339 // purpose : Emit a signal to inform that default real spin box step has
341 //=======================================================================
342 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
344 emit SignalDefaultStepValueChanged(newVal);
347 //=======================================================================
348 // function : GeometryGUI::OnGUIEvent()
349 // purpose : common slot for all menu/toolbar actions
350 //=======================================================================
351 void GeometryGUI::OnGUIEvent()
353 const QObject* obj = sender();
354 if ( !obj || !obj->inherits( "QAction" ) )
356 int id = actionId((QAction*)obj);
361 //=======================================================================
362 // function : GeometryGUI::OnGUIEvent()
363 // purpose : manage all events on GUI [static]
364 //=======================================================================
365 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
367 SUIT_Application* anApp = application();
369 SUIT_Desktop* desk = anApp->desktop();
371 // check type of the active viewframe
372 SUIT_ViewWindow* window = desk->activeWindow();
373 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
374 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
375 // if current viewframe is not of OCC and not of VTK type - return immediately
376 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
377 QList<int> NotViewerDependentCommands;
378 NotViewerDependentCommands << GEOMOp::OpDelete
380 << GEOMOp::OpShowOnly
381 << GEOMOp::OpShowOnlyChildren
382 << GEOMOp::OpDiscloseChildren
383 << GEOMOp::OpConcealChildren
384 << GEOMOp::OpUnpublishObject
385 << GEOMOp::OpPublishObject
386 << GEOMOp::OpPointMarker;
387 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
390 // fix for IPAL9103, point 2
391 if ( CORBA::is_nil( GetGeomGen() ) ) {
392 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
397 // find corresponding GUI library
399 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
400 createOriginAndBaseVectors(); // internal operation
402 case GEOMOp::OpImport: // MENU FILE - IMPORT
403 case GEOMOp::OpExport: // MENU FILE - EXPORT
404 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
405 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
406 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
407 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
408 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
409 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
410 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
411 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
412 case GEOMOp::OpDelete: // MENU EDIT - DELETE
413 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
414 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
415 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
416 case GEOMOp::OpColor: // POPUP MENU - COLOR
417 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
418 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
419 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
420 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
421 case GEOMOp::OpIsos: // POPUP MENU - ISOS
422 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
423 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
424 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
425 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
426 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
427 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
428 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
429 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
430 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
431 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
432 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
433 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
434 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
435 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
436 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
437 case GEOMOp::OpClsBringToFront: //
438 libName = "GEOMToolsGUI";
440 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
441 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
442 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
443 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
444 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
445 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
446 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
447 case GEOMOp::OpHide: // MENU VIEW - ERASE
448 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
449 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
450 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
451 case GEOMOp::OpShading: // POPUP MENU - SHADING
452 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
453 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
454 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
455 libName = "DisplayGUI";
457 case GEOMOp::OpPoint: // MENU BASIC - POINT
458 case GEOMOp::OpLine: // MENU BASIC - LINE
459 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
460 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
461 case GEOMOp::OpArc: // MENU BASIC - ARC
462 case GEOMOp::OpVector: // MENU BASIC - VECTOR
463 case GEOMOp::OpPlane: // MENU BASIC - PLANE
464 case GEOMOp::OpCurve: // MENU BASIC - CURVE
465 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
466 libName = "BasicGUI";
468 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
469 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
470 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
471 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
472 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
473 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
474 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
475 libName = "PrimitiveGUI";
477 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
478 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
479 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
480 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
481 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
482 libName = "GenerationGUI";
484 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
485 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
486 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
488 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
490 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
491 libName = "EntityGUI";
493 case GEOMOp::OpEdge: // MENU BUILD - EDGE
494 case GEOMOp::OpWire: // MENU BUILD - WIRE
495 case GEOMOp::OpFace: // MENU BUILD - FACE
496 case GEOMOp::OpShell: // MENU BUILD - SHELL
497 case GEOMOp::OpSolid: // MENU BUILD - SOLID
498 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
499 libName = "BuildGUI";
501 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
502 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
503 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
504 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
505 libName = "BooleanGUI";
507 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
508 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
509 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
510 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
511 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
512 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
513 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
514 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
515 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
516 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
517 libName = "TransformationGUI";
519 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
520 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
521 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
522 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
523 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
524 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
525 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
526 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
527 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
528 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
529 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
530 libName = "OperationGUI";
532 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
533 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
534 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
535 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
536 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
537 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
538 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
539 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
540 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
541 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
542 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
543 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
544 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
545 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
546 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
547 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
548 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
549 libName = "RepairGUI";
551 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
552 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
553 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
554 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
555 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
556 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
557 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
558 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
559 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
560 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
561 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
562 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
563 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
564 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
565 libName = "MeasureGUI";
567 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
568 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
569 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
570 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
571 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
572 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
573 libName = "GroupGUI";
575 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
576 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
577 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
578 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
579 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
580 libName = "BlocksGUI";
582 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
583 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
584 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
585 case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
586 case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
587 case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
588 //@@ 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 @@//
589 libName = "AdvancedGUI";
595 GEOMGUI* library = 0;
596 if ( !libName.isEmpty() ) {
598 libName = QString( "lib" ) + libName + ".so";
600 libName = libName + ".dll";
602 library = getLibrary( libName );
605 // call method of corresponding GUI library
607 if( !theParam.isValid() )
608 library->OnGUIEvent( id, desk );
610 library->OnGUIEvent( id, desk, theParam);
613 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
616 //=================================================================================
617 // function : GeometryGUI::OnKeyPress()
618 // purpose : Called when any key is pressed by user [static]
619 //=================================================================================
620 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
622 if ( !application() )
624 foreach ( GEOMGUI* lib, myGUIMap )
625 lib->OnKeyPress( e, application()->desktop(), w );
628 //=================================================================================
629 // function : GeometryGUI::OnMouseMove()
630 // purpose : Manages mouse move events [static]
631 //=================================================================================
632 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
634 if ( !application() )
636 foreach ( GEOMGUI* lib, myGUIMap )
637 lib->OnMouseMove( e, application()->desktop(), w );
640 //=================================================================================
641 // function : GeometryGUI::OnMouseRelease()
642 // purpose : Manages mouse release events [static]
643 //=================================================================================
644 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
646 if ( !application() )
648 foreach ( GEOMGUI* lib, myGUIMap )
649 lib->OnMouseRelease( e, application()->desktop(), w );
652 //=================================================================================
653 // function : GeometryGUI::OnMousePress()
654 // purpose : Manage mouse press events [static]
655 //=================================================================================
656 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
658 if ( !application() )
660 foreach ( GEOMGUI* lib, myGUIMap )
661 lib->OnMousePress( e, application()->desktop(), w );
664 //=======================================================================
665 // function : createGeomAction
667 //=======================================================================
668 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
669 const int accel, const bool toggle, const QString& shortcutAction )
671 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
672 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
673 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
675 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
677 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
678 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
680 application()->desktop(),
682 this, SLOT( OnGUIEvent() ),
686 //=======================================================================
687 // function : createOriginAndBaseVectors
689 //=======================================================================
690 void GeometryGUI::createOriginAndBaseVectors()
692 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
694 _PTR(Study) studyDS = appStudy->studyDS();
695 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
696 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
697 if ( !aBasicOperations->_is_nil() ) {
698 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
699 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
700 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
701 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
702 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
703 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
705 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
706 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
707 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
708 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
709 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
711 getApp()->updateObjectBrowser( true );
717 //=======================================================================
718 // function : GeometryGUI::initialize()
719 // purpose : Called when GEOM module is created
720 //=======================================================================
721 void GeometryGUI::initialize( CAM_Application* app )
723 SalomeApp_Module::initialize( app );
725 // ----- create actions --------------
727 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
728 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
730 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
732 createGeomAction( GEOMOp::OpPoint, "POINT" );
733 createGeomAction( GEOMOp::OpLine, "LINE" );
734 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
735 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
736 createGeomAction( GEOMOp::OpArc, "ARC" );
737 createGeomAction( GEOMOp::OpCurve, "CURVE" );
738 createGeomAction( GEOMOp::OpVector, "VECTOR" );
739 createGeomAction( GEOMOp::OpPlane, "PLANE" );
740 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
741 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
743 createGeomAction( GEOMOp::OpBox, "BOX" );
744 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
745 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
746 createGeomAction( GEOMOp::OpTorus, "TORUS" );
747 createGeomAction( GEOMOp::OpCone, "CONE" );
748 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
749 createGeomAction( GEOMOp::OpDisk, "DISK" );
751 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
752 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
753 createGeomAction( GEOMOp::OpFilling, "FILLING" );
754 createGeomAction( GEOMOp::OpPipe, "PIPE" );
755 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
757 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
758 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
759 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
760 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
761 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
763 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
765 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
766 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
768 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
769 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
770 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
772 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
774 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
776 createGeomAction( GEOMOp::OpEdge, "EDGE" );
777 createGeomAction( GEOMOp::OpWire, "WIRE" );
778 createGeomAction( GEOMOp::OpFace, "FACE" );
779 createGeomAction( GEOMOp::OpShell, "SHELL" );
780 createGeomAction( GEOMOp::OpSolid, "SOLID" );
781 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
783 createGeomAction( GEOMOp::OpFuse, "FUSE" );
784 createGeomAction( GEOMOp::OpCommon, "COMMON" );
785 createGeomAction( GEOMOp::OpCut, "CUT" );
786 createGeomAction( GEOMOp::OpSection, "SECTION" );
788 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
789 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
790 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
791 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
792 createGeomAction( GEOMOp::OpScale, "SCALE" );
793 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
794 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
795 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
796 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
798 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
799 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
800 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
801 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
802 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
803 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
804 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
805 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
806 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
807 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
808 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
810 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
811 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
812 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
814 createGeomAction( GEOMOp::OpSewing, "SEWING" );
815 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
816 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
817 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
818 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
819 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
820 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
821 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
822 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
823 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
824 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
825 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
826 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
827 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
828 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
829 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
830 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
832 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
833 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
834 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
835 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
836 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
837 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
838 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
839 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
841 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
842 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
843 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
844 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
845 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
846 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
848 #ifdef _DEBUG_ // PAL16821
849 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
852 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
853 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
854 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
855 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
856 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
857 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
858 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
859 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
860 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
861 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
862 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
863 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
864 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
865 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
866 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
867 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
868 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
869 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
870 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
871 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
872 createGeomAction( GEOMOp::OpHide, "ERASE" );
874 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
875 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
876 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
877 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
878 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
879 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
880 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
881 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
882 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
883 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
884 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
885 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
886 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
887 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
888 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
889 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
890 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
891 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
892 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
893 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
894 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
895 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
897 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
899 // Create actions for increase/decrease transparency shortcuts
900 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
901 "Geometry:Increase transparency");
902 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
903 "Geometry:Decrease transparency");
905 // Create actions for increase/decrease number of isolines
906 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
907 "Geometry:Increase number of isolines");
908 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
909 "Geometry:Decrease number of isolines");
911 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
912 createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
913 createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
914 createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
915 //@@ 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 @@//
917 // ---- create menus --------------------------
919 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
920 createMenu( separator(), fileId, 10 );
921 createMenu( GEOMOp::OpImport, fileId, 10 );
922 createMenu( GEOMOp::OpExport, fileId, 10 );
923 createMenu( separator(), fileId, -1 );
925 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
926 createMenu( GEOMOp::OpDelete, editId, -1 );
928 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
930 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
931 createMenu( GEOMOp::OpPoint, basicId, -1 );
932 createMenu( GEOMOp::OpLine, basicId, -1 );
933 createMenu( GEOMOp::OpCircle, basicId, -1 );
934 createMenu( GEOMOp::OpEllipse, basicId, -1 );
935 createMenu( GEOMOp::OpArc, basicId, -1 );
936 createMenu( GEOMOp::OpCurve, basicId, -1 );
937 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
938 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
939 createMenu( separator(), basicId, -1 );
940 createMenu( GEOMOp::OpVector, basicId, -1 );
941 createMenu( GEOMOp::OpPlane, basicId, -1 );
942 createMenu( GEOMOp::OpLCS, basicId, -1 );
943 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
945 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
946 createMenu( GEOMOp::OpBox, primId, -1 );
947 createMenu( GEOMOp::OpCylinder, primId, -1 );
948 createMenu( GEOMOp::OpSphere, primId, -1 );
949 createMenu( GEOMOp::OpTorus, primId, -1 );
950 createMenu( GEOMOp::OpCone, primId, -1 );
951 createMenu( GEOMOp::OpRectangle, primId, -1 );
952 createMenu( GEOMOp::OpDisk, primId, -1 );
953 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
955 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
956 createMenu( GEOMOp::OpPrism, genId, -1 );
957 createMenu( GEOMOp::OpRevolution, genId, -1 );
958 createMenu( GEOMOp::OpFilling, genId, -1 );
959 createMenu( GEOMOp::OpPipe, genId, -1 );
960 #if OCC_VERSION_LARGE > 0x06050300
961 createMenu( GEOMOp::OpPipePath, genId, -1 );
964 int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
965 createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
966 //@@ 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 @@//
968 createMenu( separator(), newEntId, -1 );
970 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
971 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
972 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
973 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
974 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
975 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
977 createMenu( separator(), newEntId, -1 );
979 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
980 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
981 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
982 createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
983 createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
985 createMenu( separator(), newEntId, -1 );
987 createMenu( GEOMOp::OpExplode, newEntId, -1 );
989 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
990 createMenu( GEOMOp::OpEdge, buildId, -1 );
991 createMenu( GEOMOp::OpWire, buildId, -1 );
992 createMenu( GEOMOp::OpFace, buildId, -1 );
993 createMenu( GEOMOp::OpShell, buildId, -1 );
994 createMenu( GEOMOp::OpSolid, buildId, -1 );
995 createMenu( GEOMOp::OpCompound, buildId, -1 );
997 createMenu( separator(), newEntId, -1 );
999 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1001 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1004 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1006 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1007 createMenu( GEOMOp::OpFuse, boolId, -1 );
1008 createMenu( GEOMOp::OpCommon, boolId, -1 );
1009 createMenu( GEOMOp::OpCut, boolId, -1 );
1010 createMenu( GEOMOp::OpSection, boolId, -1 );
1012 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1013 createMenu( GEOMOp::OpTranslate, transId, -1 );
1014 createMenu( GEOMOp::OpRotate, transId, -1 );
1015 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1016 createMenu( GEOMOp::OpMirror, transId, -1 );
1017 createMenu( GEOMOp::OpScale, transId, -1 );
1018 createMenu( GEOMOp::OpOffset, transId, -1 );
1019 createMenu( GEOMOp::OpProjection, transId, -1 );
1020 createMenu( separator(), transId, -1 );
1021 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1022 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1024 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1025 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1026 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1027 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1029 createMenu( separator(), operId, -1 );
1031 createMenu( GEOMOp::OpPartition, operId, -1 );
1032 createMenu( GEOMOp::OpArchimede, operId, -1 );
1033 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1034 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1036 createMenu( separator(), operId, -1 );
1038 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1039 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1040 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1041 createMenu( GEOMOp::OpChamfer, operId, -1 );
1042 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1043 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1044 //createMenu( GEOMOp::OpClipping, operId, -1 );
1046 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1047 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1048 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1049 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1050 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1051 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1052 createMenu( GEOMOp::OpSewing, repairId, -1 );
1053 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1054 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1055 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1056 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1057 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1058 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1059 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1060 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1061 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1062 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1063 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1065 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1066 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1067 createMenu( GEOMOp::OpProperties, measurId, -1 );
1068 createMenu( separator(), measurId, -1 );
1069 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1070 createMenu( GEOMOp::OpInertia, measurId, -1 );
1071 createMenu( GEOMOp::OpNormale, measurId, -1 );
1072 createMenu( separator(), measurId, -1 );
1073 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1074 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1075 createMenu( separator(), measurId, -1 );
1077 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1078 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1079 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1080 createMenu( GEOMOp::OpAngle, dimId, -1 );
1082 createMenu( separator(), measurId, -1 );
1083 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1084 createMenu( separator(), measurId, -1 );
1085 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1086 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1087 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1088 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1089 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1091 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1092 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1093 createMenu( separator(), toolsId, -1 );
1094 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1097 createMenu( separator(), toolsId, -1 );
1098 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1099 createMenu( separator(), toolsId, -1 );
1101 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1102 createMenu( separator(), viewId, -1 );
1104 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1105 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1106 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1107 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1108 createMenu( separator(), dispmodeId, -1 );
1109 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1111 createMenu( separator(), viewId, -1 );
1112 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1113 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1114 createMenu( separator(), viewId, -1 );
1115 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1116 createMenu( separator(), viewId, -1 );
1120 because of these items are accessible through object browser and viewers
1121 we have removed they from main menu
1123 createMenu( GEOMOp::OpShow, viewId, -1 );
1124 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1125 createMenu( GEOMOp::OpHide, viewId, -1 );
1128 // ---- create toolbars --------------------------
1130 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1131 createTool( GEOMOp::OpPoint, basicTbId );
1132 createTool( GEOMOp::OpLine, basicTbId );
1133 createTool( GEOMOp::OpCircle, basicTbId );
1134 createTool( GEOMOp::OpEllipse, basicTbId );
1135 createTool( GEOMOp::OpArc, basicTbId );
1136 createTool( GEOMOp::OpCurve, basicTbId );
1137 createTool( GEOMOp::OpVector, basicTbId );
1138 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1139 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1140 createTool( GEOMOp::OpPlane, basicTbId );
1141 createTool( GEOMOp::OpLCS, basicTbId );
1142 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1144 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1145 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1146 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1148 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1149 createTool( GEOMOp::OpBox, primTbId );
1150 createTool( GEOMOp::OpCylinder, primTbId );
1151 createTool( GEOMOp::OpSphere, primTbId );
1152 createTool( GEOMOp::OpTorus, primTbId );
1153 createTool( GEOMOp::OpCone, primTbId );
1154 createTool( GEOMOp::OpRectangle, primTbId );
1155 createTool( GEOMOp::OpDisk, primTbId );
1156 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1158 int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1159 createTool( GEOMOp::OpDividedDisk, blocksTbId );
1160 createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1162 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1163 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1165 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1166 createTool( GEOMOp::OpFuse, boolTbId );
1167 createTool( GEOMOp::OpCommon, boolTbId );
1168 createTool( GEOMOp::OpCut, boolTbId );
1169 createTool( GEOMOp::OpSection, boolTbId );
1171 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1172 createTool( GEOMOp::OpPrism, genTbId );
1173 createTool( GEOMOp::OpRevolution, genTbId );
1174 createTool( GEOMOp::OpFilling, genTbId );
1175 createTool( GEOMOp::OpPipe, genTbId );
1176 #if OCC_VERSION_LARGE > 0x06050300
1177 createTool( GEOMOp::OpPipePath, genTbId );
1180 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1181 createTool( GEOMOp::OpTranslate, transTbId );
1182 createTool( GEOMOp::OpRotate, transTbId );
1183 createTool( GEOMOp::OpChangeLoc, transTbId );
1184 createTool( GEOMOp::OpMirror, transTbId );
1185 createTool( GEOMOp::OpScale, transTbId );
1186 createTool( GEOMOp::OpOffset, transTbId );
1187 createTool( GEOMOp::OpProjection, transTbId );
1188 createTool( separator(), transTbId );
1189 createTool( GEOMOp::OpMultiTranslate, transTbId );
1190 createTool( GEOMOp::OpMultiRotate, transTbId );
1192 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1193 createTool( GEOMOp::OpExplode, operTbId );
1194 createTool( GEOMOp::OpPartition, operTbId );
1195 createTool( GEOMOp::OpArchimede, operTbId );
1196 createTool( GEOMOp::OpShapesOnShape, operTbId );
1197 createTool( GEOMOp::OpSharedShapes, operTbId );
1199 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1200 createTool( GEOMOp::OpFillet1d, featTbId );
1201 createTool( GEOMOp::OpFillet2d, featTbId );
1202 createTool( GEOMOp::OpFillet3d, featTbId );
1203 createTool( GEOMOp::OpChamfer, featTbId );
1204 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1205 createTool( GEOMOp::OpExtrudedCut, featTbId );
1207 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1208 createTool( GEOMOp::OpEdge, buildTbId );
1209 createTool( GEOMOp::OpWire, buildTbId );
1210 createTool( GEOMOp::OpFace, buildTbId );
1211 createTool( GEOMOp::OpShell, buildTbId );
1212 createTool( GEOMOp::OpSolid, buildTbId );
1213 createTool( GEOMOp::OpCompound, buildTbId );
1215 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1216 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1217 createTool( GEOMOp::OpProperties, measureTbId );
1218 createTool( GEOMOp::OpCenterMass, measureTbId );
1219 createTool( GEOMOp::OpInertia, measureTbId );
1220 createTool( GEOMOp::OpNormale, measureTbId );
1221 createTool( separator(), measureTbId );
1222 createTool( GEOMOp::OpBoundingBox, measureTbId );
1223 createTool( GEOMOp::OpMinDistance, measureTbId );
1224 createTool( GEOMOp::OpAngle, measureTbId );
1225 createTool( GEOMOp::OpTolerance , measureTbId );
1226 createTool( separator(), measureTbId );
1227 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1228 createTool( GEOMOp::OpFreeFaces, measureTbId );
1229 createTool( separator(), measureTbId );
1230 createTool( GEOMOp::OpWhatIs, measureTbId );
1231 createTool( GEOMOp::OpCheckShape, measureTbId );
1232 createTool( GEOMOp::OpCheckCompound, measureTbId );
1233 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1234 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1236 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1237 createTool( GEOMOp::OpPictureImport, picturesTbId );
1239 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1242 int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1243 createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1244 //@@ 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 @@//
1246 // ---- create popup menus --------------------------
1248 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1249 QString clientOCC = "(client='OCCViewer')";
1250 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1251 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1253 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1254 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1255 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1256 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1258 QString autoColorPrefix =
1259 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1261 QtxPopupMgr* mgr = popupMgr();
1263 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1264 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1265 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1266 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1267 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1268 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1270 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal shild items
1271 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1272 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1273 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1274 mgr->insert( separator(), -1, -1 ); // -----------
1276 #if OCC_VERSION_LARGE > 0x06050200
1277 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1278 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1279 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1280 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1281 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1282 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1283 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
1285 mgr->insert( separator(), -1, -1 ); // -----------
1286 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1287 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1288 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1289 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1290 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1291 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1292 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1293 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1294 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1295 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1296 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1297 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1298 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1299 mgr->insert( separator(), dispmodeId, -1 );
1300 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1301 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1302 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1303 mgr->insert( separator(), -1, -1 ); // -----------
1305 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1306 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1307 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1308 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1309 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1310 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1311 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1312 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1313 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1314 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1315 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1317 // material properties
1318 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1319 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1322 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1323 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1325 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1326 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1327 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1329 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1330 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1332 mgr->insert( separator(), -1, -1 ); // -----------
1333 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1334 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1335 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1336 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1337 mgr->insert( separator(), -1, -1 ); // -----------
1339 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1340 onlyComponent = "((type='Component') and selcount=1)",
1341 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1342 types = "'Shape' 'Group'";
1344 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1345 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1347 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1348 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1350 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1351 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1353 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1355 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1356 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1357 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1358 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1359 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1360 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1361 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1362 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1363 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1364 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1365 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1366 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1367 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1368 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1369 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1370 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1371 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1372 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1373 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1374 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1375 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1376 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1377 mgr->insert( separator(), selectonlyId, -1);
1378 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1379 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1380 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1381 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1382 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1383 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1384 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1386 mgr->insert( separator(), -1, -1 ); // -----------
1387 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1388 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1390 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1391 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1393 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1394 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1396 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1398 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1400 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1401 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1402 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1406 //=======================================================================
1407 // function : GeometryGUI::activateModule()
1408 // purpose : Called when GEOM module is activated
1409 //=======================================================================
1410 bool GeometryGUI::activateModule( SUIT_Study* study )
1412 if ( CORBA::is_nil( myComponentGeom ) )
1415 bool res = SalomeApp_Module::activateModule( study );
1419 setMenuShown( true );
1420 setToolShown( true );
1422 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1423 PyGILState_STATE gstate = PyGILState_Ensure();
1424 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1425 if (pluginsmanager == NULL)
1429 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1430 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1431 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1436 PyGILState_Release(gstate);
1437 // end of GEOM plugins loading
1439 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1440 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1442 // Reset actions accelerator keys
1443 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1444 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1445 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1447 GUIMap::Iterator it;
1448 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1449 it.value()->activate( application()->desktop() );
1451 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1453 SUIT_ViewManager* vm;
1454 ViewManagerList OCCViewManagers, VTKViewManagers;
1456 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1457 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1458 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1459 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1461 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1462 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1463 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1464 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1467 SALOME_ListIO selected;
1468 sm->selectedObjects( selected );
1469 sm->clearSelected();
1471 // disable OCC selectors
1472 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1473 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1474 while ( itOCCSel.hasNext() )
1475 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1476 sr->setEnabled(true);
1478 // disable VTK selectors
1479 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1480 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1481 while ( itVTKSel.hasNext() )
1482 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1483 sr->setEnabled(true);
1485 sm->setSelectedObjects( selected, true ); //NPAL 19674
1487 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1489 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1491 // 0020836 (Basic vectors and origin)
1492 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1493 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1494 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1496 _PTR(Study) studyDS = appStudy->studyDS();
1498 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1499 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1500 createOriginAndBaseVectors();
1508 //=======================================================================
1509 // function : GeometryGUI::deactivateModule()
1510 // purpose : Called when GEOM module is deactivated
1511 //=======================================================================
1512 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1514 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1516 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1518 setMenuShown( false );
1519 setToolShown( false );
1521 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1522 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1524 EmitSignalCloseAllDialogs();
1526 GUIMap::Iterator it;
1527 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1528 it.value()->deactivate();
1530 // Unset actions accelerator keys
1531 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1532 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1533 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1535 qDeleteAll(myOCCSelectors);
1536 myOCCSelectors.clear();
1537 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1539 qDeleteAll(myVTKSelectors);
1540 myVTKSelectors.clear();
1541 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1543 return SalomeApp_Module::deactivateModule( study );
1546 //=======================================================================
1547 // function : onWindowActivated()
1548 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1549 //=======================================================================
1550 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1555 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1556 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1558 // disable non-OCC viewframe menu commands
1559 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1560 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1561 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1562 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1563 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1564 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1565 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1567 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1568 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1570 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1573 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1575 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1576 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1579 void GeometryGUI::viewManagers( QStringList& lst ) const
1581 lst.append( OCCViewer_Viewer::Type() );
1584 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1586 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1588 qDebug( "connect" );
1589 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1590 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1591 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1592 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1593 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1594 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1595 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1596 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1598 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1599 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1601 // disable OCC selectors
1602 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1603 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1604 while ( itOCCSel.hasNext() )
1605 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1606 sr->setEnabled(true);
1608 else if ( vm->getType() == SVTK_Viewer::Type() )
1610 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1611 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1613 // disable VTK selectors
1614 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1615 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1616 while ( itVTKSel.hasNext() )
1617 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1618 sr->setEnabled(true);
1622 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1624 SUIT_ViewModel* viewer = vm->getViewModel();
1625 if ( vm->getType() == OCCViewer_Viewer::Type() )
1627 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1628 while ( itOCCSel.hasNext() )
1629 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1630 if ( sr->viewer() == viewer )
1632 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1636 if ( vm->getType() == SVTK_Viewer::Type() )
1638 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1639 while ( itVTKSel.hasNext() )
1640 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1641 if ( sr->viewer() == viewer )
1643 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1649 QString GeometryGUI::engineIOR() const
1651 if ( !CORBA::is_nil( GetGeomGen() ) )
1652 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1656 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1657 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1659 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1661 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1663 theWidth = theHeight = 0;
1665 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1666 Handle(TColStd_HArray1OfByte) aTexture;
1668 Handle(Graphic3d_HArray1OfBytes) aTexture;
1672 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1673 aTexture = aTextureMap[ theId ];
1674 if ( aTexture.IsNull() ) {
1675 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1676 if ( !aInsOp->_is_nil() ) {
1677 CORBA::Long aWidth, aHeight;
1678 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1679 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1681 theHeight = aHeight;
1683 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1684 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1686 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1689 for (int i = 0; i < aStream->length(); i++)
1690 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1691 aTextureMap[ theId ] = aTexture;
1699 LightApp_Selection* GeometryGUI::createSelection() const
1701 return new GEOMGUI_Selection();
1704 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1706 SalomeApp_Module::contextMenuPopup( client, menu, title );
1708 getApp()->selectionMgr()->selectedObjects( lst );
1710 //Add submenu for predefined materials
1711 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
1712 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
1713 QtxPopupMgr* mgr = popupMgr();
1714 //get parrent for submenu
1715 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
1717 QMenu* oldMenu = act->menu() ;
1722 QMenu* matMenu = new QMenu();
1723 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
1725 //Get current material model for the object
1727 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
1728 if ( anApp && anApp->activeViewManager() ) {
1729 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
1731 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
1734 QString curModel = "";
1735 if ( v.canConvert<QString>() ) curModel = v.toString();
1736 // get list of all predefined materials
1737 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
1739 foreach ( QString material, materials )
1741 QAction* menAct = matMenu->addAction( material );
1742 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
1743 signalMapper->setMapping( menAct, material );
1744 menAct->setCheckable( true );
1745 // Set checked if this material is current
1746 Material_Model aModel;
1747 aModel.fromResources( material );
1748 if ( !found && aModel.toProperties() == curModel ) {
1749 menAct->setChecked( true );
1753 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
1754 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
1755 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
1756 this, SLOT( OnSetMaterial( const QString & ) ) );
1757 act->setMenu( matMenu );
1761 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
1762 Handle(SALOME_InteractiveObject) io = lst.First();
1763 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1764 _PTR(Study) study = appStudy->studyDS();
1765 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
1767 QString aName = QString( obj->GetName().c_str() );
1768 aName.remove( QRegExp("\\s+$") );
1774 void GeometryGUI::OnSetMaterial(const QString& theName)
1776 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
1780 void GeometryGUI::createPreferences()
1782 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1784 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1785 setPreferenceProperty( genGroup, "columns", 2 );
1787 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1788 LightApp_Preferences::Selector,
1789 "Geometry", "display_mode" );
1791 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1792 LightApp_Preferences::Color, "Geometry", "shading_color" );
1794 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1795 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1797 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1798 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1800 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1801 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1803 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1804 LightApp_Preferences::Color, "Geometry", "line_color" );
1806 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1807 LightApp_Preferences::Color, "Geometry", "point_color" );
1809 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1810 LightApp_Preferences::Color, "Geometry", "isos_color" );
1812 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1813 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1815 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
1816 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
1818 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1819 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1821 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1822 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1824 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
1825 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
1827 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
1828 LightApp_Preferences::Selector,
1829 "Geometry", "material" );
1831 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
1832 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
1838 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1839 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1841 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1842 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1844 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1845 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1847 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1848 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1850 for (int i = 0; i < nb; i++) {
1851 setPreferenceProperty( wd[i], "min", 1 );
1852 setPreferenceProperty( wd[i], "max", 5 );
1855 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
1856 setPreferenceProperty( isoGroup, "columns", 2 );
1857 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
1858 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
1859 setPreferenceProperty( isoU, "min", 0 );
1860 setPreferenceProperty( isoU, "max", 100000 );
1861 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
1862 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
1863 setPreferenceProperty( isoV, "min", 0 );
1864 setPreferenceProperty( isoV, "max", 100000 );
1866 // Quantities with individual precision settings
1867 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1868 setPreferenceProperty( precGroup, "columns", 2 );
1870 const int nbQuantities = 8;
1871 int prec[nbQuantities], ii = 0;
1872 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1873 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1874 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1875 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1876 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1877 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1878 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1879 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1880 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1881 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1882 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1883 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1884 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1885 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1886 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1887 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1889 // Set property for precision value for spinboxes
1890 for ( ii = 0; ii < nbQuantities; ii++ ){
1891 setPreferenceProperty( prec[ii], "min", -14 );
1892 setPreferenceProperty( prec[ii], "max", 14 );
1893 setPreferenceProperty( prec[ii], "precision", 2 );
1896 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1897 setPreferenceProperty( VertexGroup, "columns", 2 );
1899 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1900 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1902 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1903 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1905 // Set property for default display mode
1906 QStringList aModesList;
1907 aModesList.append( tr("MEN_WIREFRAME") );
1908 aModesList.append( tr("MEN_SHADING") );
1909 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1911 QList<QVariant> anIndexesList;
1912 anIndexesList.append(0);
1913 anIndexesList.append(1);
1914 anIndexesList.append(2);
1916 setPreferenceProperty( dispmode, "strings", aModesList );
1917 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1919 // Set property for top level display mode
1920 QStringList aTopModesList;
1921 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
1922 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
1923 aTopModesList.append( tr("MEN_WIREFRAME") );
1924 aTopModesList.append( tr("MEN_SHADING") );
1925 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1927 QList<QVariant> aTopIndexesList;
1928 aTopIndexesList.append(0);
1929 aTopIndexesList.append(1);
1930 aTopIndexesList.append(2);
1931 aTopIndexesList.append(3);
1932 aTopIndexesList.append(4);
1934 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
1935 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
1937 // Set property for step value for spinboxes
1938 setPreferenceProperty( step, "min", 1 );
1939 setPreferenceProperty( step, "max", 10000 );
1940 setPreferenceProperty( step, "precision", 3 );
1942 // Set property for deflection value for spinboxes
1943 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
1944 setPreferenceProperty( defl, "max", 1.0 );
1945 setPreferenceProperty( defl, "step", 1.0e-04 );
1946 setPreferenceProperty( defl, "precision", 6 );
1948 // Set property for default material
1949 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
1951 // Set property vertex marker type
1952 QList<QVariant> aMarkerTypeIndicesList;
1953 QList<QVariant> aMarkerTypeIconsList;
1955 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1956 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1957 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1958 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1959 aMarkerTypeIndicesList << (i-1);
1960 aMarkerTypeIconsList << pixmap;
1963 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1964 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1966 // Set property for vertex marker scale
1967 QList<QVariant> aMarkerScaleIndicesList;
1968 QStringList aMarkerScaleValuesList;
1970 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1971 aMarkerScaleIndicesList << iii;
1972 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1975 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1976 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1978 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1979 setPreferenceProperty( originGroup, "columns", 2 );
1981 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1982 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1983 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1984 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1986 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1987 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1989 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1990 setPreferenceProperty( operationsGroup, "columns", 2 );
1992 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1993 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1996 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1998 if (section == "Geometry") {
1999 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2000 if (param == QString("SettingsGeomStep")) {
2001 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2002 EmitSignalDefaultStepValueChanged(spin_step);
2004 else if (param == QString("toplevel_color")) {
2005 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2006 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2008 else if (param == QString("toplevel_dm")) {
2009 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2014 LightApp_Displayer* GeometryGUI::displayer()
2017 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2021 void GeometryGUI::setLocalSelectionMode(const int mode)
2023 myLocalSelectionMode = mode;
2026 int GeometryGUI::getLocalSelectionMode() const
2028 return myLocalSelectionMode;
2031 const char gSeparator = '_'; // character used to separate parameter names
2032 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2035 * \brief Store visual parameters
2037 * This method is called just before the study document is saved.
2038 * Store visual parameters in AttributeParameter attribute(s)
2040 void GeometryGUI::storeVisualParameters (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 QList<SUIT_ViewManager*> lst;
2059 QList<SUIT_ViewManager*>::Iterator it;
2061 // main cycle to store parameters of displayed objects
2063 getApp()->viewManagers(lst);
2064 for (it = lst.begin(); it != lst.end(); it++) {
2065 SUIT_ViewManager* vman = *it;
2066 QString vType = vman->getType();
2067 int aMgrId = vman->getGlobalId();
2068 // saving VTK actors properties
2069 QVector<SUIT_ViewWindow*> views = vman->getViews();
2070 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2071 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2072 ObjMap::ConstIterator o_it = anObjects.begin();
2073 for (; o_it != anObjects.end(); o_it++) {
2074 const PropMap aProps = o_it.value();
2076 //Check that object exists in the study
2077 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2078 if ( !obj || !(aProps.count() > 0))
2080 // entry is "encoded" = it does NOT contain component adress, since it is a
2081 // subject to change on next component loading
2083 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2085 _PTR(GenericAttribute) anAttr;
2086 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2089 QString param, occParam = vType;
2090 occParam += GEOM::sectionSeparator();
2091 occParam += QString::number(aMgrId);
2092 occParam += GEOM::sectionSeparator();
2094 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2095 param = occParam + GEOM::propertyName( GEOM::Visibility );
2096 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2099 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2100 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2101 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2104 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2105 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2107 val << QString::number(c.redF());
2108 val << QString::number(c.greenF());
2109 val << QString::number(c.blueF());
2110 param = occParam + GEOM::propertyName( GEOM::Color );
2111 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2114 if (vType == SVTK_Viewer::Type()) {
2115 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2116 param = occParam + GEOM::propertyName( GEOM::Opacity );
2117 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2119 } else if (vType == SOCC_Viewer::Type()) {
2120 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2121 param = occParam + GEOM::propertyName( GEOM::Transparency );
2122 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2125 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2126 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2127 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2131 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2132 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2133 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2136 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2137 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2138 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2141 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2142 param = occParam + GEOM::propertyName( GEOM::Deflection );
2143 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2146 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2147 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2148 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2149 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2152 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2153 param = occParam + GEOM::propertyName( GEOM::Material );
2154 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2157 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2158 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2159 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2162 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2163 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2164 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2166 } // object iterator
2168 } // for (viewManagers)
2172 * \brief Restore visual parameters
2174 * This method is called after the study document is opened.
2175 * Restore visual parameters from AttributeParameter attribute(s)
2177 void GeometryGUI::restoreVisualParameters (int savePoint)
2179 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2180 if (!appStudy || !appStudy->studyDS())
2182 _PTR(Study) studyDS = appStudy->studyDS();
2184 // componentName is used for encoding of entries when storing them in IParameters
2185 std::string componentName = myComponentGeom->ComponentDataType();
2186 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2187 //if (!aSComponent) return;
2190 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2191 componentName.c_str(),
2193 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2195 std::vector<std::string> entries = ip->getEntries();
2197 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2199 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2200 QString entry (ip->decodeEntry(*entIt).c_str());
2202 // Check that the entry corresponds to a real object in the Study
2203 // as the object may be deleted or modified after the visual state is saved.
2204 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2205 if (!so) continue; //Skip the not existent entry
2207 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2208 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2210 std::vector<std::string>::iterator namesIt = paramNames.begin();
2211 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2213 // actors are stored in a map after displaying of them for
2214 // quicker access in the future: map < viewID to actor >
2215 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2216 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2218 QString viewerTypStr;
2219 QString viewIndexStr;
2221 QVector<PropMap> aListOfMap;
2223 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2225 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2226 // '_' is used as separator and should not be used in viewer type or parameter names.
2227 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2228 if (lst.size() != 3)
2231 viewerTypStr = lst[0];
2232 viewIndexStr = lst[1];
2233 QString paramNameStr = lst[2];
2236 viewIndex = viewIndexStr.toUInt(&ok);
2237 if (!ok) // bad conversion of view index to integer
2240 if ((viewIndex + 1) > aListOfMap.count()) {
2241 aListOfMap.resize(viewIndex + 1);
2244 QString val((*valuesIt).c_str());
2245 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2246 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2247 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2248 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2249 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2250 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2251 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2252 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2253 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2254 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2255 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2256 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2257 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2258 QStringList rgb = val.split(GEOM::subSectionSeparator());
2259 if (rgb.count() == 3) {
2260 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2261 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2263 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2264 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2265 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2266 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2267 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2268 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2269 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2270 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2271 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2272 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2273 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2274 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2276 } // for names/parameters iterator
2278 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2280 for (int index = 0; index < aListOfMap.count(); index++) {
2282 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2284 //Get Visibility property of the current PropMap
2285 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2286 SUIT_ViewManager* vman = lst.at(index);
2287 SUIT_ViewModel* vmodel = vman->getViewModel();
2288 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2291 } // for entries iterator
2293 // update all VTK and OCC views
2294 QList<SUIT_ViewManager*> lst;
2295 getApp()->viewManagers(lst);
2296 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2297 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2300 if (vmodel->getType() == SVTK_Viewer::Type()) {
2301 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2302 vtkView->getRenderer()->ResetCameraClippingRange();
2305 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2306 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2307 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2314 void GeometryGUI::onViewAboutToShow()
2316 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2317 QAction* a = action( GEOMOp::OpSwitchVectors );
2319 a->setEnabled(true);
2320 bool vmode = window->property("VectorsMode").toBool();
2321 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2323 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2324 a->setEnabled(false);
2329 \brief Return action by id
2330 \param id identifier of the action
2333 QAction* GeometryGUI::getAction(const int id) {
2338 \brief GEOM module message handler
2340 This method can be re-implemented in the subclasses.
2341 This is a GEOM module message handler.
2343 \param msg the message received.
2345 void GeometryGUI::message(const QString& msg)
2348 QStringList data = msg.split("/");
2349 const int nbStrings = data.count();
2351 if (nbStrings > 0) {
2352 if (data[0] == "modified") {
2354 QString anIOR = nbStrings > 1 ? data[1] : QString();
2356 if ( anIOR.isEmpty() ) {
2360 // Get the geom object.
2361 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2363 // Clear the shape buffer
2364 GeometryGUI::ClearShapeBuffer (anObj);
2370 \brief Clears the shape buffer.
2372 This is a static method. It clears the shape buffer.
2374 \param theObj the object
2376 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2378 if ( CORBA::is_nil( theObj ) )
2381 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2382 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2383 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2385 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2390 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2395 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2399 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2400 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2401 _PTR(GenericAttribute) anAttr;
2402 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2403 _PTR(AttributeIOR) anIOR ( anAttr );
2404 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2405 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2411 \brief Returns the object from IOR.
2413 This is a static method. It returns the object from its IOR.
2415 \param IOR object IOR
2416 \return GEOM object.
2418 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2420 GEOM::GEOM_Object_var geomObj;
2421 if ( !IOR.isEmpty() ) {
2422 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2423 ( IOR.toLatin1().constData() );
2424 if ( !CORBA::is_nil( corbaObj ) )
2425 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2427 return geomObj._retn();
2431 \brief Returns IOR of the object.
2433 This is a static method. It returns the object's IOR.
2435 \param object the GEOM object.
2436 \return object's IOR.
2438 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2441 if ( !CORBA::is_nil( object ) ) {
2442 CORBA::String_var anIOR =
2443 SalomeApp_Application::orb()->object_to_string( object );
2450 \brief Check if this object is can't be renamed in place
2452 This method can be re-implemented in the subclasses.
2453 Return true in case if object isn't reference or component (module root).
2455 \param entry column id
2456 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2458 bool GeometryGUI::renameAllowed( const QString& entry) const {
2460 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2461 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2462 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2464 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2468 Rename object by entry.
2469 \param entry entry of the object
2470 \param name new name of the object
2471 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2473 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
2475 bool result = false;
2477 SalomeApp_Application* app =
2478 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2479 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2484 _PTR(Study) aStudy = appStudy->studyDS();
2489 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2491 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2495 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2496 _PTR(GenericAttribute) anAttr;
2498 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2499 _PTR(AttributeName) aName (anAttr);
2501 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2502 if (!CORBA::is_nil(anObj)) {
2503 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2504 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
2512 void GeometryGUI::updateMaterials()
2514 LightApp_Preferences* pref = preferences();
2516 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2517 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
2518 if ( !materials.contains( currentMaterial ) )
2519 // user material set as default in the preferences, might be removed
2520 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
2522 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
2524 setPreferenceProperty( prefItem->id(),
2525 "strings", materials );
2526 prefItem->retrieve();