From 041dfe0daafeed17b0b4fae02d46bb88ab5e3d9e Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 15 Jan 2009 08:05:40 +0000 Subject: [PATCH] This commit was generated by cvs2git to create tag 'mergeto_BR_V5_DEV_22Jan09'. Sprout from BR_QT4_Dev 2008-08-28 09:52:33 UTC abd 'Fix compilation problems on Win32 platform' Cherrypick from BR_QT4_Dev 2008-09-16 07:21:15 UTC vsr 'Implement 'make dist' and 'make distcheck' steps support': Makefile.am adm_local/Makefile.am adm_local/unix/config_files/Makefile.am adm_local/unix/make_common_starter.am bin/Makefile.am doc/Makefile.am doc/salome/Makefile.am doc/salome/gui/Makefile.am doc/salome/gui/VISU/doxyfile.in doc/salome/gui/VISU/doxyfile_idl.in doc/salome/tui/Makefile.am idl/Makefile.am src/CONVERTOR/Makefile.am src/ENGINE/Makefile.am src/VISU_SWIG/Makefile.am Cherrypick from BR_QT4_Dev 2007-05-25 14:40:53 UTC admin 'This commit was generated by cvs2git to create branch 'BR_QT4_Dev'.': doc/salome/gui/VISU/pics/smds1.png resources/Visu_cutplane.png Cherrypick from master 2008-03-07 07:46:09 UTC jfa 'Join modifications from BR_Dev_For_4_0 tag V4_1_1.': doc/salome/gui/VISU/files/about_structure_of_med_object.htm doc/salome/gui/VISU/files/about_tables.htm doc/salome/gui/VISU/files/animating_presentations.htm doc/salome/gui/VISU/files/changing_visualization_parameters_of_the_presenetation.htm doc/salome/gui/VISU/files/creating_curves.htm doc/salome/gui/VISU/files/creating_field_presentations.htm doc/salome/gui/VISU/files/creating_presentations.htm doc/salome/gui/VISU/files/creating_xy_plot.htm doc/salome/gui/VISU/files/cut_lines_presentation.htm doc/salome/gui/VISU/files/cut_lines_resentation.htm doc/salome/gui/VISU/files/deformed_shape_presentation.htm doc/salome/gui/VISU/files/displaying_hiding_presentations.htm doc/salome/gui/VISU/files/displaying_tables.htm doc/salome/gui/VISU/files/getting_elements_attributes.htm doc/salome/gui/VISU/files/getting_started.htm doc/salome/gui/VISU/files/importing_med_objects.htm doc/salome/gui/VISU/files/importing_tables.htm doc/salome/gui/VISU/files/insideframe.htm doc/salome/gui/VISU/files/introduction.htm doc/salome/gui/VISU/files/iso_surfaces_presentation.htm doc/salome/gui/VISU/files/points.htm doc/salome/gui/VISU/files/running_visu.htm doc/salome/gui/VISU/files/scalar_map_presentation.htm doc/salome/gui/VISU/files/scaling_presentations.htm doc/salome/gui/VISU/files/setting_properties_of_xy_plots.htm doc/salome/gui/VISU/files/shrink.htm doc/salome/gui/VISU/files/stream_lines_presentation.htm doc/salome/gui/VISU/files/surface.htm doc/salome/gui/VISU/files/surfaceframe.htm doc/salome/gui/VISU/files/sweeping.htm doc/salome/gui/VISU/files/vectors_presentation.htm doc/salome/gui/VISU/files/wireframe.htm doc/salome/gui/VISU/pics/animation.png doc/salome/gui/VISU/pics/createcurves.png doc/salome/gui/VISU/pics/cutlines.png doc/salome/gui/VISU/pics/dataonelements1.png doc/salome/gui/VISU/pics/dataonelements2.png doc/salome/gui/VISU/pics/image157.gif doc/salome/gui/VISU/pics/scalarbarproperties.png doc/salome/gui/VISU/pics/set_rotation_point_dialog1.png doc/salome/gui/VISU/pics/set_rotation_point_dialog2.png doc/salome/gui/VISU/pics/view_rotation_point.png doc/salome/gui/VISU/visugenidl_doc/VISU__Gen_8idl.html doc/salome/gui/VISU/visugenidl_doc/VISU__Gen_8idl__incl.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Animation.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Animation__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Base.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Base__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ColoredPrs3d.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ColoredPrs3dCache.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ColoredPrs3dCache__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ColoredPrs3dHolder.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ColoredPrs3dHolder__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ColoredPrs3d__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Container.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Container__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Curve.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Curve__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1CutLines.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1CutLines__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1CutPlanes.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1CutPlanes__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1DeformedShape.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1DeformedShape__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1GaussPoints.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1GaussPoints__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1IsoSurfaces.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1IsoSurfaces__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Mesh.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Mesh__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Plot3D.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Plot3D__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Prs3d.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Prs3d__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1PrsObject.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1PrsObject__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1RemovableObject.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1RemovableObject__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Result.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Result__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMap.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMapOnDeformedShape.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMapOnDeformedShape__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMap__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1StreamLines.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1StreamLines__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Table.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1TableView.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1TableView__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Table__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1VISU__Gen.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1VISU__Gen__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Vectors.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1Vectors__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1View.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1View3D.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1View3D__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ViewManager.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ViewManager__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1View__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1XYPlot.html doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1XYPlot__inherit__graph.jpg doc/salome/gui/VISU/visugenidl_doc/namespaceVISU.html doc/salome/gui/VISU/whdata/whftdata.js doc/salome/gui/VISU/whdata/whftdata0.htm doc/salome/gui/VISU/whdata/whfts.htm doc/salome/gui/VISU/whdata/whfts.js doc/salome/gui/VISU/whdata/whfwdata.js doc/salome/gui/VISU/whdata/whfwdata0.htm doc/salome/gui/VISU/whdata/whgdata.js doc/salome/gui/VISU/whdata/whgdata0.htm doc/salome/gui/VISU/whdata/whglo.htm doc/salome/gui/VISU/whdata/whglo.js doc/salome/gui/VISU/whdata/whidata.js doc/salome/gui/VISU/whdata/whidx.htm doc/salome/gui/VISU/whdata/whidx.js doc/salome/gui/VISU/whdata/whtdata.js doc/salome/gui/VISU/whdata/whtdata0.htm doc/salome/gui/VISU/whdata/whtoc.htm doc/salome/gui/VISU/whdata/whtoc.js doc/salome/gui/VISU/whgdata/whlstf0.htm doc/salome/gui/VISU/whgdata/whlstf1.htm doc/salome/gui/VISU/whgdata/whlstf2.htm doc/salome/gui/VISU/whgdata/whlstf3.htm doc/salome/gui/VISU/whgdata/whlstf4.htm doc/salome/gui/VISU/whgdata/whlstf5.htm doc/salome/gui/VISU/whgdata/whlstf6.htm doc/salome/gui/VISU/whgdata/whlstf7.htm doc/salome/gui/VISU/whgdata/whlstf8.htm doc/salome/gui/VISU/whgdata/whlstf9.htm doc/salome/gui/VISU/whgdata/whlstfl0.htm doc/salome/gui/VISU/whgdata/whlstfl1.htm doc/salome/gui/VISU/whgdata/whlstfl10.htm doc/salome/gui/VISU/whgdata/whlstfl11.htm doc/salome/gui/VISU/whgdata/whlstfl12.htm doc/salome/gui/VISU/whgdata/whlstfl13.htm doc/salome/gui/VISU/whgdata/whlstfl14.htm doc/salome/gui/VISU/whgdata/whlstfl15.htm doc/salome/gui/VISU/whgdata/whlstfl16.htm doc/salome/gui/VISU/whgdata/whlstfl17.htm doc/salome/gui/VISU/whgdata/whlstfl18.htm doc/salome/gui/VISU/whgdata/whlstfl19.htm doc/salome/gui/VISU/whgdata/whlstfl2.htm doc/salome/gui/VISU/whgdata/whlstfl20.htm doc/salome/gui/VISU/whgdata/whlstfl21.htm doc/salome/gui/VISU/whgdata/whlstfl22.htm doc/salome/gui/VISU/whgdata/whlstfl23.htm doc/salome/gui/VISU/whgdata/whlstfl24.htm doc/salome/gui/VISU/whgdata/whlstfl3.htm doc/salome/gui/VISU/whgdata/whlstfl4.htm doc/salome/gui/VISU/whgdata/whlstfl5.htm doc/salome/gui/VISU/whgdata/whlstfl6.htm doc/salome/gui/VISU/whgdata/whlstfl7.htm doc/salome/gui/VISU/whgdata/whlstfl8.htm doc/salome/gui/VISU/whgdata/whlstfl9.htm doc/salome/gui/VISU/whgdata/whlstg0.htm doc/salome/gui/VISU/whgdata/whlsti0.htm doc/salome/gui/VISU/whgdata/whlstt0.htm doc/salome/gui/VISU/whgdata/whlstt1.htm doc/salome/gui/VISU/whgdata/whlstt2.htm doc/salome/gui/VISU/whgdata/whlstt3.htm doc/salome/gui/VISU/whgdata/whlstt4.htm doc/salome/gui/VISU/whgdata/whlstt5.htm doc/salome/gui/VISU/whgdata/whlstt6.htm doc/salome/gui/VISU/whgdata/whlstt7.htm doc/salome/gui/VISU/whgdata/whnvf30.htm doc/salome/gui/VISU/whgdata/whnvf31.htm doc/salome/gui/VISU/whgdata/whnvf32.htm doc/salome/gui/VISU/whgdata/whnvf33.htm doc/salome/gui/VISU/whgdata/whnvl31.htm doc/salome/gui/VISU/whgdata/whnvl32.htm doc/salome/gui/VISU/whgdata/whnvl33.htm doc/salome/gui/VISU/whgdata/whnvp30.htm doc/salome/gui/VISU/whgdata/whnvp31.htm doc/salome/gui/VISU/whgdata/whnvp32.htm doc/salome/gui/VISU/whgdata/whnvp33.htm doc/salome/gui/VISU/whgdata/whnvt30.htm doc/salome/gui/VISU/whgdata/whnvt31.htm doc/salome/gui/VISU/whgdata/whnvt32.htm doc/salome/gui/VISU/whgdata/whnvt33.htm doc/salome/gui/VISU/whxdata/whftdata0.xml doc/salome/gui/VISU/whxdata/whfts.xml doc/salome/gui/VISU/whxdata/whfwdata0.xml doc/salome/gui/VISU/whxdata/whgdata0.xml doc/salome/gui/VISU/whxdata/whglo.xml doc/salome/gui/VISU/whxdata/whidx.xml doc/salome/gui/VISU/whxdata/whtdata0.xml doc/salome/gui/VISU/whxdata/whtoc.xml doc/salome/tui/VISU/doxyfile.in doc/salome/tui/VISU/sources/bg_salome.gif doc/salome/tui/VISU/sources/static/examples_VISU.html doc/salome/tui/VISU/sources/static/overview_VISU.html src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.cxx src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.hxx src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.cxx src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.h src/VISU_I/VISU_ScalarMapOnDeformedShape_i.cc src/VISU_I/VISU_ScalarMapOnDeformedShape_i.hh Cherrypick from BR_V5_DEV 2008-10-29 14:04:50 UTC dmv 'Icons Plot2DView and Curves in Object Browser are missing in series 4x and 5x': configure.ac resources/Makefile.am src/CONVERTOR/VISU_Convertor_impl.cxx src/ENGINE/VISU_Engine_i.cc src/ENGINE/VISU_Engine_i.hh src/OBJECT/Makefile.am src/OBJECT/VISU_DataSetActor.cxx src/OBJECT/VISU_DataSetActor.h src/OBJECT/VISU_GaussPtsAct.cxx src/OBJECT/VISU_GaussPtsAct.h src/OBJECT/VISU_GaussPtsDeviceActor.cxx src/OBJECT/VISU_GaussPtsDeviceActor.h src/OBJECT/VISU_GaussPtsSettings.cxx src/OBJECT/VISU_GaussPtsSettings.h src/OBJECT/VISU_MeshAct.cxx src/OBJECT/VISU_MeshAct.h src/OBJECT/VISU_ScalarMapAct.cxx src/OBJECT/VISU_ScalarMapAct.h src/PIPELINE/Makefile.am src/PIPELINE/SALOME_ExtractGeometry.h src/PIPELINE/SALOME_ExtractPolyDataGeometry.h src/PIPELINE/VISUPipeLine.cxx src/PIPELINE/VISU_ColoredPL.cxx src/PIPELINE/VISU_ColoredPL.hxx src/PIPELINE/VISU_CutLinesPL.cxx src/PIPELINE/VISU_CutPlanesPL.cxx src/PIPELINE/VISU_DataSetMapperHolder.cxx src/PIPELINE/VISU_DataSetMapperHolder.hxx src/PIPELINE/VISU_DeformedShapePL.cxx src/PIPELINE/VISU_GaussPointsPL.cxx src/PIPELINE/VISU_IsoSurfacesPL.cxx src/PIPELINE/VISU_IsoSurfacesPL.hxx src/PIPELINE/VISU_LookupTable.cxx src/PIPELINE/VISU_LookupTable.hxx src/PIPELINE/VISU_MapperHolder.hxx src/PIPELINE/VISU_MeshPL.cxx src/PIPELINE/VISU_PipeLine.cxx src/PIPELINE/VISU_PipeLine.hxx src/PIPELINE/VISU_Plot3DPL.cxx src/PIPELINE/VISU_PointSpriteMapperHolder.cxx src/PIPELINE/VISU_PolyDataMapperHolder.cxx src/PIPELINE/VISU_PolyDataMapperHolder.hxx src/PIPELINE/VISU_ScalarBarCtrl.cxx src/PIPELINE/VISU_ScalarMapPL.cxx src/PIPELINE/VISU_StreamLinesPL.cxx src/PIPELINE/VISU_VectorsPL.cxx src/VISUGUI/VisuGUI_ClippingDlg.cxx src/VISUGUI/VisuGUI_ClippingDlg.h src/VISUGUI/VisuGUI_CutPlanesDlg.cxx src/VISUGUI/VisuGUI_DeformedShapeDlg.cxx src/VISUGUI/VisuGUI_DeformedShapeDlg.h src/VISUGUI/VisuGUI_Displayer.cxx src/VISUGUI/VisuGUI_Module.cxx src/VISUGUI/VisuGUI_Module.h src/VISUGUI/VisuGUI_Prs3dTools.h src/VISUGUI/VisuGUI_Slider.cxx src/VISUGUI/VisuGUI_Slider.h src/VISUGUI/VisuGUI_Tools.h src/VISUGUI/VisuGUI_VectorsDlg.cxx src/VISUGUI/VisuGUI_ViewTools.h src/VISU_I/Makefile.am src/VISU_I/VISUConfig.cc src/VISU_I/VISU_ColoredPrs3dCache_i.cc src/VISU_I/VISU_ColoredPrs3dCache_i.hh src/VISU_I/VISU_ColoredPrs3dFactory.cc src/VISU_I/VISU_ColoredPrs3dHolder_i.cc src/VISU_I/VISU_ColoredPrs3dHolder_i.hh src/VISU_I/VISU_CorbaMedConvertor.cxx src/VISU_I/VISU_CutLines_i.cc src/VISU_I/VISU_CutPlanes_i.cc src/VISU_I/VISU_DeformedShape_i.cc src/VISU_I/VISU_Gen_i.cc src/VISU_I/VISU_Gen_i.hh src/VISU_I/VISU_IsoSurfaces_i.cc src/VISU_I/VISU_Plot3D_i.cc src/VISU_I/VISU_Prs3d_i.cc src/VISU_I/VISU_Prs3d_i.hh src/VISU_I/VISU_ResultUtils.cc src/VISU_I/VISU_Result_i.cc src/VISU_I/VISU_StreamLines_i.cc src/VISU_I/VISU_Table_i.cc src/VISU_I/VISU_TimeAnimation.cxx src/VISU_I/VISU_Vectors_i.cc src/VISU_I/VISU_View_i.hh src/VVTK/Makefile.am src/VVTK/VVTK_MainWindow.cxx src/VVTK/VVTK_MainWindow.h src/VVTK/VVTK_PickingDlg.cxx src/VVTK/VVTK_Renderer.cxx src/VVTK/VVTK_ViewModel.cxx Cherrypick from BR_V5_IMP_P8 2009-01-15 08:05:39 UTC sln '0019819: EDF 643 VISU : Scalar bar ergonomics. Default origin and size of scalar bar changed': doc/salome/gui/VISU/images/barproperty.png doc/salome/gui/VISU/images/scalarbarproperties.png doc/salome/gui/VISU/input/a3d_presentations.doc doc/salome/gui/VISU/input/field_presentations.doc doc/salome/gui/VISU/input/index.doc doc/salome/gui/VISU/input/scalar_map.doc idl/VISU_Gen.idl resources/SalomeApp.xml src/OBJECT/VISU_Actor.cxx src/OBJECT/VISU_Actor.h src/OBJECT/VISU_VectorsAct.cxx src/OBJECT/VISU_VectorsAct.h src/PIPELINE/VISU_ScalarBarActor.cxx src/PIPELINE/VISU_ScalarBarActor.hxx src/VISUGUI/Makefile.am src/VISUGUI/VisuGUI.cxx src/VISUGUI/VisuGUI.h src/VISUGUI/VisuGUI_ActionsDef.h src/VISUGUI/VisuGUI_GaussPointsDlg.cxx src/VISUGUI/VisuGUI_GaussPointsDlg.h src/VISUGUI/VisuGUI_Prs3dDlg.cxx src/VISUGUI/VisuGUI_Prs3dDlg.h src/VISUGUI/VisuGUI_Selection.cxx src/VISUGUI/VisuGUI_Selection.h src/VISUGUI/VisuGUI_Tools.cxx src/VISU_I/VISU_ColoredPrs3d_i.cc src/VISU_I/VISU_ColoredPrs3d_i.hh src/VISU_I/VISU_DumpPython.cc src/VISU_I/VISU_GaussPoints_i.cc src/VISU_I/VISU_Mesh_i.cc src/VISU_I/VISU_Mesh_i.hh src/VISU_I/VISU_Prs3dUtils.cc src/VISU_I/VISU_Prs3dUtils.hh src/VISU_I/VISU_ScalarMap_i.cc src/VISU_I/VISU_ScalarMap_i.hh Delete: doc/salome/gui/VISU/images/exportmedfile.png doc/salome/gui/VISU/images/table.png doc/salome/gui/VISU/images/table3d.png doc/salome/gui/VISU/images/tablesn1.png doc/salome/gui/VISU/images/tablesn2.png doc/salome/gui/VISU/input/table_3d.doc src/CONVERTOR/VISU_ElnoMeshValue.hxx src/CONVERTOR/VISU_TableReader.cxx src/CONVERTOR/VISU_TableReader.hxx src/CONVERTOR/VISU_VTKTypeList.hxx src/OBJECT/VISU_ActorBase.cxx src/OBJECT/VISU_ActorBase.h src/OBJECT/VISU_IsoSurfActor.cxx src/OBJECT/VISU_IsoSurfActor.h src/OBJECT/VISU_PointMap3dActor.cxx src/OBJECT/VISU_PointMap3dActor.h src/PIPELINE/VISU_DeformationPL.cxx src/PIPELINE/VISU_DeformationPL.hxx src/PIPELINE/VISU_DeformedGridPL.cxx src/PIPELINE/VISU_DeformedGridPL.hxx src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.cxx src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.hxx src/PIPELINE/VISU_ElnoAssembleFilter.cxx src/PIPELINE/VISU_ElnoAssembleFilter.hxx src/PIPELINE/VISU_ElnoDisassembleFilter.cxx src/PIPELINE/VISU_ElnoDisassembleFilter.hxx src/PIPELINE/VISU_LabelPointsFilter.cxx src/PIPELINE/VISU_LabelPointsFilter.hxx src/PIPELINE/VISU_MergedPL.cxx src/PIPELINE/VISU_MergedPL.hxx src/PIPELINE/VISU_OptionalDeformationPL.cxx src/PIPELINE/VISU_OptionalDeformationPL.hxx src/VISUGUI/VISU_images.ts src/VISUGUI/VISU_msg_en.ts src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.cxx src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.h src/VISUGUI/VisuGUI_FileInfoDlg.cxx src/VISUGUI/VisuGUI_FileInfoDlg.h src/VISUGUI/VisuGUI_Table3dDlg.cxx src/VISUGUI/VisuGUI_Table3dDlg.h src/VISU_I/VISU_Deformation_i.cc src/VISU_I/VISU_Deformation_i.hh src/VISU_I/VISU_DeformedShapeAndScalarMap_i.cc src/VISU_I/VISU_DeformedShapeAndScalarMap_i.hh src/VISU_I/VISU_MonoColorPrs_i.cc src/VISU_I/VISU_MonoColorPrs_i.hh src/VISU_I/VISU_OptionalDeformation_i.cc src/VISU_I/VISU_OptionalDeformation_i.hh src/VISU_I/VISU_PointMap3d_i.cc src/VISU_I/VISU_PointMap3d_i.hh src/VISU_SWIG/visu_pointmap3d.py --- Makefile.am | 15 +- adm_local/Makefile.am | 2 +- adm_local/unix/config_files/Makefile.am | 2 +- adm_local/unix/make_common_starter.am | 41 +- bin/Makefile.am | 7 +- configure.ac | 6 +- doc/Makefile.am | 10 +- doc/salome/Makefile.am | 6 +- doc/salome/gui/Makefile.am | 29 +- doc/salome/gui/VISU/doxyfile.in | 8 +- doc/salome/gui/VISU/doxyfile_idl.in | 10 +- doc/salome/gui/VISU/images/barproperty.png | Bin 14083 -> 13976 bytes doc/salome/gui/VISU/images/exportmedfile.png | Bin 24416 -> 0 bytes .../gui/VISU/images/scalarbarproperties.png | Bin 22218 -> 38936 bytes doc/salome/gui/VISU/images/table.png | Bin 9959 -> 0 bytes doc/salome/gui/VISU/images/table3d.png | Bin 21142 -> 0 bytes doc/salome/gui/VISU/images/tablesn1.png | Bin 6494 -> 0 bytes doc/salome/gui/VISU/images/tablesn2.png | Bin 12113 -> 0 bytes .../gui/VISU/input/a3d_presentations.doc | 1 + .../gui/VISU/input/field_presentations.doc | 1 + doc/salome/gui/VISU/input/index.doc | 1 + doc/salome/gui/VISU/input/scalar_map.doc | 10 +- doc/salome/gui/VISU/input/table_3d.doc | 49 - doc/salome/gui/VISU/pics/smds1.png | Bin 24007 -> 15132 bytes .../VISU/visugenidl_doc/VISU__Gen_8idl.html | 2 +- ...rfaceVISU_1_1ScalarMapOnDeformedShape.html | 2 +- .../VISU/visugenidl_doc/namespaceVISU.html | 2 +- doc/salome/gui/VISU/whdata/whftdata0.htm | 2 +- doc/salome/gui/VISU/whdata/whtdata0.htm | 2 +- doc/salome/gui/VISU/whgdata/whlstt3.htm | 2 +- doc/salome/gui/VISU/whgdata/whlstt4.htm | 2 +- doc/salome/gui/VISU/whxdata/whftdata0.xml | 2 +- doc/salome/gui/VISU/whxdata/whtdata0.xml | 2 +- doc/salome/tui/Makefile.am | 44 +- idl/Makefile.am | 22 +- idl/VISU_Gen.idl | 97 +- resources/Makefile.am | 22 +- resources/SalomeApp.xml | 42 +- resources/Visu_cutplane.png | Bin 0 -> 389 bytes src/CONVERTOR/Makefile.am | 2 + src/CONVERTOR/VISU_Convertor_impl.cxx | 11 +- src/CONVERTOR/VISU_ElnoMeshValue.hxx | 162 - src/CONVERTOR/VISU_TableReader.cxx | 401 -- src/CONVERTOR/VISU_TableReader.hxx | 111 - src/CONVERTOR/VISU_VTKTypeList.hxx | 120 - src/ENGINE/Makefile.am | 3 + src/ENGINE/VISU_Engine_i.cc | 46 + src/ENGINE/VISU_Engine_i.hh | 25 + src/OBJECT/Makefile.am | 3 + src/OBJECT/VISU_Actor.cxx | 723 +++- src/OBJECT/VISU_Actor.h | 154 + src/OBJECT/VISU_ActorBase.cxx | 163 - src/OBJECT/VISU_ActorBase.h | 92 - src/OBJECT/VISU_DataSetActor.cxx | 84 +- src/OBJECT/VISU_DataSetActor.h | 18 + src/OBJECT/VISU_GaussPtsAct.cxx | 329 +- src/OBJECT/VISU_GaussPtsAct.h | 22 +- src/OBJECT/VISU_GaussPtsDeviceActor.cxx | 15 +- src/OBJECT/VISU_GaussPtsDeviceActor.h | 10 + src/OBJECT/VISU_GaussPtsSettings.cxx | 45 +- src/OBJECT/VISU_GaussPtsSettings.h | 65 - src/OBJECT/VISU_IsoSurfActor.cxx | 165 - src/OBJECT/VISU_IsoSurfActor.h | 88 - src/OBJECT/VISU_MeshAct.cxx | 66 + src/OBJECT/VISU_MeshAct.h | 23 + src/OBJECT/VISU_PointMap3dActor.cxx | 149 - src/OBJECT/VISU_PointMap3dActor.h | 95 - src/OBJECT/VISU_ScalarMapAct.cxx | 79 +- src/OBJECT/VISU_ScalarMapAct.h | 23 + src/OBJECT/VISU_VectorsAct.cxx | 24 + src/OBJECT/VISU_VectorsAct.h | 4 + src/PIPELINE/Makefile.am | 6 +- src/PIPELINE/SALOME_ExtractGeometry.h | 4 +- src/PIPELINE/SALOME_ExtractPolyDataGeometry.h | 4 +- src/PIPELINE/VISUPipeLine.cxx | 546 ++- src/PIPELINE/VISU_ColoredPL.cxx | 194 +- src/PIPELINE/VISU_ColoredPL.hxx | 40 +- src/PIPELINE/VISU_CutLinesPL.cxx | 1 + src/PIPELINE/VISU_CutPlanesPL.cxx | 1 + src/PIPELINE/VISU_DataSetMapperHolder.cxx | 15 + src/PIPELINE/VISU_DataSetMapperHolder.hxx | 2 + src/PIPELINE/VISU_DeformationPL.cxx | 164 - src/PIPELINE/VISU_DeformationPL.hxx | 87 - src/PIPELINE/VISU_DeformedGridPL.cxx | 238 -- src/PIPELINE/VISU_DeformedGridPL.hxx | 117 - src/PIPELINE/VISU_DeformedShapePL.cxx | 3 + src/PIPELINE/VISU_ElnoAssembleFilter.cxx | 171 - src/PIPELINE/VISU_ElnoAssembleFilter.hxx | 47 - src/PIPELINE/VISU_ElnoDisassembleFilter.cxx | 400 -- src/PIPELINE/VISU_ElnoDisassembleFilter.hxx | 50 - src/PIPELINE/VISU_GaussPointsPL.cxx | 3 +- src/PIPELINE/VISU_IsoSurfacesPL.cxx | 5 +- src/PIPELINE/VISU_IsoSurfacesPL.hxx | 2 +- src/PIPELINE/VISU_LabelPointsFilter.cxx | 296 -- src/PIPELINE/VISU_LabelPointsFilter.hxx | 76 - src/PIPELINE/VISU_LookupTable.cxx | 71 + src/PIPELINE/VISU_LookupTable.hxx | 17 +- src/PIPELINE/VISU_MapperHolder.hxx | 2 + src/PIPELINE/VISU_MergedPL.cxx | 51 - src/PIPELINE/VISU_MergedPL.hxx | 75 - src/PIPELINE/VISU_MeshPL.cxx | 1 + src/PIPELINE/VISU_OptionalDeformationPL.cxx | 101 - src/PIPELINE/VISU_OptionalDeformationPL.hxx | 59 - src/PIPELINE/VISU_PipeLine.cxx | 29 +- src/PIPELINE/VISU_PipeLine.hxx | 9 + src/PIPELINE/VISU_Plot3DPL.cxx | 1 + src/PIPELINE/VISU_PointSpriteMapperHolder.cxx | 2 + src/PIPELINE/VISU_PolyDataMapperHolder.cxx | 16 + src/PIPELINE/VISU_PolyDataMapperHolder.hxx | 4 + src/PIPELINE/VISU_ScalarBarActor.cxx | 286 +- src/PIPELINE/VISU_ScalarBarActor.hxx | 44 +- src/PIPELINE/VISU_ScalarBarCtrl.cxx | 84 +- ...xx => VISU_ScalarMapOnDeformedShapePL.cxx} | 72 +- ...xx => VISU_ScalarMapOnDeformedShapePL.hxx} | 21 +- src/PIPELINE/VISU_ScalarMapPL.cxx | 1 + src/PIPELINE/VISU_StreamLinesPL.cxx | 1 + src/PIPELINE/VISU_VectorsPL.cxx | 3 +- src/VISUGUI/Makefile.am | 77 +- src/VISUGUI/VISU_images.ts | 294 -- src/VISUGUI/VISU_msg_en.ts | 3431 ----------------- src/VISUGUI/VisuGUI.cxx | 931 +++-- src/VISUGUI/VisuGUI.h | 55 +- src/VISUGUI/VisuGUI_ActionsDef.h | 19 +- src/VISUGUI/VisuGUI_ClippingDlg.cxx | 88 +- src/VISUGUI/VisuGUI_ClippingDlg.h | 15 +- src/VISUGUI/VisuGUI_CutPlanesDlg.cxx | 23 +- src/VISUGUI/VisuGUI_DeformedShapeDlg.cxx | 29 +- src/VISUGUI/VisuGUI_DeformedShapeDlg.h | 2 +- src/VISUGUI/VisuGUI_Displayer.cxx | 12 +- src/VISUGUI/VisuGUI_FileInfoDlg.cxx | 78 - src/VISUGUI/VisuGUI_FileInfoDlg.h | 41 - src/VISUGUI/VisuGUI_GaussPointsDlg.cxx | 41 +- src/VISUGUI/VisuGUI_GaussPointsDlg.h | 4 +- src/VISUGUI/VisuGUI_Module.cxx | 593 ++- src/VISUGUI/VisuGUI_Module.h | 43 +- src/VISUGUI/VisuGUI_Prs3dDlg.cxx | 562 ++- src/VISUGUI/VisuGUI_Prs3dDlg.h | 51 +- src/VISUGUI/VisuGUI_Prs3dTools.h | 59 +- ...> VisuGUI_ScalarMapOnDeformedShapeDlg.cxx} | 216 +- ... => VisuGUI_ScalarMapOnDeformedShapeDlg.h} | 37 +- src/VISUGUI/VisuGUI_Selection.cxx | 1174 +++--- src/VISUGUI/VisuGUI_Selection.h | 105 +- src/VISUGUI/VisuGUI_Slider.cxx | 511 ++- src/VISUGUI/VisuGUI_Slider.h | 65 +- src/VISUGUI/VisuGUI_Table3dDlg.cxx | 829 ---- src/VISUGUI/VisuGUI_Table3dDlg.h | 188 - src/VISUGUI/VisuGUI_Tools.cxx | 53 +- src/VISUGUI/VisuGUI_Tools.h | 16 +- src/VISUGUI/VisuGUI_VectorsDlg.cxx | 17 +- src/VISUGUI/VisuGUI_ViewTools.h | 6 +- src/VISU_I/Makefile.am | 13 +- src/VISU_I/VISUConfig.cc | 1 + src/VISU_I/VISU_ColoredPrs3dCache_i.cc | 16 +- src/VISU_I/VISU_ColoredPrs3dCache_i.hh | 4 +- src/VISU_I/VISU_ColoredPrs3dFactory.cc | 1 + src/VISU_I/VISU_ColoredPrs3dHolder_i.cc | 2 + src/VISU_I/VISU_ColoredPrs3dHolder_i.hh | 3 +- src/VISU_I/VISU_ColoredPrs3d_i.cc | 443 ++- src/VISU_I/VISU_ColoredPrs3d_i.hh | 118 +- src/VISU_I/VISU_CorbaMedConvertor.cxx | 12 +- src/VISU_I/VISU_CutLines_i.cc | 1 + src/VISU_I/VISU_CutPlanes_i.cc | 2 +- src/VISU_I/VISU_Deformation_i.cc | 166 - src/VISU_I/VISU_Deformation_i.hh | 103 - src/VISU_I/VISU_DeformedShape_i.cc | 1 + src/VISU_I/VISU_DumpPython.cc | 68 +- src/VISU_I/VISU_GaussPoints_i.cc | 28 +- src/VISU_I/VISU_Gen_i.cc | 75 + src/VISU_I/VISU_Gen_i.hh | 30 + src/VISU_I/VISU_IsoSurfaces_i.cc | 2 + src/VISU_I/VISU_Mesh_i.cc | 54 +- src/VISU_I/VISU_Mesh_i.hh | 6 + src/VISU_I/VISU_MonoColorPrs_i.cc | 186 - src/VISU_I/VISU_MonoColorPrs_i.hh | 83 - src/VISU_I/VISU_OptionalDeformation_i.cc | 110 - src/VISU_I/VISU_OptionalDeformation_i.hh | 76 - src/VISU_I/VISU_Plot3D_i.cc | 1 + src/VISU_I/VISU_PointMap3d_i.cc | 1276 ------ src/VISU_I/VISU_PointMap3d_i.hh | 272 -- src/VISU_I/VISU_Prs3dUtils.cc | 53 + src/VISU_I/VISU_Prs3dUtils.hh | 4 +- src/VISU_I/VISU_Prs3d_i.cc | 6 + src/VISU_I/VISU_Prs3d_i.hh | 2 + src/VISU_I/VISU_ResultUtils.cc | 2 + src/VISU_I/VISU_Result_i.cc | 8 +- ....cc => VISU_ScalarMapOnDeformedShape_i.cc} | 92 +- ....hh => VISU_ScalarMapOnDeformedShape_i.hh} | 28 +- src/VISU_I/VISU_ScalarMap_i.cc | 73 +- src/VISU_I/VISU_ScalarMap_i.hh | 9 +- src/VISU_I/VISU_StreamLines_i.cc | 1 + src/VISU_I/VISU_Table_i.cc | 18 + src/VISU_I/VISU_TimeAnimation.cxx | 1 + src/VISU_I/VISU_Vectors_i.cc | 1 + src/VISU_I/VISU_View_i.hh | 8 +- src/VISU_SWIG/Makefile.am | 30 +- src/VISU_SWIG/visu_pointmap3d.py | 57 - src/VVTK/Makefile.am | 37 +- src/VVTK/VVTK_MainWindow.cxx | 152 +- src/VVTK/VVTK_MainWindow.h | 99 +- src/VVTK/VVTK_PickingDlg.cxx | 89 +- src/VVTK/VVTK_Renderer.cxx | 4 +- src/VVTK/VVTK_ViewModel.cxx | 22 +- 202 files changed, 6695 insertions(+), 14104 deletions(-) delete mode 100644 doc/salome/gui/VISU/images/exportmedfile.png delete mode 100644 doc/salome/gui/VISU/images/table.png delete mode 100644 doc/salome/gui/VISU/images/table3d.png delete mode 100644 doc/salome/gui/VISU/images/tablesn1.png delete mode 100644 doc/salome/gui/VISU/images/tablesn2.png delete mode 100644 doc/salome/gui/VISU/input/table_3d.doc create mode 100644 resources/Visu_cutplane.png delete mode 100644 src/CONVERTOR/VISU_ElnoMeshValue.hxx delete mode 100644 src/CONVERTOR/VISU_TableReader.cxx delete mode 100644 src/CONVERTOR/VISU_TableReader.hxx delete mode 100644 src/CONVERTOR/VISU_VTKTypeList.hxx delete mode 100644 src/OBJECT/VISU_ActorBase.cxx delete mode 100644 src/OBJECT/VISU_ActorBase.h delete mode 100644 src/OBJECT/VISU_IsoSurfActor.cxx delete mode 100644 src/OBJECT/VISU_IsoSurfActor.h delete mode 100644 src/OBJECT/VISU_PointMap3dActor.cxx delete mode 100644 src/OBJECT/VISU_PointMap3dActor.h delete mode 100755 src/PIPELINE/VISU_DeformationPL.cxx delete mode 100755 src/PIPELINE/VISU_DeformationPL.hxx delete mode 100644 src/PIPELINE/VISU_DeformedGridPL.cxx delete mode 100644 src/PIPELINE/VISU_DeformedGridPL.hxx delete mode 100644 src/PIPELINE/VISU_ElnoAssembleFilter.cxx delete mode 100644 src/PIPELINE/VISU_ElnoAssembleFilter.hxx delete mode 100644 src/PIPELINE/VISU_ElnoDisassembleFilter.cxx delete mode 100644 src/PIPELINE/VISU_ElnoDisassembleFilter.hxx delete mode 100644 src/PIPELINE/VISU_LabelPointsFilter.cxx delete mode 100644 src/PIPELINE/VISU_LabelPointsFilter.hxx delete mode 100644 src/PIPELINE/VISU_MergedPL.cxx delete mode 100644 src/PIPELINE/VISU_MergedPL.hxx delete mode 100755 src/PIPELINE/VISU_OptionalDeformationPL.cxx delete mode 100755 src/PIPELINE/VISU_OptionalDeformationPL.hxx rename src/PIPELINE/{VISU_DeformedShapeAndScalarMapPL.cxx => VISU_ScalarMapOnDeformedShapePL.cxx} (85%) rename src/PIPELINE/{VISU_DeformedShapeAndScalarMapPL.hxx => VISU_ScalarMapOnDeformedShapePL.hxx} (81%) delete mode 100644 src/VISUGUI/VISU_images.ts delete mode 100644 src/VISUGUI/VISU_msg_en.ts delete mode 100644 src/VISUGUI/VisuGUI_FileInfoDlg.cxx delete mode 100644 src/VISUGUI/VisuGUI_FileInfoDlg.h rename src/VISUGUI/{VisuGUI_DeformedShapeAndScalarMapDlg.cxx => VisuGUI_ScalarMapOnDeformedShapeDlg.cxx} (68%) rename src/VISUGUI/{VisuGUI_DeformedShapeAndScalarMapDlg.h => VisuGUI_ScalarMapOnDeformedShapeDlg.h} (78%) delete mode 100644 src/VISUGUI/VisuGUI_Table3dDlg.cxx delete mode 100644 src/VISUGUI/VisuGUI_Table3dDlg.h delete mode 100755 src/VISU_I/VISU_Deformation_i.cc delete mode 100755 src/VISU_I/VISU_Deformation_i.hh delete mode 100644 src/VISU_I/VISU_MonoColorPrs_i.cc delete mode 100644 src/VISU_I/VISU_MonoColorPrs_i.hh delete mode 100755 src/VISU_I/VISU_OptionalDeformation_i.cc delete mode 100755 src/VISU_I/VISU_OptionalDeformation_i.hh delete mode 100644 src/VISU_I/VISU_PointMap3d_i.cc delete mode 100644 src/VISU_I/VISU_PointMap3d_i.hh rename src/VISU_I/{VISU_DeformedShapeAndScalarMap_i.cc => VISU_ScalarMapOnDeformedShape_i.cc} (78%) rename src/VISU_I/{VISU_DeformedShapeAndScalarMap_i.hh => VISU_ScalarMapOnDeformedShape_i.hh} (82%) delete mode 100755 src/VISU_SWIG/visu_pointmap3d.py diff --git a/Makefile.am b/Makefile.am index d0f22977..f594b4d1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -25,15 +25,20 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am +ACLOCAL_AMFLAGS = -I adm_local/unix/config_files \ + -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \ + -I ${GUI_ROOT_DIR}/adm_local/unix/config_files \ + -I ${MED_ROOT_DIR}/adm_local/unix/config_files + SUBDIRS = adm_local idl resources src doc bin DISTCLEANFILES = a.out aclocal.m4 configure -salomeinclude_DATA=VISU_version.h +salomeinclude_DATA = VISU_version.h -EXTRA_DIST+= \ - build_configure \ - clean_configure \ +EXTRA_DIST += \ + build_configure \ + clean_configure \ LICENCE dist-hook: @@ -42,7 +47,7 @@ dist-hook: usr_docs: (cd doc && $(MAKE) $(AM_MAKEFLAGS) usr_docs) -docs:usr_docs +docs: usr_docs dev_docs: (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs) diff --git a/adm_local/Makefile.am b/adm_local/Makefile.am index 76fe0fa5..ed00ea01 100644 --- a/adm_local/Makefile.am +++ b/adm_local/Makefile.am @@ -19,4 +19,4 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am -SUBDIRS= unix \ No newline at end of file +SUBDIRS = unix \ No newline at end of file diff --git a/adm_local/unix/config_files/Makefile.am b/adm_local/unix/config_files/Makefile.am index f4266455..a482e6be 100644 --- a/adm_local/unix/config_files/Makefile.am +++ b/adm_local/unix/config_files/Makefile.am @@ -18,5 +18,5 @@ # include $(top_srcdir)/adm_local/unix/make_common_starter.am -dist_admlocalm4_DATA= \ +dist_admlocalm4_DATA = \ check_VISU.m4 diff --git a/adm_local/unix/make_common_starter.am b/adm_local/unix/make_common_starter.am index d53f5c10..d863afd8 100644 --- a/adm_local/unix/make_common_starter.am +++ b/adm_local/unix/make_common_starter.am @@ -7,48 +7,63 @@ # # Standard directory for installation -salomeincludedir = $(includedir)/@PACKAGE@ -libdir = $(prefix)/lib@LIB_LOCATION_SUFFIX@/@PACKAGE@ -bindir = $(prefix)/bin/@PACKAGE@ +salomeincludedir = $(includedir)/salome +libdir = $(prefix)/lib@LIB_LOCATION_SUFFIX@/salome +bindir = $(prefix)/bin/salome purebindir = $(prefix)/bin salomescriptdir = $(bindir) +salomepythondir = $(pythondir)/salome +salomepyexecdir = $(pyexecdir)/salome # Tests environment folders testsenvirondir = $(prefix)/Tests/environ testsenvironcshdir = $(prefix)/Tests/environ/csh # Directory for installing idl files -salomeidldir = $(prefix)/idl/@PACKAGE@ +salomeidldir = $(prefix)/idl/salome # Directory for installing resource files -salomeresdir = $(prefix)/share/@PACKAGE@/resources/@MODULE_NAME@ +salomeresdir = $(prefix)/share/salome/resources/@MODULE_NAME@ # Directories for installing admin files -admlocaldir = $(prefix)/adm_local -admlocalunixdir = $(admlocaldir)/unix -admlocalm4dir = $(admlocaldir)/unix/config_files +admlocaldir = $(prefix)/adm_local +admlocalunixdir = $(admlocaldir)/unix +admlocalm4dir = $(admlocaldir)/unix/config_files # Shared modules installation directory -sharedpkgpythondir =$(pkgpythondir)/shared_modules +sharedpkgpythondir = $(salomepythondir)/shared_modules # Documentation directory -docdir = $(datadir)/doc/@PACKAGE@ +docdir = $(datadir)/doc/salome # common rules -# moc-files generation +# meta object implementation files generation (moc) %_moc.cxx: %.h $(MOC) $< -o $@ -# qm-files generation +# translation (*.qm) files generation (lrelease) %.qm: %.ts $(LRELEASE) $< -qm $@ -EXTRA_DIST=$(MOC_FILES:%_moc.cxx=%.h) $(nodist_salomeres_DATA:%.qm=%.ts) +# resource files generation (qrcc) +qrc_%.cxx: %.qrc + $(QRCC) $< -o $@ -name $(*F) +# qt forms files generation (uic) +ui_%.h: %.ui + $(UIC) -o $@ $< + +# extra distributed files +EXTRA_DIST = $(MOC_FILES:%_moc.cxx=%.h) $(QRC_FILES:qrc_%.cxx=%.qrc) \ + $(UIC_FILES:ui_%.h=%.ui) $(nodist_salomeres_DATA:%.qm=%.ts) + +# customize clean operation mostlyclean-local: rm -f @builddir@/*_moc.cxx rm -f @builddir@/*.qm + rm -f @builddir@/ui_*.h + rm -f @builddir@/qrc_*.cxx # tests tests: unittest diff --git a/bin/Makefile.am b/bin/Makefile.am index e81b2089..a5f6e4f9 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -18,5 +18,8 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am -nodist_salomescript_DATA= VERSION -EXTRA_DIST+= VERSION.in +# non-distributed files +nodist_salomescript_DATA = VERSION + +# distributed files +dist_salomescript_SCRIPTS = diff --git a/configure.ac b/configure.ac index b5113abc..b21738e3 100644 --- a/configure.ac +++ b/configure.ac @@ -6,7 +6,7 @@ # -AC_INIT([Salome2 Project VISU module], [5.0.0], [webmaster.salome@opencascade.com], [salome]) +AC_INIT([Salome2 Project VISU module], [5.1.0], [webmaster.salome@opencascade.com], [SalomeVISU]) AC_CONFIG_AUX_DIR(salome_adm/unix/config_files) AC_CANONICAL_HOST AC_CANONICAL_TARGET @@ -354,11 +354,11 @@ AC_OUTPUT([ \ ./doc/Makefile \ ./doc/salome/Makefile \ ./doc/salome/gui/Makefile \ + ./doc/salome/gui/VISU/Makefile \ ./doc/salome/gui/VISU/doxyfile \ ./doc/salome/gui/VISU/doxyfile_idl \ ./doc/salome/tui/Makefile \ - ./doc/salome/tui/VISU/doxyfile \ - ./doc/salome/tui/VISU/sources/static/tree.js \ + ./doc/salome/tui/doxyfile \ ./idl/Makefile \ ./resources/VISUCatalog.xml \ ./resources/Makefile \ diff --git a/doc/Makefile.am b/doc/Makefile.am index 68f247f8..cdcfd951 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -17,6 +17,12 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -SUBDIRS= salome +SUBDIRS = salome -EXTRA_DIST= html \ No newline at end of file +usr_docs: + (cd salome && $(MAKE) $(AM_MAKEFLAGS) usr_docs) + +docs: usr_docs + +dev_docs: + (cd salome && $(MAKE) $(AM_MAKEFLAGS) dev_docs) diff --git a/doc/salome/Makefile.am b/doc/salome/Makefile.am index 35fbf228..344600a1 100644 --- a/doc/salome/Makefile.am +++ b/doc/salome/Makefile.am @@ -18,9 +18,9 @@ # # $Header$ -SUBDIRS= tui gui -SUBDIRSTUI= tui -SUBDIRSGUI= gui +SUBDIRS = tui gui +SUBDIRSTUI = tui +SUBDIRSGUI = gui usr_docs: @@SETX@; for d in $(SUBDIRSGUI); do \ diff --git a/doc/salome/gui/Makefile.am b/doc/salome/gui/Makefile.am index 1ec04c7a..abde2b5a 100644 --- a/doc/salome/gui/Makefile.am +++ b/doc/salome/gui/Makefile.am @@ -22,34 +22,9 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am -EXTRA_DIST+=VISU - -doxygen=@DOXYGEN@ +SUBDIRS = VISU usr_docs: - cd ./VISU; \ - echo "Processing VISU_Gen.idl file: "; \ - $(doxygen) ./doxyfile_idl; \ - echo "Running doxygen in directory: "`pwd`; \ - $(doxygen) ./doxyfile; + (cd VISU && $(MAKE) $(AM_MAKEFLAGS) usr_docs) docs: usr_docs - -clean-local: - rm -fr `ls | grep -v "Makefile"` - rm -fr VISU - -install-data-local: usr_docs - mkdir -p $(docdir)/gui - cp -rf VISU $(docdir)/gui - -find $(PWD) -name CVS -prune -exec rm -rf {} \; - -uninstall-local: - rm -rf $(docdir)/gui/VISU - -docguidir=$(docdir)/gui/VISU - -nodist_docgui_DATA= VISU/doxyfile -nodist_docgui_DATA+= VISU/doxyfile_idl -EXTRA_DIST+= VISU/doxyfile.in -EXTRA_DIST+= VISU/doxyfile_idl.in diff --git a/doc/salome/gui/VISU/doxyfile.in b/doc/salome/gui/VISU/doxyfile.in index b8330d48..9aa594fc 100755 --- a/doc/salome/gui/VISU/doxyfile.in +++ b/doc/salome/gui/VISU/doxyfile.in @@ -2,7 +2,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "Post-Pro Module Reference Manual v.@VERSION@" -OUTPUT_DIRECTORY = ./ +OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English TAB_SIZE = 5 @@ -18,13 +18,15 @@ WARNINGS = YES #--------------------------------------------------------------------------- INPUT = @srcdir@/input FILE_PATTERNS = *.doc +EXCLUDE = IMAGE_PATH = @srcdir@/images +EXAMPLE_PATH = #--------------------------------------------------------------------------- #HTML related options #--------------------------------------------------------------------------- GENERATE_HTML = YES -HTML_OUTPUT = ./ +HTML_OUTPUT = . HTML_HEADER = @srcdir@/static/header.html HTML_FOOTER = @srcdir@/static/footer.html #HTML_STYLESHEET = @srcdir@/static/doxygen.css @@ -46,4 +48,4 @@ GENERATE_RTF = NO #--------------------------------------------------------------------------- #External reference options #--------------------------------------------------------------------------- -TAGFILES = visugen_doc.tag=./visugen_doc \ No newline at end of file +TAGFILES = visugen_doc.tag=visugen_doc diff --git a/doc/salome/gui/VISU/doxyfile_idl.in b/doc/salome/gui/VISU/doxyfile_idl.in index 60d89c2d..18af834e 100755 --- a/doc/salome/gui/VISU/doxyfile_idl.in +++ b/doc/salome/gui/VISU/doxyfile_idl.in @@ -2,7 +2,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "Post-Pro Module Reference Manual v.@VERSION@" -OUTPUT_DIRECTORY = ./ +OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO @@ -66,8 +66,8 @@ VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES +QUIET = NO +WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO @@ -86,7 +86,7 @@ RECURSIVE = NO #HTML related options #--------------------------------------------------------------------------- GENERATE_HTML = YES -HTML_OUTPUT = ./visugen_doc +HTML_OUTPUT = visugen_doc HTML_HEADER = @srcdir@/static/header.html HTML_FOOTER = @srcdir@/static/footer.html #HTML_STYLESHEET = @srcdir@/static/doxygen.css @@ -134,4 +134,4 @@ DOT_CLEANUP = YES #--------------------------------------------------------------------------- #External reference options #--------------------------------------------------------------------------- -GENERATE_TAGFILE = visugen_doc.tag +GENERATE_TAGFILE = visugen_doc.tag diff --git a/doc/salome/gui/VISU/images/barproperty.png b/doc/salome/gui/VISU/images/barproperty.png index 6bc74cec101b76e103f39ca67dec2d8ec54ead45..f095a330c1fc8ab1a5033865b01baefc56e4d0bf 100644 GIT binary patch literal 13976 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 Cw_q#) literal 14083 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 diff --git a/doc/salome/gui/VISU/images/exportmedfile.png b/doc/salome/gui/VISU/images/exportmedfile.png deleted file mode 100644 index c2fc56fdec75bf41714a09070e058872c535839f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24416 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 diff --git a/doc/salome/gui/VISU/images/scalarbarproperties.png b/doc/salome/gui/VISU/images/scalarbarproperties.png index b60ed8988ad552a4b04bf063ba75cf34bfa49750..318497db8ae0e169a667995dd014ec206cbee0ce 100644 GIT binary patch literal 38936 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 O2s~Z=T-G@yGywqI9c69+ literal 22218 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 diff --git a/doc/salome/gui/VISU/images/tablesn2.png b/doc/salome/gui/VISU/images/tablesn2.png deleted file mode 100644 index 4b3b85d1d84a8ed85bee146c1ff313235d41ae6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12113 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 Iyk+?R0Y~%nE&u=k diff --git a/doc/salome/gui/VISU/input/a3d_presentations.doc b/doc/salome/gui/VISU/input/a3d_presentations.doc index 852bb5a3..0c944e43 100644 --- a/doc/salome/gui/VISU/input/a3d_presentations.doc +++ b/doc/salome/gui/VISU/input/a3d_presentations.doc @@ -29,6 +29,7 @@

  • \ref segmentation_page
  • \ref recording_in_gauss_viewer_page
  • +
  • \ref values_labeling_page
  • \subpage viewing_3d_presentations_page
    • diff --git a/doc/salome/gui/VISU/input/field_presentations.doc b/doc/salome/gui/VISU/input/field_presentations.doc index a60c43cb..1987b13a 100644 --- a/doc/salome/gui/VISU/input/field_presentations.doc +++ b/doc/salome/gui/VISU/input/field_presentations.doc @@ -26,6 +26,7 @@
    • \ref segmentation_page
    • \ref recording_in_gauss_viewer_page
    +
  • \subpage values_labeling_page
  • */ \ No newline at end of file diff --git a/doc/salome/gui/VISU/input/index.doc b/doc/salome/gui/VISU/input/index.doc index 402f3a69..8ca330b5 100644 --- a/doc/salome/gui/VISU/input/index.doc +++ b/doc/salome/gui/VISU/input/index.doc @@ -35,6 +35,7 @@
  • \ref segmentation_page
  • \ref recording_in_gauss_viewer_page
  • +
  • \ref values_labeling_page
  • \ref viewing_3d_presentations_page
    • diff --git a/doc/salome/gui/VISU/input/scalar_map.doc b/doc/salome/gui/VISU/input/scalar_map.doc index 1f92cc3c..e99ab907 100644 --- a/doc/salome/gui/VISU/input/scalar_map.doc +++ b/doc/salome/gui/VISU/input/scalar_map.doc @@ -91,7 +91,7 @@ orientation of the scalar bar.
    • Origin: you can enter X & Y coordinates of the origin of the scalar bar.
    • Dimensions: you can enter \b Width and \b Height of the -scalar bar.
    • +scalar bar specified in % of the size of view.
    • Text properties button allows you to define from the following dialog box: @@ -110,11 +110,11 @@ following dialog box: \image html barproperty.png
        -
      • Relative \b width and \b height of \b Title (in percents),
      • -
      • Relative \b width and \b height of \b Labels (in percents),
      • -
      • Relative \b width and \b height of \b Bar (in percents),
      • +
      • Relative \b size of \b Title (in percents of the width of scalar bar widget),
      • +
      • Relative \b size of \b Labels (in percents of the width of scalar bar widget),
      • +
      • Relative \b width and \b height of \b Bar (in percents of the width and height of scalar bar widget),
      • Visibility of \b Units in \b Title,
      • -
      • Format of \b Labels.
      • +
      • Precision of \b Labels which specifies the number of characters to be printed, the number of decimal places, or the number of significant digits
    diff --git a/doc/salome/gui/VISU/input/table_3d.doc b/doc/salome/gui/VISU/input/table_3d.doc deleted file mode 100644 index 15a36d2e..00000000 --- a/doc/salome/gui/VISU/input/table_3d.doc +++ /dev/null @@ -1,49 +0,0 @@ -/*! - -\page table_3d_page Table 3D presentation - -\n Table 3D is a 3D graphic presentation of data contained in the table. -The relief and coloring of the resulting -presentation both correspond to the values contained in the table. The values from the first column of the -table define X-axis. The values from the second to the last columns define Z-axis. Y increases with a fixed step starting from Y=0. -To successfully produce a Table 3D presentation, the table should not contain empty fields. - -To create a Table 3D presentation: -\par -– Right-click on an XLS table in the -Object browser and from the context menu choose Show, or Show only - -\image html table.png - -The table will be immediately displayed in the Viewer. - -Choose Edit in the context menu if you wish to change the layout of the presentation. - -\image html table3d.png - -\par -
      -
    • Scale Factor - visualization scaling of all values of the table.
    • -
    • Presentation type:
    • -
        -
      • \b Surface - Plot 3D will be represented with a smooth surface.
      • - -\image html tablesn2.png - -
      • \b Contour - Plot 3D will be represented with a set of contours.
      • - -\image html tablesn1.png - -
      -
    • Number of contours - allows to define the number of -contours (active when Contour presentation type is selected).
    • -
    • Scalar Bar tab allows to define the parameters of the scalar -bar displayed with this presentation (\ref scalar_map_page "see also").
    • -
    - -It is also possible to choose \b Wireframe or \b Shading \b Representation type, change -such properties as \b Opacity and Line Width and Translate presentation from the context menu. - - - -*/ \ No newline at end of file diff --git a/doc/salome/gui/VISU/pics/smds1.png b/doc/salome/gui/VISU/pics/smds1.png index f74008d4577b87ddc1a355c8e1ceacdf886d1df0..24c5feda71d28271be6e63a1388b1b6aaa3cea20 100755 GIT binary patch literal 15132 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 literal 24007 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 T97=!#+7Zktx093;en0*fjd`Cv diff --git a/doc/salome/gui/VISU/visugenidl_doc/VISU__Gen_8idl.html b/doc/salome/gui/VISU/visugenidl_doc/VISU__Gen_8idl.html index 25789b67..5d34130d 100644 --- a/doc/salome/gui/VISU/visugenidl_doc/VISU__Gen_8idl.html +++ b/doc/salome/gui/VISU/visugenidl_doc/VISU__Gen_8idl.html @@ -74,7 +74,7 @@ Include dependency graph for VISU_Gen.idl:

     Deformed shape presentation interface. More...
    interface  VISU.ScalarMapOnDeformedShape - Deformed shape and Scalar Map presentation interface. More...
    + Scalar Map on Deformed shape presentation interface. More...
    interface  VISU.Plot3D  Plot3D interface. More...
    diff --git a/doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMapOnDeformedShape.html b/doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMapOnDeformedShape.html index 79095052..878345b4 100644 --- a/doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMapOnDeformedShape.html +++ b/doc/salome/gui/VISU/visugenidl_doc/interfaceVISU_1_1ScalarMapOnDeformedShape.html @@ -14,7 +14,7 @@ -

    VISU.ScalarMapOnDeformedShape Interface Reference

    Deformed shape and Scalar Map presentation interface. +

    VISU.ScalarMapOnDeformedShape Interface Reference

    Scalar Map on Deformed shape presentation interface. More...

    import "VISU_Gen.idl"; diff --git a/doc/salome/gui/VISU/visugenidl_doc/namespaceVISU.html b/doc/salome/gui/VISU/visugenidl_doc/namespaceVISU.html index 8de0ca8a..9543044b 100644 --- a/doc/salome/gui/VISU/visugenidl_doc/namespaceVISU.html +++ b/doc/salome/gui/VISU/visugenidl_doc/namespaceVISU.html @@ -60,7 +60,7 @@  Deformed shape presentation interface. More...
    interface  ScalarMapOnDeformedShape - Deformed shape and Scalar Map presentation interface. More...
    + Scalar Map on Deformed shape presentation interface. More...
    interface  Plot3D  Plot3D interface. More...
    diff --git a/doc/salome/gui/VISU/whdata/whftdata0.htm b/doc/salome/gui/VISU/whdata/whftdata0.htm index 5acacd5e..eae6a624 100755 --- a/doc/salome/gui/VISU/whdata/whftdata0.htm +++ b/doc/salome/gui/VISU/whdata/whftdata0.htm @@ -49,7 +49,7 @@ aTE("Plot2D Viewer","plot2d_viewer.htm"); aTE("Plot 3D presentation","plot_3d_presentation.htm"); aTE("Primitive Types","primitive_types.htm"); aTE("Scalar Bar","scalar_bar.htm"); -aTE("Deformed Shape and Scalar Map presentation","scalar_map_on_deformed_shape_presentation.htm"); +aTE("Scalar Map on Deformed Shape presentation","scalar_map_on_deformed_shape_presentation.htm"); aTE("Segmentation","segmentation.htm"); aTE("Types of Gauss Points Presentations","types_of_gauss_points_presentations.htm"); aTE("VTK 3D Viewer","vtk_3d_viewer.htm"); diff --git a/doc/salome/gui/VISU/whdata/whtdata0.htm b/doc/salome/gui/VISU/whdata/whtdata0.htm index 67da6bc2..fe3b5c79 100755 --- a/doc/salome/gui/VISU/whdata/whtdata0.htm +++ b/doc/salome/gui/VISU/whdata/whtdata0.htm @@ -24,7 +24,7 @@ aTE(2,0,"Deformed Shape presentation","files/deformed_shape_presentation.htm"); aTE(2,0,"Vectors Presentation","files/vectors_presentation.htm"); aTE(2,0,"Stream Lines presentation","files/stream_lines_presentation.htm"); - aTE(2,0,"Deformed Shape and Scalar Map presentation","scalar_map_on_deformed_shape_presentation.htm"); + aTE(2,0,"Scalar Map on Deformed Shape presentation","scalar_map_on_deformed_shape_presentation.htm"); aTE(2,0,"Plot 3D presentation","plot_3d_presentation.htm"); aTE(2,0,"Animating presentations","files/animating_presentations.htm"); aTE(1,9,"Gauss Points Presentations"); diff --git a/doc/salome/gui/VISU/whgdata/whlstt3.htm b/doc/salome/gui/VISU/whgdata/whlstt3.htm index 56224cc4..d960e94d 100755 --- a/doc/salome/gui/VISU/whgdata/whlstt3.htm +++ b/doc/salome/gui/VISU/whgdata/whlstt3.htm @@ -53,7 +53,7 @@ img {vertial-align:middle;}           Deformed Shape presentation
              Vectors Presentation
              Stream Lines presentation
    -          Deformed Shape and Scalar Map presentation
    +          Scalar Map on Deformed Shape presentation
              Plot 3D presentation
              Animating presentations
              Gauss Points Presentations
    diff --git a/doc/salome/gui/VISU/whgdata/whlstt4.htm b/doc/salome/gui/VISU/whgdata/whlstt4.htm index 49593c24..253afb61 100755 --- a/doc/salome/gui/VISU/whgdata/whlstt4.htm +++ b/doc/salome/gui/VISU/whgdata/whlstt4.htm @@ -53,7 +53,7 @@ img {vertial-align:middle;}           Deformed Shape presentation
              Vectors Presentation
              Stream Lines presentation
    -          Deformed Shape and Scalar Map presentation
    +          Scalar Map on Deformed Shape presentation
              Plot 3D presentation
              Animating presentations
              Gauss Points Presentations
    diff --git a/doc/salome/gui/VISU/whxdata/whftdata0.xml b/doc/salome/gui/VISU/whxdata/whftdata0.xml index 37c3d337..18b3f31d 100755 --- a/doc/salome/gui/VISU/whxdata/whftdata0.xml +++ b/doc/salome/gui/VISU/whxdata/whftdata0.xml @@ -37,7 +37,7 @@ - + diff --git a/doc/salome/gui/VISU/whxdata/whtdata0.xml b/doc/salome/gui/VISU/whxdata/whtdata0.xml index 13b3a715..14a0dff2 100755 --- a/doc/salome/gui/VISU/whxdata/whtdata0.xml +++ b/doc/salome/gui/VISU/whxdata/whtdata0.xml @@ -16,7 +16,7 @@ - + diff --git a/doc/salome/tui/Makefile.am b/doc/salome/tui/Makefile.am index 0f139546..2c7beb8e 100644 --- a/doc/salome/tui/Makefile.am +++ b/doc/salome/tui/Makefile.am @@ -22,36 +22,20 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am -EXTRA_DIST+=VISU +EXTRA_DIST += images static -dev_docs: - cp -fr $(srcdir)/VISU ./INPUT; \ - cp -f ./VISU/doxyfile ./INPUT; \ - cd INPUT; \ - sed 's|../../../share/salome|$(top_srcdir)|' ./doxyfile > ./doxyfile1; \ - sed 's|../../build/salome|$(top_builddir)|' ./doxyfile1 > ./doxyfile2; \ - mv -f doxyfile2 doxyfile1; \ - echo "DOXYGEN SUPPORT PYTHON - @DOXYGEN_WITH_PYTHON@"; \ - if( test "x@DOXYGEN_WITH_PYTHON@" = "xyes"); then \ - sed 's|python_extension_must_be_here|*.py|' ./doxyfile1 > ./doxyfile2; \ - mv -f doxyfile2 doxyfile1; \ - $(DOXYGEN) -u ./doxyfile1; \ - else \ - sed 's|python_extension_must_be_here||' ./doxyfile1 > ./doxyfile2; \ - mv -f doxyfile2 doxyfile1; \ - fi; \ - if( test "x@DOXYGEN_WITH_STL@" = "xyes"); then \ - sed -e 's|BUILTIN_STL_SUPPORT = NO|BUILTIN_STL_SUPPORT = YES|' ./doxyfile1 > ./doxyfile2; \ - mv -f doxyfile2 doxyfile1; \ - fi; \ - mv -f doxyfile1 doxyfile; \ - echo "Running doxygen in directory:"`pwd`; \ - $(DOXYGEN) ./doxyfile; \ - cd ../; \ - cp -fr $(srcdir)/VISU/sources/ VISU ; \ - rm -fr INPUT +dev_docs: doxyfile + echo "Running doxygen in directory: "`pwd`; \ + $(DOXYGEN) $<; -doctuidir=$(docdir)/tui/VISU +clean-local: + -rm -fr VISU doxygen.bak -nodist_doctui_DATA= VISU/doxyfile -EXTRA_DIST+= VISU/doxyfile.in +install-data-local: + if test -d VISU; then \ + $(INSTALL) -d $(DESTDIR)$(docdir)/tui ; \ + cp -rp VISU $(DESTDIR)$(docdir)/tui ; \ + fi; + +uninstall-local: + rm -rf $(DESTDIR)$(docdir)/tui/VISU diff --git a/idl/Makefile.am b/idl/Makefile.am index 538f127b..cddec231 100644 --- a/idl/Makefile.am +++ b/idl/Makefile.am @@ -26,25 +26,23 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am -BASEIDL_FILES= VISU_Gen.idl - -EXTRA_DIST+= $(BASEIDL_FILES) +BASEIDL_FILES = VISU_Gen.idl # This variable defines the files to be installed -salomeidl_DATA = $(BASEIDL_FILES) +dist_salomeidl_DATA = $(BASEIDL_FILES) # VISU idl common library lib_LTLIBRARIES = libSalomeIDLVISU.la # Sources built from idl files -nodist_libSalomeIDLVISU_la_SOURCES= VISU_GenSK.cc +nodist_libSalomeIDLVISU_la_SOURCES = VISU_GenSK.cc # header files must be exported: other modules have to use this library -nodist_salomeinclude_HEADERS= $(BASEIDL_FILES:%.idl=%.hh) +nodist_salomeinclude_HEADERS = $(BASEIDL_FILES:%.idl=%.hh) -libSalomeIDLVISU_la_CPPFLAGS =\ - -I$(top_builddir)/salome_adm/unix \ - -I$(top_builddir)/idl \ +libSalomeIDLVISU_la_CPPFLAGS = \ + -I$(top_builddir)/salome_adm/unix \ + -I$(top_builddir)/idl \ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @KERNEL_CXXFLAGS@ @MED_CXXFLAGS@ libSalomeIDLVISU_la_LDFLAGS = -no-undefined -version-info=0:0:0 libSalomeIDLVISU_la_LIBADD = @CORBA_LIBS@ $(MED_LDFLAGS) -lSalomeIDLMED @@ -64,14 +62,14 @@ SUFFIXES = .idl .hh SK.cc $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%) - $(INSTALL) -d $(pkgpythondir) + $(INSTALL) -d $(DESTDIR)$(salomepythondir) ls $^ | while read file; do \ - $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(pkgpythondir) $$file ; \ + $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(DESTDIR)$(salomepythondir) $$file ; \ done # uninstall-local removes too much, but it works in distcheck uninstall-local: - rm -rf $(pkgpythondir)/* + rm -rf $(DESTDIR)$(salomepythondir)/* mostlyclean-local: clean-idls diff --git a/idl/VISU_Gen.idl b/idl/VISU_Gen.idl index a0484262..a6357f39 100644 --- a/idl/VISU_Gen.idl +++ b/idl/VISU_Gen.idl @@ -106,6 +106,18 @@ module VISU { TALL }; + /* Clipping planes management */ + struct ClippingPlane { + double X; + double Y; + double Z; + double dX; + double dY; + double dZ; + boolean isAuto; + string name; + }; + interface Base { /*! * Returns ID of the object. @@ -295,6 +307,7 @@ module VISU { SHADED, INSIDEFRAME, SURFACEFRAME, + FEATURE_EDGES, SHRINK }; @@ -349,6 +362,17 @@ module VISU { * \return The type of representation of the mesh. */ PresentationType GetPresentationType(); + + /*! + * Switches shrink mode of presentation + * Note: SetPresentationType(SHRINK) is same as SetShrink(True) + */ + void SetShrink(in boolean toShrink); + + /*! + * Returns current state of shrink mode + */ + boolean IsShrank(); }; @@ -508,6 +532,32 @@ module VISU { */ long GetScalarMode(); + /*! + * Set the visibility of a distribution curve. + * \param theIs is used to switch on/off the visibility of a distribution curve. + */ + void SetIsDistributionVisible(in boolean theIs); + + //! Gets current visibility of a distribution curve + boolean GetIsDistributionVisible(); + + //! Gets current filtering by scalars mode + boolean IsScalarFilterUsed(); + + void UseScalarFiltering( in boolean theUseScalarFilter ); + + /*! + * Sets scalar range - min and max boundaries of the scalar bar. + * \param theMin Min boundary of the scalar bar. + * \param theMax Max boundary of the scalar bar. + * \param theIsFilter if true then filter by scalars. + */ + void SetScalarFilterRange( in double theMin, in double theMax ); + + double GetScalarFilterMin(); + + double GetScalarFilterMax(); + /*! * Add group as geometry of presentation. * \param theMeshName - mesh name @@ -672,6 +722,16 @@ module VISU { interface ScalarMap : ColoredPrs3d, ScaledPrs3d { + /*! + * Returns visibility state of scalar bar + */ + boolean IsBarVisible(); + + /*! + * Sets visibility state of scalar bar + */ + void SetBarVisible(in boolean theVisible); + }; //------------------------------------------------------- @@ -2209,6 +2269,37 @@ module VISU { * Get or create %ColoredPrs3dCache object. */ ColoredPrs3dCache GetColoredPrs3dCache(in SALOMEDS::Study theStudy); + + + /* Clipping planes management */ + + /*Create a clipping plane and return its ID (position in corresponded array) + Id of clipping plane could be changed after deletion of other clipping plane + */ + long CreateClippingPlane(in double X, in double Y, in double Z, + in double dX, in double dY, in double dZ, + in boolean auto, in string name); + + void EditClippingPlane(in long id, in double X, in double Y, in double Z, + in double dX, in double dY, in double dZ, + in boolean auto, in string name); + + /* Returns clipping plane by its Id */ + ClippingPlane GetClippingPlane(in long id); + + /* Deletes clipping plane by its Id */ + boolean DeleteClippingPlane(in long id); + + /* Applyes a clipping plane with Id to presentation thePrs */ + boolean ApplyClippingPlane(in Prs3d thePrs, in long id); + + /* Detaches a clipping plane with Id from presentation thePrs */ + boolean DetachClippingPlane(in Prs3d thePrs, in long id); + + + /* Get number of clipping planes */ + long GetClippingPlanesNb(); + }; /*! \brief %View interface @@ -2217,8 +2308,8 @@ module VISU { * the following types: 3d, Table, XY plot. * %View interface is a base for all types of %view interfaces. */ - interface View: Base { - + interface View: Base, SALOME::GenericObj + { /*! \brief %ViewRepresentation enumeration * * displaying part ("ALL" isn't setable) @@ -2741,6 +2832,8 @@ module VISU { */ void Destroy(in View theView); }; + + }; #endif diff --git a/resources/Makefile.am b/resources/Makefile.am index 148851d3..db62fb16 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -27,14 +27,18 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am # =============================================================== # -dist_salomeres_DATA= \ +dist_salomeres_DATA = \ ModuleVisu.png \ SalomeApp.xml \ sprite_alpha.bmp \ sprite_texture.bmp \ Vertex_Program_ARB.txt \ +Visu_actor_selection.png \ Visu_add.png \ +Visu_apply.png \ Visu_anim.png \ +Visu_cell_selection.png \ +Visu_close.png \ VISU.config \ Visu_cutlines.png \ Visu_cutplanes.png \ @@ -43,14 +47,18 @@ Visu_deformed.png \ VISU_en.xml \ Visu_eraseall.png \ VISU_fr.xml \ +Visu_gauss_point_selection.png \ Visu_gauss_points.png \ Visu_graduated_axes.png \ +Visu_help.png \ Visu_import_med.png \ Visu_isosurfaces.png \ Visu_load_texture.png \ +Visu_ok.png \ Visu_PlaneSegmentation.png \ Visu_plot2d.png \ Visu_plot3d.png \ +Visu_point_selection.png \ Visu_points.png \ Visu_recording_pause.png \ Visu_recording_play.png \ @@ -63,6 +71,9 @@ Visu_scalars_anim.png \ Visu_scalars.png \ Visu_scaling.png \ Visu_selectall.png \ +Visu_selection_panel.png \ +Visu_slider_panel.png \ +Visu_sweep_panel.png \ Visu_selectionactor.png \ Visu_selectioncell.png \ Visu_selectionedge.png \ @@ -110,7 +121,10 @@ Visu_slider_previous.png \ Visu_slider_play.png \ Visu_slider_pause.png \ Visu_slider_next.png \ -Visu_slider_last.png +Visu_holo_render.png \ +Visu_slider_last.png \ +Visu_DeactivatePlane.png \ +Visu_planemanager.png -EXTRA_DIST+= VISUCatalog.xml.in -nodist_salomeres_DATA=VISUCatalog.xml +# VSR: little trick to avoid putting if VISUCatalog.xml to the distribution archive +nodist_salomeres_SCRIPTS = VISUCatalog.xml diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml index dfd869d5..af06b9dd 100644 --- a/resources/SalomeApp.xml +++ b/resources/SalomeApp.xml @@ -27,31 +27,41 @@ - - - + + + + + + + + + - - - - + + - - + + + + + + + + - + - - + + - + @@ -119,8 +129,10 @@ + - + + @@ -135,6 +147,8 @@ + +

    diff --git a/resources/Visu_cutplane.png b/resources/Visu_cutplane.png new file mode 100644 index 0000000000000000000000000000000000000000..5e92cf6511bf81e7ce3a9acbbb2fbb07ab2d7979 GIT binary patch literal 389 zcmV;00eb$4P)I95{Iz+_^bb*Q$vH}Yr*@sBvmLBL!?Po(c z)R)Mg-~0Y&EGh>6bv@iXtqO4y>~TtV_&$uq&9Y&Nl_#tiZ0i9CT_ALUX4x?JyNr2n z6P61j8Gt`|RXcZqNN!L9ab$+}hEHq1io~C7!$x>m|tf!4-<6dOXHzpLB z2ol+muL`d==xKiUE(Eq8+p=)H>LO%57s^az#u#c-=My@YCQ3lY zl+4a7W@gl*lw=bDB6Cj;JF|bnuyE`?cViJ;{u!D%7ZMiBnwO>;h5N64QgkniWgw3- jPyy7Y9*gc}u?*k`Ui`0HGf01Z00000NkvXXu0mjfBypsi literal 0 HcmV?d00001 diff --git a/src/CONVERTOR/Makefile.am b/src/CONVERTOR/Makefile.am index 3953664f..b6ddf017 100644 --- a/src/CONVERTOR/Makefile.am +++ b/src/CONVERTOR/Makefile.am @@ -41,6 +41,7 @@ salomeinclude_HEADERS= \ VISU_Convertor_impl.hxx \ VISU_ConvertorUtils.hxx \ VISU_MergeFilter.hxx \ + VISU_MergeFilterUtilities.hxx \ VISU_AppendFilter.hxx \ VISU_AppendPolyData.hxx \ VISU_AppendFilterUtilities.hxx \ @@ -48,6 +49,7 @@ salomeinclude_HEADERS= \ VISU_UsedPointsFilter.hxx \ VISU_CommonCellsFilter.hxx \ VISUConvertor.hxx \ + VISU_MedConvertor.hxx \ VISU_GaussMergeFilter.hxx \ VISU_TableReader.hxx diff --git a/src/CONVERTOR/VISU_Convertor_impl.cxx b/src/CONVERTOR/VISU_Convertor_impl.cxx index e35b3626..53911e28 100644 --- a/src/CONVERTOR/VISU_Convertor_impl.cxx +++ b/src/CONVERTOR/VISU_Convertor_impl.cxx @@ -353,11 +353,18 @@ namespace const VISU::PMeshOnEntityImpl& theMeshOnEntity, const VISU::PProfileImpl& theProfile) { + // rnv fix for issue 19999: + // Throw exception in case if mesh on entity from profile is not equal + // input mesh on entity. This exception catch in tne VISU_Convertor_impl::GetTimeStampOnMesh + // function. + if(theProfile->myMeshOnEntity && theProfile->myMeshOnEntity != theMeshOnEntity.get()) + EXCEPTION(std::runtime_error,"GetMeshOnProfile >> theProfile->myMeshOnEntity != theMeshOnEntity.get()"); + if(theProfile->myIsVTKDone) return true; - if(theProfile->myMeshOnEntity && theProfile->myMeshOnEntity != theMeshOnEntity.get()) - return false; + // if(theProfile->myMeshOnEntity && theProfile->myMeshOnEntity != theMeshOnEntity.get()) + // return false; VISU::TTimerLog aTimerLog(MYDEBUG,"GetMeshOnProfile"); INITMSG(MYDEBUG,"GetMeshOnProfile - anEntity = "<myEntity< - - -/*! - \file VISU_ElnoMeshValue.hxx - \brief The file contains declarations for the acess to the specific ELNO MED data -*/ - -namespace VISU -{ - //--------------------------------------------------------------- - template< int elno_type > - struct TGetElnoNodeData - { - typedef typename TL::TEnum2VTKArrayType< elno_type >::TResult TVTKDataArray; - typedef typename TL::TEnum2VTKBasicType< elno_type >::TResult TDataType; - TVTKDataArray *myElnoDataArray; - vtkIntArray *myElnoDataMapper; - int myElemInfo[3]; - - - //---------------------------------------------------------------------------- - TGetElnoNodeData( vtkDataArray *theElnoDataArray, - vtkDataArray *theElnoDataMapper ) - : myElnoDataArray( TVTKDataArray::SafeDownCast( theElnoDataArray ) ) - , myElnoDataMapper( vtkIntArray::SafeDownCast( theElnoDataMapper ) ) - {} - - - //---------------------------------------------------------------------------- - TDataType* - operator () ( vtkIdType theCellId, vtkIdType theLocalPntId ) - { - myElnoDataMapper->GetTupleValue( theCellId, myElemInfo ); - - vtkIdType aPos = myElemInfo[ 0 ] + theLocalPntId * myElemInfo[ 1 ]; - - return myElnoDataArray->GetPointer( aPos ); - } - - - //---------------------------------------------------------------------------- - int - getNbComp() - { - myElnoDataMapper->GetTupleValue( 0, myElemInfo ); - - return myElemInfo[ 1 ]; - } - }; - - - //---------------------------------------------------------------------------------------------- - template< int elno_type > - struct TSetElnoNodeData - { - typedef typename TL::TEnum2VTKArrayType< elno_type >::TResult TVTKDataArray; - typedef typename TL::TEnum2VTKBasicType< elno_type >::TResult TDataType; - - //---------------------------------------------------------------------------------------------- - TSetElnoNodeData( vtkIdType theEffectNbComp, - vtkIdType theRealNbComp, - vtkIdType theNbTuples, - const char* theDataArrayName, - const char* theMapperArrayName ) - : myElnoDataArray( TVTKDataArray::New() ) - , myElnoDataMapper( vtkIntArray::New() ) - { - myElnoDataArray->SetNumberOfComponents( theEffectNbComp ); - myElnoDataArray->SetNumberOfTuples( theNbTuples ); - myElnoDataArray->SetName( theDataArrayName ); - - myElnoDataMapper->SetNumberOfComponents( 3 ); - myElnoDataMapper->Allocate( theNbTuples * 3 ); - myElnoDataMapper->SetName( theMapperArrayName ); - - myElemInfo[ 0 ] = 0; - myElemInfo[ 1 ] = theRealNbComp; - myElemInfo[ 2 ] = 0; - } - - - //---------------------------------------------------------------------------------------------- - ~TSetElnoNodeData() - { - myElnoDataArray->Delete(); - myElnoDataMapper->Delete(); - } - - - //---------------------------------------------------------------------------------------------- - int - AddNextPointData( TDataType* theDataPtr ) - { - vtkIdType aPos = myElemInfo[ 0 ] + myElemInfo[ 2 ] * myElemInfo[ 1 ]; - - TDataType* aDataPtr = myElnoDataArray->GetPointer( aPos ); - - for ( vtkIdType aCompId = 0; aCompId < myElemInfo[ 1 ]; aCompId++ ) - *aDataPtr++ = *theDataPtr++; - - return myElemInfo[ 2 ]++; - } - - - //---------------------------------------------------------------------------------------------- - void - InsertNextCellData() - { - myElnoDataMapper->InsertNextTupleValue( myElemInfo ); - myElemInfo[ 0 ] += myElemInfo[ 2 ] * myElemInfo[ 1 ]; - myElemInfo[ 2 ] = 0; - } - - - //---------------------------------------------------------------------------------------------- - void - AddData( vtkDataSetAttributes* theDataSetAttributes ) - { - theDataSetAttributes->AddArray( myElnoDataArray ); - theDataSetAttributes->AddArray( myElnoDataMapper ); - } - - protected: - TVTKDataArray *myElnoDataArray; - vtkIntArray *myElnoDataMapper; - int myElemInfo[ 3 ]; - }; - - - //--------------------------------------------------------------- -} - -#endif diff --git a/src/CONVERTOR/VISU_TableReader.cxx b/src/CONVERTOR/VISU_TableReader.cxx deleted file mode 100644 index 33676e26..00000000 --- a/src/CONVERTOR/VISU_TableReader.cxx +++ /dev/null @@ -1,401 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File: -// Author: -// Module : VISU - -#include "VISU_TableReader.hxx" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - - -//--------------------------------------------------------------- -int -VISU::TTable2D -::Check() -{ - if ( myRows.empty() ) - return 0; - - int iEnd = myRows[0].myValues.size(); - if ( iEnd == 0 ) - return 0; - - if ( myColumnTitles.size() != iEnd ) - myColumnTitles.resize( iEnd ); - - if ( myColumnUnits.size() != iEnd ) - myColumnUnits.resize( iEnd ); - - int jEnd = myRows.size(); - for ( int j = 0; j < jEnd; j++ ) - if ( myRows[j].myValues.size() != iEnd ) - return 0; - - return 1; -} - - -//--------------------------------------------------------------- -void -VISU::TTable2D -::getColumns(VISU::TTable2D& theTable2D) const -{ - TRows& aRows = theTable2D.myRows; - aRows.clear(); - if ( myRows.empty() ) - return; - - int jEnd = myRows.size(); - - //Define Titles & Units - theTable2D.myColumnTitles.resize(jEnd); - theTable2D.myColumnUnits.resize(jEnd); - for ( int j = 0; j < jEnd; j++ ) { - theTable2D.myColumnTitles[j] = myRows[j].myTitle; - theTable2D.myColumnUnits[j] = myRows[j].myUnit; - } - - //Define Rows - int iEnd = myRows[0].myValues.size(); - for ( int i = 0; i < iEnd; i++ ) { - TRow aNewRow; - aNewRow.myTitle = myColumnTitles[i]; - aNewRow.myUnit = myColumnUnits[i]; - aNewRow.myValues.resize(jEnd); - for ( int j = 0; j < jEnd; j++ ) { - aNewRow.myValues[j] = myRows[j].myValues[i]; - } - aRows.push_back(aNewRow); - } -} - - -//--------------------------------------------------------------- -namespace -{ - int getLine( std::ifstream& theStmIn, QString& theString ) - { - char tmp; - std::ostrstream aStrOut; - - while ( theStmIn.get( tmp ) ) { - aStrOut<= 0 ) { - data = aTmp.left( index ).trimmed(); - cmt = aTmp.mid( index+1 ).trimmed(); - } - // if comment is not empty, try to get keyword from it (separated by ':' symbol) - if ( !cmt.isEmpty() ) { - int index1 = cmt.indexOf( ":" ); - if ( index1 >= 0 ) { - QString tmpstr = cmt.left( index1 ).trimmed(); - if ( tmpstr == QString( "TITLE" ) || - tmpstr == QString( "COLUMN_TITLES" ) || - tmpstr == QString( "COLUMN_UNITS" ) || - tmpstr == QString( "COMMENT" ) ) { - keyword = tmpstr; - cmt = cmt.mid( index1+1 ).trimmed(); - } - } - } - // if data is empty, process only comment - if ( data.isEmpty() ) { - // if keyword is found, try to process it - // elsewise it is a simple comment, just ignore it - if ( !keyword.isEmpty() ) { - if ( keyword == QString( "TITLE" ) ) { - QString title = cmt; - if ( aTable2D.myTitle != "" ) - title = QString( aTable2D.myTitle.c_str() ) + QString( " " ) + title; - if(MYDEBUG) std::cout << "...Table TITLE is: " << title.toLatin1().constData() << std::endl; - aTable2D.myTitle = title.toLatin1().constData(); - } - else if ( keyword == QString( "COLUMN_TITLES" ) ) { - // comment may contain column headers - QStringList aStrList = cmt.split( "|", QString::SkipEmptyParts ); - if(MYDEBUG) std::cout << "...Column TITLES are: "; - for ( int i = 0; i < aStrList.count(); i++ ) { - QString tmpstr = aStrList[ i ].trimmed(); - if(MYDEBUG) std::cout << tmpstr.toLatin1().constData() << " "; - aTable2D.myColumnTitles.push_back( tmpstr.toLatin1().constData() ); - } - if(MYDEBUG) std::cout << std::endl; - } - else if ( keyword == QString( "COLUMN_UNITS" ) ) { - // comment may contain column units - QStringList aStrList = cmt.split( " ", QString::SkipEmptyParts ); - if(MYDEBUG) std::cout << "...Column UNITS are: "; - for ( int i = 0; i < aStrList.count(); i++ ) { - QString tmpstr = aStrList[ i ].trimmed(); - if(MYDEBUG) std::cout << tmpstr.toLatin1().constData() << " "; - aTable2D.myColumnUnits.push_back( tmpstr.toLatin1().constData() ); - } - if(MYDEBUG) std::cout << std::endl; - } - else if ( keyword == QString( "COMMENT" ) ) { - // keyword 'COMMENT' processing can be here - // currently it is ignored - if(MYDEBUG) std::cout << "...COMMENT: " << cmt.toLatin1().constData() << std::endl; - } - } - else { - if(MYDEBUG) std::cout << "...comment: " << cmt.toLatin1().constData() << std::endl; - // simple comment processing can be here - // currently it is ignored - } - } - // if data is not empty, try to process it - else { - TTable2D::TRow aRow; - if(MYDEBUG) std::cout << "...New row is found: " << std::endl; - if ( !cmt.isEmpty() ) { - aRow.myTitle = cmt.toLatin1().constData(); - if(MYDEBUG) std::cout << "......ROW TITLE is: " << cmt.toLatin1().constData() << std::endl; - } - QString datar1 = data.replace(QRegExp("\t"), " "); - QStringList aValList = datar1.split( " ", QString::SkipEmptyParts ); - for ( int i = 0; i < aValList.count(); i++ ) { - if ( aValList[i].trimmed() != "" ) { - TTable2D::TValue aVal = aValList[i].trimmed().toLatin1().constData(); - aRow.myValues.push_back( aVal ); - } - } - if( aRow.myValues.size() > 0 ) - aTable2D.myRows.push_back( aRow ); - // ************** OLD CODE ****************** - /* - TValue aVal; - istrstream aStream( data ); - aStream.precision( STRPRECISION ); - while( aStream >> aVal ) { - aRow.myValues.push_back( aVal ); - } - if( aRow.myValues.size() > 0 ) - aTable2D.myRows.push_back( aRow ); - */ - // ************** OLD CODE ****************** - } - ::getLine( aStmIn, aTmp ); - } - if( aTable2D.Check() ) { - if(MYDEBUG) std::cout << "aTable2D is checked OK " << aTable2D.myTitle << std::endl; - theContainer.push_back( aTableIDMapper ); - } - } while ( !aStmIn.eof() ); - aStmIn.close(); - - if(MYDEBUG) std::cout << "After close" << std::endl; -} - - -//--------------------------------------------------------------- -VISU::TTableIDMapper -::TTableIDMapper(): - myOutput( vtkPolyData::New() ), - myXAxisPosition( -1 ) -{} - -VISU::TTableIDMapper -::~TTableIDMapper() -{ - myOutput->Delete(); -} - -vtkPolyData* -VISU::TTableIDMapper -::GetPolyDataOutput() -{ - if ( myXAxisPosition == -1 ) - SetXAxisPosition( 0 ); - - return myOutput; -} - -long unsigned int -VISU::TTableIDMapper -::GetMemorySize() -{ - return myOutput->GetActualMemorySize() * 1024; -} - -void -VISU::TTableIDMapper -::SetXAxisPosition( vtkIdType theAxisPosition ) -{ - if ( myXAxisPosition == theAxisPosition || !Check() ) - return; - - myOutput->Initialize(); - - if ( !Check() ) - return; - - TTable2D aTable2D; - getColumns( aTable2D ); - - vtkIdType aXSize = aTable2D.myRows[0].myValues.size(); - - // It is necessary to decrease the size at 1 take intoa account X axis - vtkIdType anYSize = aTable2D.myRows.size() - 1; - - vtkIdType aNbPoints = aXSize * anYSize; - - std::vector anXAxis(aXSize); - const TTable2D::TValues& aValues = aTable2D.myRows[theAxisPosition].myValues; - for ( vtkIdType aX = 0; aX < aXSize; aX++ ) - anXAxis[aX] = atof( aValues[aX].c_str() ); - - double aXRange = anXAxis[aXSize - 1] - anXAxis[0]; - double anYDelta = aXRange / anYSize; - std::vector anYAxis(anYSize); - for ( vtkIdType anY = 0; anY < anYSize; anY++ ) - anYAxis[anY] = anY * anYDelta; - - vtkPoints* aPoints = vtkPoints::New(); - aPoints->SetNumberOfPoints( aNbPoints ); - - vtkIntArray *aPointsIDMapper = vtkIntArray::New(); - aPointsIDMapper->SetName("VISU_POINTS_MAPPER"); - aPointsIDMapper->SetNumberOfComponents(2); - aPointsIDMapper->SetNumberOfTuples(aNbPoints); - int *aPointsIDMapperPtr = aPointsIDMapper->GetPointer(0); - - //vtkIntArray *aCellIDMapper = vtkIntArray::New(); - //aCellIDMapper->SetName("VISU_POINTS_MAPPER"); - //aCellIDMapper->SetNumberOfComponents(2); - //aCellIDMapper->SetNumberOfTuples(aNbPoints); - //int *aCellIDMapperPtr = aCellIDMapper->GetPointer(0); - - for ( vtkIdType aY = 0, aPntId = 0; aY < anYSize; aY++ ) { - for ( vtkIdType aX = 0; aX < aXSize; aX++, aPntId++ ) { - aPoints->SetPoint( aPntId, anXAxis[aX], anYAxis[aY], 0.0 ); - - *aPointsIDMapperPtr++ = aPntId; - *aPointsIDMapperPtr++ = 0; - - //*aCellIDMapperPtr++ = aPntId; - //*aCellIDMapperPtr++ = 0; - } - } - - std::vector anYData; - for ( vtkIdType anY = 0; anY < anYSize + 1; anY++ ) { - if ( anY == theAxisPosition ) - continue; - anYData.push_back( aTable2D.myRows[anY].myValues ); - } - - vtkDoubleArray* aScalars = vtkDoubleArray::New(); - aScalars->SetNumberOfComponents( 1 ); - aScalars->SetNumberOfTuples( aNbPoints ); - double *aScalarsPtr = aScalars->GetPointer(0); - for ( vtkIdType anY = 0; anY < anYSize; anY++ ) { - const TTable2D::TValues& aValues = anYData[anY]; - for ( vtkIdType aX = 0; aX < aXSize; aX++ ) { - double aValue = atof( aValues[aX].c_str() ); - *aScalarsPtr++ = aValue; - } - } - - vtkStructuredGrid* aStructuredGrid = vtkStructuredGrid::New(); - aStructuredGrid->SetPoints( aPoints ); - aPoints->Delete(); - - aStructuredGrid->SetDimensions( aXSize, anYSize, 1 ); - - aStructuredGrid->GetPointData()->AddArray( aPointsIDMapper ); - aPointsIDMapper->Delete(); - - //aStructuredGrid->GetCellData()->AddArray( aCellIDMapper ); - //aCellIDMapper->Delete(); - - aStructuredGrid->GetPointData()->SetScalars( aScalars ); - aScalars->Delete(); - - vtkStructuredGridGeometryFilter* aFilter = vtkStructuredGridGeometryFilter::New(); - aFilter->SetInput( aStructuredGrid ); - aFilter->Update(); - myOutput->ShallowCopy( aFilter->GetOutput() ); - aFilter->Delete(); -} diff --git a/src/CONVERTOR/VISU_TableReader.hxx b/src/CONVERTOR/VISU_TableReader.hxx deleted file mode 100644 index 17082a31..00000000 --- a/src/CONVERTOR/VISU_TableReader.hxx +++ /dev/null @@ -1,111 +0,0 @@ -// VISU CONVERTOR : -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_TableReader.hxx -// Author : Alexey PETROV -// Module : VISU - -#ifndef VISU_TableReader_HeaderFile -#define VISU_TableReader_HeaderFile - -/*! - \file VISU_TableReader.hxx - \brief The file contains definition of the Table reading functionlity -*/ - -#include "VISUConvertor.hxx" - -#include "VISU_IDMapper.hxx" - -#include -#include - -namespace VISU -{ - //--------------------------------------------------------------- - struct VISU_CONVERTOR_EXPORT TTable2D - { - typedef std::string TValue; - typedef std::vector TValues; - - struct TRow - { - std::string myTitle; - std::string myUnit; - TValues myValues; - }; - - std::string myTitle; - std::vector myColumnUnits; - std::vector myColumnTitles; - - typedef std::vector TRows; - TRows myRows; - - int - Check(); - - void - getColumns( TTable2D& theTable2D ) const; - }; - - - //--------------------------------------------------------------- - class VISU_CONVERTOR_EXPORT TTableIDMapper: - public virtual TPolyDataIDMapper, - public virtual TTable2D - { - public: - TTableIDMapper(); - ~TTableIDMapper(); - - virtual - vtkPolyData* - GetPolyDataOutput(); - - virtual - long unsigned int - GetMemorySize(); - - void - SetXAxisPosition( vtkIdType theAxisPosition ); - - vtkIdType - GetXAxisPosition(); - - protected: - vtkIdType myXAxisPosition; - vtkPolyData* myOutput; - }; - typedef MED::SharedPtr PTableIDMapper; - - - //--------------------------------------------------------------- - typedef std::vector TTableContainer; - VISU_CONVERTOR_EXPORT - void ImportTables( const char* theFileName, TTableContainer& theContainer ); - - - //--------------------------------------------------------------- -} - -#endif diff --git a/src/CONVERTOR/VISU_VTKTypeList.hxx b/src/CONVERTOR/VISU_VTKTypeList.hxx deleted file mode 100644 index f210f652..00000000 --- a/src/CONVERTOR/VISU_VTKTypeList.hxx +++ /dev/null @@ -1,120 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_VTKTypeList.hxx -// Author : Oleg UVAROV -// Module : VISU - -#ifndef VISU_VTKTypeList_HeaderFile -#define VISU_VTKTypeList_HeaderFile - -#include "VISU_TypeList.hxx" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -//---------------------------------------------------------------------------- -namespace VISU -{ - //---------------------------------------------------------------------------- - namespace TL - { - //---------------------------------------------------------------------------- - typedef TSequence< char, - unsigned char, - short, - unsigned short, - int, - unsigned int, - long, - unsigned long, - float, - double >::TResult TVTKBasicTypeList; - - - //---------------------------------------------------------------------------- - typedef TSequence< vtkCharArray, - vtkUnsignedCharArray, - vtkShortArray, - vtkUnsignedShortArray, - vtkIntArray, - vtkUnsignedIntArray, - vtkLongArray, - vtkUnsignedLongArray, - vtkFloatArray, - vtkDoubleArray >::TResult TVTKArrayTypeList; - - - //---------------------------------------------------------------------------- - typedef TSequence< TInt2Type< VTK_CHAR >, - TInt2Type< VTK_UNSIGNED_CHAR >, - TInt2Type< VTK_SHORT >, - TInt2Type< VTK_UNSIGNED_SHORT >, - TInt2Type< VTK_INT >, - TInt2Type< VTK_UNSIGNED_INT >, - TInt2Type< VTK_LONG >, - TInt2Type< VTK_UNSIGNED_LONG >, - TInt2Type< VTK_FLOAT >, - TInt2Type< VTK_DOUBLE > >::TResult TVTKBasicEnumList; - - - //---------------------------------------------------------------------------- - template< unsigned int type_enum > - struct TEnum2VTKBasicType - { - typedef typename TTypeAt< TVTKBasicTypeList, TIndexOf< TVTKBasicEnumList, TInt2Type< type_enum > >::value >::TResult TResult; - }; - - - //---------------------------------------------------------------------------- - template< unsigned int type_enum > - struct TEnum2VTKArrayType - { - typedef typename TTypeAt< TVTKArrayTypeList, TIndexOf< TVTKBasicEnumList, TInt2Type< type_enum > >::value >::TResult TResult; - }; - - - //---------------------------------------------------------------------------- - template< class T > - struct TVTKBasicType2Enum - { - typedef typename TTypeAt< TVTKBasicEnumList, TIndexOf< TVTKBasicTypeList, T >::value >::TResult TResult; - }; - - - //---------------------------------------------------------------------------- - } - - - //---------------------------------------------------------------------------- -} - -#endif diff --git a/src/ENGINE/Makefile.am b/src/ENGINE/Makefile.am index 452ba6fe..52f9ad77 100644 --- a/src/ENGINE/Makefile.am +++ b/src/ENGINE/Makefile.am @@ -25,6 +25,9 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am lib_LTLIBRARIES= libVISUEngine.la + +salomeinclude_HEADERS= VISU_Engine_i.hh + dist_libVISUEngine_la_SOURCES= VISU_Engine_i.cc libVISUEngine_la_CPPFLAGS= $(KERNEL_CXXFLAGS) $(MED_CXXFLAGS) $(CORBA_CXXFLAGS) $(CORBA_INCLUDES) \ diff --git a/src/ENGINE/VISU_Engine_i.cc b/src/ENGINE/VISU_Engine_i.cc index d857f644..2187cce8 100644 --- a/src/ENGINE/VISU_Engine_i.cc +++ b/src/ENGINE/VISU_Engine_i.cc @@ -470,4 +470,50 @@ namespace VISU{ { return myVisuGen->GetColoredPrs3dCache(theStudy); } + + + + CORBA::Long VISU_Gen_i::CreateClippingPlane(CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name) + { + return myVisuGen->CreateClippingPlane(X, Y, Z, dX, dY, dZ, isAuto, name); + } + + + void VISU_Gen_i::EditClippingPlane(CORBA::Long id, CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name) + { + myVisuGen->EditClippingPlane(id, X, Y, Z, dX, dY, dZ, isAuto, name); + } + + /* Returns clipping plane by its Id */ + VISU::ClippingPlane* VISU_Gen_i::GetClippingPlane(CORBA::Long id) + { + return myVisuGen->GetClippingPlane(id); + } + + /* Deletes clipping plane by its Id */ + CORBA::Boolean VISU_Gen_i::DeleteClippingPlane(CORBA::Long id) + { + return myVisuGen->DeleteClippingPlane(id); + } + + /* Applyes a clipping plane with Id to presentation thePrs */ + CORBA::Boolean VISU_Gen_i::ApplyClippingPlane(Prs3d_ptr thePrs, CORBA::Long id) + { + return myVisuGen->ApplyClippingPlane(thePrs, id); + } + + CORBA::Boolean VISU_Gen_i::DetachClippingPlane(Prs3d_ptr thePrs, CORBA::Long id) + { + return myVisuGen->DetachClippingPlane(thePrs, id); + } + + /* Get number of clipping planes */ + CORBA::Long VISU_Gen_i::GetClippingPlanesNb() + { + return myVisuGen->GetClippingPlanesNb(); + } }; diff --git a/src/ENGINE/VISU_Engine_i.hh b/src/ENGINE/VISU_Engine_i.hh index 247a1074..df49fb25 100644 --- a/src/ENGINE/VISU_Engine_i.hh +++ b/src/ENGINE/VISU_Engine_i.hh @@ -229,6 +229,31 @@ namespace VISU virtual VISU::ColoredPrs3dCache_ptr GetColoredPrs3dCache(SALOMEDS::Study_ptr theStudy); + + + + virtual CORBA::Long CreateClippingPlane(CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name); + + virtual void EditClippingPlane(CORBA::Long id, CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name); + + /* Returns clipping plane by its Id */ + virtual VISU::ClippingPlane* GetClippingPlane(CORBA::Long id); + + /* Deletes clipping plane by its Id */ + virtual CORBA::Boolean DeleteClippingPlane(CORBA::Long id); + + /* Applyes a clipping plane with Id to presentation thePrs */ + virtual CORBA::Boolean ApplyClippingPlane(Prs3d_ptr thePrs, CORBA::Long id); + + /* Detaches a clipping plane with Id from presentation thePrs */ + virtual CORBA::Boolean DetachClippingPlane(Prs3d_ptr thePrs, CORBA::Long id); + + /* Get number of clipping planes */ + virtual CORBA::Long GetClippingPlanesNb(); }; }; diff --git a/src/OBJECT/Makefile.am b/src/OBJECT/Makefile.am index ff0a1471..9c2ed5df 100644 --- a/src/OBJECT/Makefile.am +++ b/src/OBJECT/Makefile.am @@ -31,8 +31,10 @@ lib_LTLIBRARIES= libVisuObject.la salomeinclude_HEADERS = \ VISU_BoostSignals.h \ VISU_ActorFactory.h \ + VISU_PickingSettings.h \ VISU_GaussPtsSettings.h \ VISU_GaussPtsActorFactory.h \ + VISU_GaussPtsDeviceActor.h \ VISU_Event.h \ VISU_Actor.h \ VISU_DataSetActor.h \ @@ -49,6 +51,7 @@ dist_libVisuObject_la_SOURCES = \ VISU_DataSetActor.cxx \ VISU_MeshAct.cxx \ VISU_ScalarMapAct.cxx \ + VISU_PickingSettings.cxx \ VISU_GaussPtsDeviceActor.cxx \ VISU_GaussPtsSettings.cxx \ VISU_GaussPtsAct.cxx \ diff --git a/src/OBJECT/VISU_Actor.cxx b/src/OBJECT/VISU_Actor.cxx index f4d26b4e..cb8245af 100644 --- a/src/OBJECT/VISU_Actor.cxx +++ b/src/OBJECT/VISU_Actor.cxx @@ -27,7 +27,14 @@ // $Header$ #include "VISU_Actor.h" + +#include "VISU_PickingSettings.h" +#include "VISU_GaussPtsDeviceActor.h" + #include "VISU_PipeLine.hxx" + +#include "SVTK_Event.h" + #include "VTKViewer_ShrinkFilter.h" #include "VTKViewer_GeometryFilter.h" #include "VISU_ActorFactory.h" @@ -52,6 +59,13 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -59,6 +73,10 @@ #include #include +#include +#include +#include + #include #include "utilities.h" @@ -83,13 +101,21 @@ static int MYDEBUG = 0; //---------------------------------------------------------------------------- VISU_Actor ::VISU_Actor(): + myEventCallbackCommand(vtkCallbackCommand::New()), + myPriority(0.0), myIsVTKMapping(false), myPrs3d(NULL), myIsShrunk(false), myIsShrinkable(false), myShrinkFilter(VTKViewer_ShrinkFilter::New()), myAnnotationMapper(vtkTextMapper::New()), - myAnnotationActor(vtkTextActor::New()) + myAnnotationActor(vtkTextActor::New()), + myTextActor(VISU_FramedTextActor::New()), + myIsFeatureEdgesAllowed(false), + myIsFeatureEdgesEnabled(false), + myFeatureEdges(vtkFeatureEdges::New()), + myLastSelectionMode(ActorSelection), + myIsSubElementsHighlighted(false) { if(MYDEBUG) MESSAGE("VISU_Actor::VISU_Actor - this = "<Delete(); myAnnotationActor->SetVisibility(0); + + myTextActor->Delete(); + myTextActor->SetVisibility(false); + myTextActor->SetPickable(false); + + myFeatureEdges->Delete(); + + myEventCallbackCommand->Delete(); + myEventCallbackCommand->SetClientData(this); + myEventCallbackCommand->SetCallback(VISU_Actor::ProcessEvents); + + if( VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get() ) + aPickingSettings->AddObserver(VISU::UpdatePickingSettingsEvent, + myEventCallbackCommand.GetPointer(), + myPriority); + + //Definition of values labeling pipeline + + myValLblDataSet = vtkUnstructuredGrid::New(); + + myValCellCenters = vtkCellCenters::New(); + myValCellCenters->SetInput(myValLblDataSet); + + myValMaskPoints = vtkMaskPoints::New(); + myValMaskPoints->SetInput(myValCellCenters->GetOutput()); + myValMaskPoints->SetOnRatio(1); + + myValSelectVisiblePoints = vtkSelectVisiblePoints::New(); + myValSelectVisiblePoints->SetInput(myValMaskPoints->GetOutput()); + myValSelectVisiblePoints->SelectInvisibleOff(); + myValSelectVisiblePoints->SetTolerance(0.1); + + myValLabeledDataMapper = vtkLabeledDataMapper::New(); + myValLabeledDataMapper->SetInput(myValSelectVisiblePoints->GetOutput()); + myValLabeledDataMapper->SetLabelFormat("%g"); + myValLabeledDataMapper->SetLabelModeToLabelScalars(); + + vtkTextProperty* aClsTextProp = vtkTextProperty::New(); + aClsTextProp->SetFontFamilyToTimes(); + static int aCellsFontSize = 12; + aClsTextProp->SetFontSize(aCellsFontSize); + aClsTextProp->SetBold(1); + aClsTextProp->SetItalic(0); + aClsTextProp->SetShadow(0); + myValLabeledDataMapper->SetLabelTextProperty(aClsTextProp); + aClsTextProp->Delete(); + + myIsValLabeled = false; + + myValLabels = vtkActor2D::New(); + myValLabels->SetMapper(myValLabeledDataMapper); + myValLabels->GetProperty()->SetColor(0,1,0); + myValLabels->SetVisibility( myIsValLabeled ); } //---------------------------------------------------------------------------- @@ -119,6 +198,15 @@ VISU_Actor SetShrink(); else UnShrink(); + + SetFeatureEdgesAllowed(theActor->IsFeatureEdgesAllowed()); + SetFeatureEdgesEnabled(theActor->IsFeatureEdgesEnabled()); + SetFeatureEdgesAngle(theActor->GetFeatureEdgesAngle()); + bool aFeatureEdges = false, aBoundaryEdges = false, aManifoldEdges = false, aNonManifoldEdges = false; + theActor->GetFeatureEdgesFlags( aFeatureEdges, aBoundaryEdges, aManifoldEdges, aNonManifoldEdges ); + SetFeatureEdgesFlags( aFeatureEdges, aBoundaryEdges, aManifoldEdges, aNonManifoldEdges ); + SetFeatureEdgesColoring(theActor->GetFeatureEdgesColoring()); + SetOpacity(theActor->GetOpacity()); SetLineWidth(theActor->GetLineWidth()); SetPosition(theActor->GetPosition()); @@ -138,6 +226,15 @@ VISU_Actor VISU_Actor ::~VISU_Actor() { + // Deleting of values labeling pipeline + myValLblDataSet->Delete(); + myValLabeledDataMapper->RemoveAllInputs(); + myValLabeledDataMapper->Delete(); + myValSelectVisiblePoints->Delete(); + myValMaskPoints->Delete(); + myValCellCenters->Delete(); + myValLabels->Delete(); + if(MYDEBUG) MESSAGE("~VISU_Actor() - this = "<GetMapper() ) { - if ( vtkDataSet *aDataSet = aMapper->GetInput() ) { - SetShrinkable( thePipeLine->IsShrinkable() ); - SetMapperInput( aDataSet ); + if(thePipeLine){ + if(vtkMapper *aMapper = myPipeLine->GetMapper()){ + if(vtkDataSet *aDataSet = aMapper->GetInput()){ + SetShrinkable(thePipeLine->IsShrinkable()); + SetFeatureEdgesAllowed(thePipeLine->IsFeatureEdgesAllowed()); + SetMapperInput(aDataSet); } } } @@ -213,7 +311,10 @@ VISU_Actor { Superclass::SetRepresentation(theMode); if(myRepresentation == VTK_POINTS) + { UnShrink(); + } + SetFeatureEdgesEnabled( theMode == SVTK::Representation::FeatureEdges ); } @@ -282,6 +383,111 @@ VISU_Actor } +//---------------------------------------------------------------------------- +bool +VISU_Actor +::IsFeatureEdgesAllowed() +{ + return myIsFeatureEdgesAllowed; +} + +void +VISU_Actor +::SetFeatureEdgesAllowed(bool theIsFeatureEdgesAllowed) +{ + myIsFeatureEdgesAllowed = theIsFeatureEdgesAllowed; +} + +bool +VISU_Actor +::IsFeatureEdgesEnabled() +{ + return myIsFeatureEdgesEnabled; +} + +void +VISU_Actor +::SetFeatureEdgesEnabled(bool theIsFeatureEdgesEnabled) +{ + if ( !myIsFeatureEdgesAllowed || myIsFeatureEdgesEnabled == theIsFeatureEdgesEnabled ) + return; + + if ( vtkPolyData* aPolyData = myPassFilter[ 2 ]->GetPolyDataOutput() ) + { + if( theIsFeatureEdgesEnabled ) + { + myFeatureEdges->SetInput( aPolyData ); + myPassFilter[ 3 ]->SetInput( myFeatureEdges->GetOutput() ); + myIsFeatureEdgesEnabled = true; + } + else + { + myPassFilter[3]->SetInput( aPolyData ); + myPassFilter[3]->Modified(); + myIsFeatureEdgesEnabled = false; + Modified(); + } + myIsFeatureEdgesEnabled = theIsFeatureEdgesEnabled; + } +} + +vtkFloatingPointType +VISU_Actor +::GetFeatureEdgesAngle() +{ + return myFeatureEdges->GetFeatureAngle(); +} + +void +VISU_Actor +::SetFeatureEdgesAngle(vtkFloatingPointType theValue) +{ + myFeatureEdges->SetFeatureAngle(theValue); + Modified(); +} + +void +VISU_Actor +::GetFeatureEdgesFlags(bool& theIsFeatureEdges, + bool& theIsBoundaryEdges, + bool& theIsManifoldEdges, + bool& theIsNonManifoldEdges) +{ + theIsFeatureEdges = myFeatureEdges->GetFeatureEdges(); + theIsBoundaryEdges = myFeatureEdges->GetBoundaryEdges(); + theIsManifoldEdges = myFeatureEdges->GetManifoldEdges(); + theIsNonManifoldEdges = myFeatureEdges->GetNonManifoldEdges(); +} + +void +VISU_Actor +::SetFeatureEdgesFlags(bool theIsFeatureEdges, + bool theIsBoundaryEdges, + bool theIsManifoldEdges, + bool theIsNonManifoldEdges) +{ + myFeatureEdges->SetFeatureEdges(theIsFeatureEdges); + myFeatureEdges->SetBoundaryEdges(theIsBoundaryEdges); + myFeatureEdges->SetManifoldEdges(theIsManifoldEdges); + myFeatureEdges->SetNonManifoldEdges(theIsNonManifoldEdges); + Modified(); +} + +bool +VISU_Actor +::GetFeatureEdgesColoring() +{ + return myFeatureEdges->GetColoring(); +} + +void +VISU_Actor +::SetFeatureEdgesColoring(bool theIsColoring) +{ + myFeatureEdges->SetColoring(theIsColoring); + Modified(); +} + //---------------------------------------------------------------------------- void VISU_Actor @@ -321,6 +527,11 @@ VISU_Actor { Superclass::AddToRender(theRenderer); theRenderer->AddActor(myAnnotationActor.GetPointer()); + theRenderer->AddActor(myTextActor.GetPointer()); + + myValSelectVisiblePoints->SetRenderer( theRenderer ); + theRenderer->AddActor2D( myValLabels ); + } //================================================================== @@ -332,10 +543,21 @@ VISU_Actor ::RemoveFromRender(vtkRenderer* theRenderer) { theRenderer->RemoveActor(myAnnotationActor.GetPointer()); + theRenderer->RemoveActor(myTextActor.GetPointer()); + theRenderer->RemoveActor(myValLabels); Superclass::RemoveFromRender(theRenderer); myDestroySignal(this); } +//---------------------------------------------------------------------------- +void +VISU_Actor +::SetVisibility(int theMode) +{ + Superclass::SetVisibility( theMode ); + myValLabels->SetVisibility( myIsValLabeled && theMode ); +} + //---------------------------------------------------------------------------- void VISU_Actor @@ -379,6 +601,11 @@ VISU_Actor aSize += aDataSet->GetActualMemorySize() * 1024; } + if(IsFeatureEdgesEnabled()){ + vtkPolyData* aPolyData = myFeatureEdges->GetOutput(); + aSize += aPolyData->GetActualMemorySize() * 1024; + } + return aSize; } @@ -449,6 +676,84 @@ VISU_Actor //---------------------------------------------------------------------------- bool VISU_Actor +::isSubElementsHighlighted() +{ + return myIsSubElementsHighlighted; +} + + +//---------------------------------------------------------------------------- +inline +void +ChangeZoom(vtkFloatingPointType theZoomFactor, + vtkRenderer* theRenderer, + vtkIdType theInitialHasIndex, + vtkIdType theCurrentHasIndex) +{ + //printf( "VISU_Actor::ChangeZoom( %d, %d )", theInitialHasIndex, theCurrentHasIndex ); + if(theInitialHasIndex + theCurrentHasIndex == 1){ + vtkCamera *aCamera = theRenderer->GetActiveCamera(); + + double aScale = aCamera->GetParallelScale(); + if ( !theInitialHasIndex && theCurrentHasIndex ) { + //printf( " : +%f", theZoomFactor ); + aCamera->SetParallelScale( aScale / theZoomFactor ); + } + else { + //printf( " : -%f", theZoomFactor ); + aCamera->SetParallelScale( aScale * theZoomFactor ); + } + } + //printf( "\n" ); +} + +/*! + Updates visibility of the highlight devices +*/ +void +VISU_Actor +::highlight(bool theIsHighlight) +{ + VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get(); + + bool aShowTextActor = aPickingSettings->GetInfoWindowEnabled(); + if( theIsHighlight && mySelectionMode != myLastSelectionMode ) + { + if( mySelectionMode == ActorSelection ) + ResetTextActor(); + else + aShowTextActor = false; + myLastSelectionMode = mySelectionMode; + } + + myTextActor->SetVisibility( GetVisibility() && theIsHighlight && aShowTextActor ); + + bool anInitialHasIndex = isHighlighted(); + bool aCurrentHasIndex = theIsHighlight; + + if( !theIsHighlight && mySelectionMode == ActorSelection && isSubElementsHighlighted() ) + { + myIsSubElementsHighlighted = false; + + // Zoom + if( GetVisibility() && aPickingSettings->GetCameraMovementEnabled() ) + { + vtkFloatingPointType aZoomFactor = aPickingSettings->GetZoomFactor(); + ChangeZoom(aZoomFactor, + GetRenderer(), + anInitialHasIndex, + aCurrentHasIndex); + } + } + + Superclass::highlight(theIsHighlight); +} + +/*! + To process prehighlight (called from SVTK_InteractorStyle) +*/ +bool +VISU_Actor ::PreHighlight(vtkInteractorStyle* theInteractorStyle, SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight) @@ -472,7 +777,7 @@ VISU_Actor if(myCellPicker->GetActor() != this) return false; - + vtkIdType aVTKId = myCellPicker->GetCellId(); if(aVTKId >= 0 && mySelector->IsValid(this,aVTKId,true) && hasIO()){ vtkIdType anObjId = GetElemObjId(aVTKId); @@ -513,7 +818,7 @@ VISU_Actor theSelectionEvent->myY, 0.0, aRenderer); - + if(myPointPicker->GetActor() != this) return false; @@ -550,3 +855,405 @@ VISU_Actor return aRet; } + +void VISU_Actor::RemoveAllClippingPlanes() +{ +} + +vtkIdType VISU_Actor::GetNumberOfClippingPlanes() +{ + return 0; +} + +bool VISU_Actor::AddClippingPlane(vtkPlane* thePlane) +{ + return false; +} + +vtkPlane* VISU_Actor::GetClippingPlane(vtkIdType theID) +{ + return NULL; +} + +vtkImplicitFunctionCollection* VISU_Actor::GetClippingPlanes() +{ + return NULL; +} + +//---------------------------------------------------------------------------- +template std::string getScalar(TData* theData, int theId) +{ + std::ostringstream aStr; + if (vtkDataArray *aScalar = theData->GetScalars()){ + vtkFloatingPointType aVal = aScalar->GetTuple1(theId); + aStr << "\nScalar: " << aVal; + } + return aStr.str(); +} + +template std::string getVector(TData* theData, int theId) +{ + std::ostringstream aStr; + if (vtkDataArray *aVector = theData->GetVectors()) { + vtkFloatingPointType *aVal = aVector->GetTuple3(theId); + aStr << "\nVector: " << "{" << aVal[0] << "; " << aVal[1] << "; " << aVal[2] << "}"; + } + return aStr.str(); +} + +/*! + To process highlight (called from SVTK_InteractorStyle) +*/ +bool +VISU_Actor +::Highlight(vtkInteractorStyle* theInteractorStyle, + SVTK_SelectionEvent* theSelectionEvent, + bool theIsHighlight) +{ + return Superclass::Highlight(theInteractorStyle, + theSelectionEvent, + theIsHighlight); +} + +//------------------------------------------------------------------------- +void +VISU_Actor +::Highlight(bool theIsHighlight) +{ + Superclass::Highlight(theIsHighlight); + + VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get(); + + bool anInitialHasIndex = isSubElementsHighlighted() && mySelectionMode != ActorSelection; + + TColStd_IndexedMapOfInteger aMapIndex; + mySelector->GetIndex( getIO(), aMapIndex ); + bool aCurrentHasIndex = aMapIndex.Extent() == 1; + + myIsSubElementsHighlighted = aCurrentHasIndex; + + bool aFlyTo = false; + vtkFloatingPointType aFlyToCoord[3] = { 0.0, 0.0, 0.0 }; + vtkRenderer *aRenderer = GetRenderer(); + + if( theIsHighlight ) + { + vtkDataSet* aDataSet = GetMapper()->GetInput(); + switch(mySelectionMode) + { + case ActorSelection: + { + ResetTextActor(); + break; + } + case CellSelection: + { + if( !aCurrentHasIndex ) + { + myTextActor->SetVisibility(false); + break; + } + + int anObjId = aMapIndex(1); + vtkCellData* aCellData = aDataSet->GetCellData(); + if(vtkCell* aCell = GetElemCell(anObjId)){ + vtkPoints* aPts = aCell->GetPoints(); + if(int aNbPts = aCell->GetNumberOfPoints()){ + vtkFloatingPointType aCoord[3] = {0.0, 0.0, 0.0}; + for(int i = 0; i < aNbPts; i++){ + vtkFloatingPointType *aPntCoord = aPts->GetPoint(i); + aCoord[0] += aPntCoord[0]; + aCoord[1] += aPntCoord[1]; + aCoord[2] += aPntCoord[2]; + } + + aFlyTo = true; + aFlyToCoord[0] = aCoord[0] / aNbPts; + aFlyToCoord[1] = aCoord[1] / aNbPts; + aFlyToCoord[2] = aCoord[2] / aNbPts; + + vtkFloatingPointType aWorldCoord[4] = {aCoord[0]/aNbPts, aCoord[1]/aNbPts, aCoord[2]/aNbPts, 1.0}; + aRenderer->SetWorldPoint(aWorldCoord); + aRenderer->WorldToDisplay(); + vtkFloatingPointType aSelectionPoint[3]; + aRenderer->GetDisplayPoint(aSelectionPoint); + myTextActor->SetPosition(aSelectionPoint); + myTextActor->SetModePosition(aPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(aPickingSettings->GetInfoWindowTransparency()); + myTextActor->SetWorldPoint(aWorldCoord); + + std::ostringstream aStr; + aStr << "Cell ID: " << anObjId; + + vtkCell* aCell = GetElemCell(anObjId); + int aVTKID = GetElemVTKID(anObjId); + if (aCell) { + int aNbOfPoints = aCell->GetNumberOfPoints(); + if ( aNbOfPoints > 0 ) { + aStr << getScalar(aCellData, aVTKID); + aStr << getVector(aCellData, aVTKID); + } + } + + std::string aString = aStr.str(); + myTextActor->SetText(aString.c_str()); + } + } + break; + } + case NodeSelection: + { + if( !aCurrentHasIndex ) + { + myTextActor->SetVisibility(false); + break; + } + + int anObjId = aMapIndex(1); + vtkPointData* aPntData = aDataSet->GetPointData(); + if(vtkFloatingPointType* aCoord = GetNodeCoord(anObjId)){ + aFlyTo = true; + aFlyToCoord[0] = aCoord[0]; + aFlyToCoord[1] = aCoord[1]; + aFlyToCoord[2] = aCoord[2]; + + vtkFloatingPointType aWorldCoord[4] = {aCoord[0], aCoord[1], aCoord[2], 1.0}; + aRenderer->SetWorldPoint(aWorldCoord); + aRenderer->WorldToDisplay(); + vtkFloatingPointType aSelectionPoint[3]; + aRenderer->GetDisplayPoint(aSelectionPoint); + myTextActor->SetPosition(aSelectionPoint); + myTextActor->SetModePosition(aPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(aPickingSettings->GetInfoWindowTransparency()); + myTextActor->SetWorldPoint(aWorldCoord); + + std::ostringstream aStr; + aStr << "Point ID: " << anObjId; + + int aVTKID = GetNodeVTKID(anObjId); + if(aVTKID >= 0) { + aStr << getScalar(aPntData, aVTKID); + aStr << getVector(aPntData, aVTKID); + } + + const VISU::PIDMapper& aMapper = GetPipeLine()->GetIDMapper(); + //VISU::TIdTypeVector aVec = aMapper->GetIndexesOfNode(anObjId); + VISU::TStructuredId aVec = aMapper->GetIndexesOfNode(anObjId); + + aStr << "\nCoordinates: " << "["; + aStr << aCoord[0]; + //if( aVec.size() > 0 ) + if (aVec[0] != -1) + aStr << " (" << aVec[0] << ")"; + aStr << "; "; + + aStr << aCoord[1]; + //if( aVec.size() > 1 ) + if (aVec[1] != -1) + aStr << " (" << aVec[1] << ")"; + aStr << "; "; + + aStr << aCoord[2]; + //if( aVec.size() > 2 ) + if (aVec[2] != -1) + aStr << " (" << aVec[2] << ")"; + aStr << "]"; + + std::string aString = aStr.str(); + myTextActor->SetText(aString.c_str()); + } + break; + } + case EdgeOfCellSelection: + break; + default: + break; + } + } + + // Zoom + if( GetVisibility() && aPickingSettings->GetCameraMovementEnabled() ) + { + vtkFloatingPointType aZoomFactor = aPickingSettings->GetZoomFactor(); + ChangeZoom(aZoomFactor, + GetRenderer(), + anInitialHasIndex, + aCurrentHasIndex); + } + + // FlyTo + if( GetVisibility() && aPickingSettings->GetCameraMovementEnabled() && aFlyTo ) + { + vtkRenderWindowInteractor* anInteractor = myInteractor; + vtkFloatingPointType aDollyWas = anInteractor->GetDolly(); + int aNumberOfFlyFramesWas = anInteractor->GetNumberOfFlyFrames(); + + anInteractor->SetDolly(0.0); + anInteractor->SetNumberOfFlyFrames(aPickingSettings->GetStepNumber()); + anInteractor->FlyTo(aRenderer, aFlyToCoord); + aRenderer->ResetCameraClippingRange(); + anInteractor->SetDolly(aDollyWas); + anInteractor->SetNumberOfFlyFrames(aNumberOfFlyFramesWas); + anInteractor->InvokeEvent(SVTK::ChangeRotationPoint, aFlyToCoord); + } +} + +//------------------------------------------------------------------------- +void +VISU_Actor +::ResetTextActor() +{ + VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get(); + + vtkFloatingPointType aCoord[6]; + GetBounds(aCoord); + + vtkFloatingPointType aWorldCoord[4] = { ( aCoord[0] + aCoord[1] ) / 2, + ( aCoord[2] + aCoord[3] ) / 2, + ( aCoord[4] + aCoord[5] ) / 2, 1.0}; + vtkRenderer* aRenderer = GetRenderer(); + aRenderer->SetWorldPoint(aWorldCoord); + aRenderer->WorldToDisplay(); + vtkFloatingPointType aSelectionPoint[3]; + aRenderer->GetDisplayPoint(aSelectionPoint); + myTextActor->SetPosition(aSelectionPoint); + myTextActor->SetModePosition(aPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(aPickingSettings->GetInfoWindowTransparency()); + myTextActor->SetWorldPoint(aWorldCoord); + + std::ostringstream aStr; + /* + if( const char* aName = getName() ) + aStr << aName << "\n"; + */ + aStr << "Position: " << "[" << aCoord[0] << "; " << aCoord[2] << "; " << aCoord[4] << "]"; + aStr << "\nSize: " << "[" << + fabs(aCoord[1]-aCoord[0]) << "; " << + fabs(aCoord[3]-aCoord[2]) << "; " << + fabs(aCoord[5]-aCoord[4]) << "]"; + + std::string aString = aStr.str(); + myTextActor->SetText(aString.c_str()); +} + +//------------------------------------------------------------------------- +void +VISU_Actor +::ProcessEvents(vtkObject* vtkNotUsed(theObject), + unsigned long theEvent, + void* theClientData, + void* vtkNotUsed(theCallData)) +{ + if(vtkObject* anObject = reinterpret_cast(theClientData)) + if(VISU_Actor* self = dynamic_cast(anObject)) { + if(theEvent == VISU::UpdatePickingSettingsEvent) + self->UpdatePickingSettings(); + } +} + +//---------------------------------------------------------------------------- +void +VISU_Actor +::UpdatePickingSettings() +{ + //printf( "VISU_Actor::UpdatePickingSettings()\n" ); + VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get(); + if( !aPickingSettings ) + return; + + myTextActor->SetModePosition(aPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(aPickingSettings->GetInfoWindowTransparency()); + + Highlight(isHighlighted()); + + Update(); +} + +// --------------------------------------------------------------- + +void VISU_Actor::SetValuesLabeled( const bool theIsValLabeled ) +{ + vtkDataSet* aGrid = GetValLabelsInput(); + if ( !aGrid ) + return; + + bool isOnPnt = VISU::IsDataOnPoints( aGrid ); + bool isOnCell = VISU::IsDataOnCells( aGrid ); + if ( !isOnPnt && !isOnCell ) + { + // try to specify location of scalars "manually" + vtkCellData* aCData = aGrid->GetCellData(); + if ( aCData ) + { + vtkDataArray* anArr = aCData->GetScalars(); + if ( anArr && anArr->GetNumberOfTuples() ) + isOnCell = true; + } + + if ( !isOnCell ) + { + vtkPointData* aPData = aGrid->GetPointData(); + if ( aPData ) + { + vtkDataArray* anArr = aPData->GetScalars(); + if ( anArr && anArr->GetNumberOfTuples() ) + isOnPnt = true; + } + } + + if ( !isOnPnt && !isOnCell ) + { + myValLabels->SetVisibility( false ); + return; + } + } + + myIsValLabeled = theIsValLabeled; + + if ( myIsValLabeled ) + { + vtkDataSet* aDataSet = aGrid; + + if ( isOnCell ) + { + myValCellCenters->SetInput( aDataSet ); + myValMaskPoints->SetInput( myValCellCenters->GetOutput() ); + } + else if ( isOnPnt ) + myValMaskPoints->SetInput( aDataSet ); + + myValLabels->SetVisibility( GetVisibility() ); + } + else + myValLabels->SetVisibility( false ); + + Modified(); +} + +//---------------------------------------------------------------------------- + +bool VISU_Actor::GetValuesLabeled() const +{ + return myIsValLabeled; +} + +//---------------------------------------------------------------------------- + +vtkTextProperty* VISU_Actor::GetsValLabelsProps() const +{ + return myValLabeledDataMapper->GetLabelTextProperty(); +} + +//---------------------------------------------------------------------------- + +vtkDataSet* VISU_Actor::GetValLabelsInput() +{ + vtkDataSet* aDataSet = 0; + VISU_PipeLine* aPL = GetPipeLine(); + if ( aPL ) + aDataSet = aPL->GetOutput(); + if ( !aDataSet ) + aDataSet = GetInput(); + return aDataSet; +} + diff --git a/src/OBJECT/VISU_Actor.h b/src/OBJECT/VISU_Actor.h index d1c36b8c..69fcf141 100644 --- a/src/OBJECT/VISU_Actor.h +++ b/src/OBJECT/VISU_Actor.h @@ -43,8 +43,20 @@ class vtkProperty; class vtkTextMapper; class vtkTextActor; class vtkInteractorStyle; +class vtkCallbackCommand; class VTKViewer_ShrinkFilter; class VISU_PipeLine; +class vtkPlane; +class vtkImplicitFunctionCollection; +class vtkFeatureEdges; +class vtkTextProperty; +class vtkCellCenters; +class vtkSelectVisiblePoints; +class vtkLabeledDataMapper; +class vtkMaskPoints; +class vtkActor2D; + +class VISU_FramedTextActor; #ifdef _WIN32 #define VTKOCC_EXPORT __declspec (dllexport) @@ -57,6 +69,7 @@ namespace SVTK namespace Representation { const Type Surfaceframe = Insideframe + 1; + const Type FeatureEdges = Insideframe + 2; } } @@ -100,6 +113,10 @@ class VTKOCC_EXPORT VISU_Actor : public VISU_ActorBase virtual void RemoveFromRender(); + + virtual + void + SetVisibility(int theMode); //---------------------------------------------------------------------------- virtual @@ -144,6 +161,53 @@ class VTKOCC_EXPORT VISU_Actor : public VISU_ActorBase vtkFloatingPointType GetShrinkFactor(); + //---------------------------------------------------------------------------- + virtual + bool + IsFeatureEdgesAllowed(); + + virtual + void + SetFeatureEdgesAllowed(bool theIsFeatureEdgesAllowed); + + virtual + bool + IsFeatureEdgesEnabled(); + + virtual + void + SetFeatureEdgesEnabled(bool theIsFeatureEdgesEnabled); + + virtual + vtkFloatingPointType + GetFeatureEdgesAngle(); + + virtual + void + SetFeatureEdgesAngle(vtkFloatingPointType theAngle = 30.0); + + virtual + void + GetFeatureEdgesFlags(bool& theIsFeatureEdges, + bool& theIsBoundaryEdges, + bool& theIsManifoldEdges, + bool& theIsNonManifoldEdges); + + virtual + void + SetFeatureEdgesFlags(bool theIsFeatureEdges, + bool theIsBoundaryEdges, + bool theIsManifoldEdges, + bool theIsNonManifoldEdges); + + virtual + bool + GetFeatureEdgesColoring(); + + virtual + void + SetFeatureEdgesColoring(bool theIsColoring); + //---------------------------------------------------------------------------- virtual void @@ -171,12 +235,30 @@ class VTKOCC_EXPORT VISU_Actor : public VISU_ActorBase RemoveFromRender( vtkRenderer* ); //---------------------------------------------------------------------------- + //! Just to update visibility of the highlight devices + virtual + void + highlight(bool theHighlight); + + //! To process prehighlight (called from #SVTK_InteractorStyle) virtual bool PreHighlight(vtkInteractorStyle* theInteractorStyle, SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight); + //! To process highlight (called from #SVTK_InteractorStyle) + virtual + bool + Highlight(vtkInteractorStyle* theInteractorStyle, + SVTK_SelectionEvent* theSelectionEvent, + bool theIsHighlight); + + //! Internal highlight. + virtual + void + Highlight(bool theIsHighlight); + virtual void SetVTKMapping(bool theIsVTKMapping); @@ -220,6 +302,38 @@ class VTKOCC_EXPORT VISU_Actor : public VISU_ActorBase GetElemCell(vtkIdType theObjID); //---------------------------------------------------------------------------- + virtual void RemoveAllClippingPlanes(); + + virtual vtkIdType GetNumberOfClippingPlanes(); + + virtual bool AddClippingPlane(vtkPlane* thePlane); + + virtual vtkPlane* GetClippingPlane(vtkIdType theID); + + virtual vtkImplicitFunctionCollection* GetClippingPlanes(); + + //---------------------------------------------------------------------------- + //! Apply the picking settings on the actor. + void + UpdatePickingSettings(); + + //---------------------------------------------------------------------------- + //! Methods for values labeling + virtual + void + SetValuesLabeled( const bool theIsValLabeled ); + + virtual + bool + GetValuesLabeled() const; + + virtual + vtkDataSet* + GetValLabelsInput(); + + vtkTextProperty* + GetsValLabelsProps() const; + protected: VISU_Actor(); @@ -235,6 +349,28 @@ class VTKOCC_EXPORT VISU_Actor : public VISU_ActorBase GetCurrentPL(); //---------------------------------------------------------------------------- + bool + isSubElementsHighlighted(); + + //---------------------------------------------------------------------------- + vtkSmartPointer myEventCallbackCommand; + + //! Main process VTK event method + static + void + ProcessEvents(vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); + + //---------------------------------------------------------------------------- + private: + void + ResetTextActor(); + + //---------------------------------------------------------------------------- + protected: + vtkFloatingPointType myPriority; bool myIsVTKMapping; VISU::Prs3d_i* myPrs3d; vtkSmartPointer myPipeLine; @@ -245,6 +381,24 @@ class VTKOCC_EXPORT VISU_Actor : public VISU_ActorBase vtkSmartPointer myAnnotationMapper; vtkSmartPointer myAnnotationActor; + + vtkSmartPointer myTextActor; + + vtkSmartPointer myFeatureEdges; + bool myIsFeatureEdgesAllowed; + bool myIsFeatureEdgesEnabled; + + Selection_Mode myLastSelectionMode; + bool myIsSubElementsHighlighted; + + // fields for values labeling + bool myIsValLabeled; + vtkDataSet* myValLblDataSet; + vtkActor2D* myValLabels; + vtkMaskPoints* myValMaskPoints; + vtkCellCenters* myValCellCenters; + vtkLabeledDataMapper* myValLabeledDataMapper; + vtkSelectVisiblePoints* myValSelectVisiblePoints; }; #endif //VISU_ACTOR_H diff --git a/src/OBJECT/VISU_ActorBase.cxx b/src/OBJECT/VISU_ActorBase.cxx deleted file mode 100644 index c794a7d5..00000000 --- a/src/OBJECT/VISU_ActorBase.cxx +++ /dev/null @@ -1,163 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : -// Author : -// Module : VISU -// $Header$ - -#include "VISU_ActorBase.h" -#include "VISU_ActorFactory.h" -#include "VTKViewer_ShrinkFilter.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "utilities.h" - -#include - -VISU_ActorBase -::VISU_ActorBase() : - myIsShrinkable(true), - myIsShrunk(false), - myShrinkFilter(VTKViewer_ShrinkFilter::New()) -{ - myShrinkFilter->Delete(); - - myStoreMapping = true; - - myShrinkFilter->SetStoreMapping(true); -} - -VISU_ActorBase -::~VISU_ActorBase() -{ - -} - -//---------------------------------------------------------------------------- -VISU::TActorFactory* -VISU_ActorBase -::GetFactory() -{ - return myActorFactory; -} - -void -VISU_ActorBase -::SetFactory(VISU::TActorFactory* theActorFactory) -{ - using namespace VISU; - - if(myActorFactory == theActorFactory) - return; - - if(theActorFactory) - myDestroySignal.connect(boost::bind(&TActorFactory::RemoveActor, - theActorFactory, - _1)); - - myActorFactory = theActorFactory; -} - -void -VISU_ActorBase -::UpdateFromFactory() -{ - if(myUpdateFromFactoryTime.GetMTime() < myActorFactory->GetMTime()){ - myUpdateFromFactoryTime.Modified(); - myActorFactory->UpdateActor(this); - Update(); - } -} - -//-------------------------------------------------------------------------- - -void -VISU_ActorBase -::SetLineWidth(vtkFloatingPointType theLineWidth) -{ - GetProperty()->SetLineWidth(theLineWidth); -} - -vtkFloatingPointType -VISU_ActorBase -::GetLineWidth() -{ - return GetProperty()->GetLineWidth(); -} - -//-------------------------------------------------------------------------- -void -VISU_ActorBase -::SetRepresentation(int theMode) -{ - Superclass::SetRepresentation(theMode); - if(myRepresentation == VTK_POINTS) - UnShrink(); -} - -//---------------------------------------------------------------------------- -void VISU_ActorBase::SetShrink() -{ - if(!myIsShrinkable) - return; - if(vtkDataSet* aDataSet = myPassFilter[0]->GetOutput()){ - myShrinkFilter->SetInput(aDataSet); - myPassFilter[1]->SetInput(myShrinkFilter->GetOutput()); - myIsShrunk = true; - } -} - -void VISU_ActorBase::UnShrink() -{ - if(!myIsShrunk) - return; - if(vtkDataSet* aDataSet = myPassFilter[0]->GetOutput()){ - myPassFilter[1]->SetInput(aDataSet); - myPassFilter[1]->Modified(); - myIsShrunk = false; - Modified(); - } -} - -bool VISU_ActorBase::IsShrunk() -{ - return myIsShrunk; -} - -void VISU_ActorBase::SetShrinkable(bool theIsShrinkable) -{ - myIsShrinkable = theIsShrinkable; -} - -bool VISU_ActorBase::IsShrunkable() -{ - return myIsShrinkable; -} diff --git a/src/OBJECT/VISU_ActorBase.h b/src/OBJECT/VISU_ActorBase.h deleted file mode 100644 index 2b9e414d..00000000 --- a/src/OBJECT/VISU_ActorBase.h +++ /dev/null @@ -1,92 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : -// Author : -// Module : VISU -// $Header$ - -#ifndef VISU_ACTOR_BASE_H -#define VISU_ACTOR_BASE_H - -#include "SALOME_Actor.h" -#include "VISU_BoostSignals.h" - -class VTKViewer_ShrinkFilter; - -#ifdef _WIN32 -#define VTKOCC_EXPORT __declspec (dllexport) -#else -#define VTKOCC_EXPORT VTK_EXPORT -#endif - - -//---------------------------------------------------------------------------- -namespace VISU -{ - struct TActorFactory; -} - - -//! This class defines an abstaract interface to manage actors -class VTKOCC_EXPORT VISU_ActorBase: public SALOME_Actor, - public boost::signalslib::trackable -{ - public: - vtkTypeMacro(VISU_ActorBase, SALOME_Actor); - - //---------------------------------------------------------------------------- - VISU::TActorFactory* GetFactory(); - virtual void SetFactory(VISU::TActorFactory* theActorFactory); - - //---------------------------------------------------------------------------- - virtual void UpdateFromFactory(); - - //---------------------------------------------------------------------------- - - virtual void SetLineWidth(vtkFloatingPointType theLineWidth); - virtual vtkFloatingPointType GetLineWidth(); - - virtual void SetShrink(); - virtual void UnShrink(); - virtual bool IsShrunkable(); - virtual bool IsShrunk(); - virtual void SetShrinkable(bool theIsShrinkable); - - virtual void SetRepresentation(int theMode); - - protected: - VISU_ActorBase(); - virtual ~VISU_ActorBase(); - - VISU::TActorFactory* myActorFactory; - vtkTimeStamp myUpdateFromFactoryTime; - boost::signal1 myDestroySignal; - - vtkSmartPointer myShrinkFilter; - - bool myIsShrinkable; - bool myIsShrunk; -}; - -#endif //VISU_ACTOR_BASE_H diff --git a/src/OBJECT/VISU_DataSetActor.cxx b/src/OBJECT/VISU_DataSetActor.cxx index 1b282c01..dbdb25ec 100644 --- a/src/OBJECT/VISU_DataSetActor.cxx +++ b/src/OBJECT/VISU_DataSetActor.cxx @@ -31,6 +31,11 @@ #include #include +#include +#include +#include +#include +#include #include @@ -48,11 +53,24 @@ vtkStandardNewMacro(VISU_DataSetActor); //---------------------------------------------------------------------------- VISU_DataSetActor ::VISU_DataSetActor(): - myMapper(vtkDataSetMapper::New()) + myMapper(vtkDataSetMapper::New()), + myExtractor(SALOME_ExtractGeometry::New()), + myPolyDataExtractor(SALOME_ExtractPolyDataGeometry::New()), + myFunction(vtkImplicitBoolean::New()) { if(MYDEBUG) MESSAGE("VISU_DataSetActor::VISU_DataSetActor - this = "<SetImplicitFunction(myFunction); + myPolyDataExtractor->SetImplicitFunction(myFunction); + //myExtractor->ExtractBoundaryCellsOn(); + //myPolyDataExtractor->ExtractBoundaryCellsOn(); + + myFunction->SetOperationTypeToIntersection(); + myMapper->Delete(); + myExtractor->Delete(); + myPolyDataExtractor->Delete(); + myFunction->Delete(); } //---------------------------------------------------------------------------- @@ -71,9 +89,8 @@ VISU_DataSetActor if(VISU_UnstructuredGridPL* aPipeLine = dynamic_cast(thePipeLine)){ vtkDataSetMapper* aTarget = GetDataSetMapper(); - vtkDataSetMapper* aSource = aPipeLine->GetDataSetMapper(); + vtkDataSetMapper* aSource = aPipeLine->GetDataSetMapper(); VISU::CopyDataSetMapper(aTarget, aSource, true); - aTarget->SetLookupTable(aSource->GetLookupTable()); } } @@ -82,14 +99,67 @@ void VISU_DataSetActor ::SetMapperInput(vtkDataSet* theDataSet) { - myMapper->SetInput(theDataSet); + if (theDataSet->IsA("vtkPolyData")) { + myPolyDataExtractor->SetInput(theDataSet); + myMapper->SetInput(myPolyDataExtractor->GetOutput()); + } else { + myExtractor->SetInput(theDataSet); + myMapper->SetInput(myExtractor->GetOutput()); + } + // myMapper->SetInput(theDataSet); SetMapper(myMapper.GetPointer()); } //---------------------------------------------------------------------------- -vtkDataSetMapper* -VISU_DataSetActor -::GetDataSetMapper() +vtkDataSetMapper* VISU_DataSetActor::GetDataSetMapper() { return myMapper.GetPointer(); } + +//---------------------------------------------------------------------------- +void VISU_DataSetActor::RemoveAllClippingPlanes() +{ + myFunction->GetFunction()->RemoveAllItems(); + myFunction->Modified(); +} + +//---------------------------------------------------------------------------- +vtkIdType VISU_DataSetActor::GetNumberOfClippingPlanes() +{ + return myFunction->GetFunction()->GetNumberOfItems(); +} + +//---------------------------------------------------------------------------- +bool VISU_DataSetActor::AddClippingPlane(vtkPlane* thePlane) +{ + vtkImplicitFunctionCollection* aFunctions = GetClippingPlanes(); + aFunctions->InitTraversal(); + vtkImplicitFunction* aItem; + while ((aItem = aFunctions->GetNextItem())) { + if (thePlane == aItem) + return false; + } + myFunction->AddFunction(thePlane); + return true; +} + +//---------------------------------------------------------------------------- +vtkPlane* VISU_DataSetActor::GetClippingPlane(vtkIdType theID) +{ + vtkPlane* aPlane = NULL; + if ((theID >= 0) && (theID < GetNumberOfClippingPlanes())) { + vtkImplicitFunctionCollection* aFunction = myFunction->GetFunction(); + vtkImplicitFunction* aFun = NULL; + aFunction->InitTraversal(); + for (vtkIdType i = 0; i <= theID; i++) + aFun = aFunction->GetNextItem(); + aPlane = dynamic_cast(aFun); + } + return aPlane; +} + +//---------------------------------------------------------------------------- +vtkImplicitFunctionCollection* VISU_DataSetActor::GetClippingPlanes() +{ + return myFunction->GetFunction(); +} diff --git a/src/OBJECT/VISU_DataSetActor.h b/src/OBJECT/VISU_DataSetActor.h index 9e7ef457..4af55e3e 100644 --- a/src/OBJECT/VISU_DataSetActor.h +++ b/src/OBJECT/VISU_DataSetActor.h @@ -31,6 +31,10 @@ #include "VISU_Actor.h" class vtkDataSetMapper; +class SALOME_ExtractGeometry; +class SALOME_ExtractPolyDataGeometry; +class vtkImplicitBoolean; +class vtkImplicitFunctionCollection; #ifdef _WIN_32 #define VTKOCC_EXPORT __declspec (dllexport) @@ -56,6 +60,17 @@ class VTKOCC_EXPORT VISU_DataSetActor : public VISU_Actor vtkDataSetMapper* GetDataSetMapper(); + //---------------------------------------------------------------------------- + virtual void RemoveAllClippingPlanes(); + + virtual vtkIdType GetNumberOfClippingPlanes(); + + virtual bool AddClippingPlane(vtkPlane* thePlane); + + virtual vtkPlane* GetClippingPlane(vtkIdType theID); + + virtual vtkImplicitFunctionCollection* GetClippingPlanes(); + //---------------------------------------------------------------------------- protected: VISU_DataSetActor(); @@ -69,6 +84,9 @@ class VTKOCC_EXPORT VISU_DataSetActor : public VISU_Actor //---------------------------------------------------------------------------- vtkSmartPointer myMapper; + vtkSmartPointer myExtractor; + vtkSmartPointer myPolyDataExtractor; + vtkSmartPointer myFunction; }; #endif //VISU_DATASETACTOR_H diff --git a/src/OBJECT/VISU_GaussPtsAct.cxx b/src/OBJECT/VISU_GaussPtsAct.cxx index 04837dc4..e46d2a63 100644 --- a/src/OBJECT/VISU_GaussPtsAct.cxx +++ b/src/OBJECT/VISU_GaussPtsAct.cxx @@ -30,6 +30,7 @@ #include "VISU_GaussPointsPL.hxx" #include "VISU_GaussPtsSettings.h" #include "VISU_GaussPtsDeviceActor.h" +#include "VISU_PickingSettings.h" #include "VISU_WidgetCtrl.hxx" #include "VISU_SphereWidget.hxx" #include "VISU_OpenGLPointSpriteMapper.hxx" @@ -38,6 +39,7 @@ #include "VISU_Event.h" #include "SVTK_Actor.h" +#include #include #include @@ -46,6 +48,9 @@ #include #include #include +#include +#include +#include #include #include @@ -124,23 +129,22 @@ VISU_GaussPtsAct myWidgetCtrl(NULL), myGaussPointsPL(NULL), myLastPreHighlightObjID(-1), - myTextActor(VISU_FramedTextActor::New()), myCursorPyramid(VISU_CursorPyramid::New()), myCursorPyramidSelected(VISU_CursorPyramid::New()), myCellSource(vtkUnstructuredGrid::New()), myCellActor(SVTK_Actor::New()), myScalarBarCtrl(VISU_ScalarBarCtrl::New()), myBarVisibility(true), - myPickingSettings(NULL), myInsideCursorSettings(NULL), myCurrentPL(NULL), - myMapper(vtkPolyDataMapper::New()) + myMapper(vtkPolyDataMapper::New()), + myPolyDataExtractor(SALOME_ExtractPolyDataGeometry::New()), + myFunction(vtkImplicitBoolean::New()) { if(MYDEBUG) MESSAGE("VISU_GaussPtsAct::VISU_GaussPtsAct - this = "<Delete(); myDeviceActor->Delete(); - myTextActor->Delete(); myCursorPyramid->Delete(); myCursorPyramid->SetPickable(0); @@ -163,9 +167,6 @@ VISU_GaussPtsAct myDeviceActor->SetVisibility(true); myDeviceActor->SetPickable(false); - myTextActor->SetVisibility(false); - myTextActor->SetPickable(false); - myCellSource->Allocate(); myCellActor->Initialize(); myCellActor->SetRepresentation(VTK_WIREFRAME); @@ -180,6 +181,18 @@ VISU_GaussPtsAct myMapper->Delete(); aMatrix->Delete(); + + myPolyDataExtractor->SetImplicitFunction(myFunction); + //myPolyDataExtractor->ExtractBoundaryCellsOn(); + + myFunction->SetOperationTypeToIntersection(); + myPolyDataExtractor->Delete(); + myFunction->Delete(); + + if( VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get() ) + aPickingSettings->AddObserver(VISU::UpdatePickingSettingsEvent, + myEventCallbackCommand.GetPointer(), + myPriority); } VISU_GaussPtsAct @@ -188,7 +201,6 @@ VISU_GaussPtsAct if(MYDEBUG) MESSAGE("VISU_GaussPtsAct::~VISU_GaussPtsAct - this = "<AddToRender(theRenderer); - theRenderer->AddActor(myTextActor.GetPointer()); theRenderer->AddActor(myCellActor.GetPointer()); myCursorPyramid->AddToRender(theRenderer); @@ -313,7 +324,6 @@ VISU_GaussPtsAct myDeviceActor->RemoveFromRender(theRenderer); - theRenderer->RemoveActor(myTextActor.GetPointer()); theRenderer->RemoveActor(myCellActor.GetPointer()); myCursorPyramid->RemoveFromRender(theRenderer); @@ -423,11 +433,14 @@ VISU_GaussPtsAct { if(MYDEBUG) MESSAGE("VISU_GaussPtsAct::SetMapperInput - this = "<SetExtractor(myPolyDataExtractor); myDeviceActor->SetPipeLine(GetGaussPointsPL()); myCurrentPL = myDeviceActor->GetPipeLine(); //SetMapper(myCurrentPL->GetPointSpriteMapper()); + // myPolyDataExtractor->SetInput(myCurrentPL->GetPickableDataSet()); + //myMapper->SetInput(myPolyDataExtractor->GetOutput()); myMapper->SetInput(myCurrentPL->GetPickableDataSet()); SetMapper(myMapper.GetPointer()); } @@ -526,6 +539,7 @@ VISU_GaussPtsAct ::SetVisibility(int theMode) { Superclass::SetVisibility(theMode); + myDeviceActor->SetVisibility(GetVisibility()); // VSV myScalarBarCtrl->SetVisibility(theMode); Highlight(isHighlighted()); } @@ -723,6 +737,8 @@ VISU_GaussPtsAct bool anIsChanged = (mySelectionMode != aSelectionMode); bool anIsPreselected = myIsPreselected; myIsPreselected = false; + + VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get(); if(aSelectionMode == GaussPointSelection && theIsHighlight){ myPointPicker->Pick(theSelectionEvent->myX, @@ -761,25 +777,22 @@ VISU_GaussPtsAct vtkDataSet* aDataSet = GetInput(); vtkPointData* aPointData = aDataSet->GetPointData(); if(vtkDataArray *aScalarArray = aPointData->GetScalars()){ - if ( myPickingSettings ){ - vtkFloatingPointType aPyramidHeight = myPickingSettings->GetPyramidHeight(); - aPyramidHeight = aPyramidHeight*myGaussPointsPL->GetMaxPointSize(); - //vtkFloatingPointType aColor[3] = myPreHighlightActor->GetProperty()->GetColor(); - vtkFloatingPointType aColor[3]; - theInteractorStyle->GetCurrentRenderer()->GetBackground( aColor ); - aColor[0] = 1. - aColor[0]; - aColor[1] = 1. - aColor[1]; - aColor[2] = 1. - aColor[2]; - - myCursorPyramid->Init(aPyramidHeight, - myPickingSettings->GetCursorSize(), - GetRadius(anObjId,aVtkId,aScalarArray), - GetMagnification(anObjId), - GetClamp(anObjId), - aLocalNodeCoord, - aColor); - } - + vtkFloatingPointType aPyramidHeight = aPickingSettings->GetPyramidHeight(); + aPyramidHeight = aPyramidHeight*myGaussPointsPL->GetMaxPointSize(); + //vtkFloatingPointType aColor[3] = myPreHighlightActor->GetProperty()->GetColor(); + vtkFloatingPointType aColor[3]; + theInteractorStyle->GetCurrentRenderer()->GetBackground( aColor ); + aColor[0] = 1. - aColor[0]; + aColor[1] = 1. - aColor[1]; + aColor[2] = 1. - aColor[2]; + + myCursorPyramid->Init(aPyramidHeight, + aPickingSettings->GetCursorSize(), + GetRadius(anObjId,aVtkId,aScalarArray), + GetMagnification(anObjId), + GetClamp(anObjId), + aNodeCoord, + aColor); } this->Transform->Pop(); myLastPreHighlightObjID = anObjId; @@ -828,9 +841,9 @@ VISU_GaussPtsAct if ( !GetPickable() ) return false; - // int anInitialHasIndex = myIsHighlighted && mySelectionMode == GaussPointSelection; + // int anInitialHasIndex = myIsSubElementsHighlighted && mySelectionMode == GaussPointSelection; Handle(SALOME_InteractiveObject) anIO = getIO(); - // myIsHighlighted = false; + // myIsSubElementsHighlighted = false; Selection_Mode aSelectionMode = theSelectionEvent->mySelectionMode; @@ -947,54 +960,65 @@ VISU_GaussPtsAct if(!mySelector.GetPointer()) return; - if ( !myPickingSettings ) - { - Superclass::Highlight(theIsHighlight); - return; - } + VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get(); Selection_Mode aSelectionMode = mySelector->SelectionMode(); - bool anInitialHasIndex = isHighlighted() && mySelectionMode == GaussPointSelection; + bool anInitialHasIndex = isSubElementsHighlighted() && mySelectionMode == GaussPointSelection; TColStd_IndexedMapOfInteger aMapIndex; mySelector->GetIndex( getIO(), aMapIndex ); bool aCurrentHasIndex = aMapIndex.Extent() == 1; bool anIsVisible = GetVisibility() && aCurrentHasIndex && theIsHighlight; + bool aShowTextActor = aPickingSettings->GetInfoWindowEnabled(); + bool aShowCellActor = aPickingSettings->GetDisplayParentMesh(); myOutlineActor->SetVisibility(false); myCursorPyramid->SetVisibility(false); - myTextActor->SetVisibility(false); - myCellActor->SetVisibility(false); - myCursorPyramidSelected->SetVisibility(false); + myTextActor->SetVisibility(anIsVisible && aShowTextActor); + myCellActor->SetVisibility(anIsVisible && aShowCellActor); + GetScalarBarCtrl()->SetIsMarked(anIsVisible); + myCursorPyramidSelected->SetVisibility(anIsVisible); + //GetScalarBarCtrl()->Update(); - if(!theIsHighlight) - return; + myIsSubElementsHighlighted = aCurrentHasIndex; + + // Zoom if necessary + if( GetVisibility() && aPickingSettings->GetCameraMovementEnabled() ) + { + ChangeZoom(aPickingSettings, + GetRenderer(), + anInitialHasIndex, + aCurrentHasIndex); + } if( aSelectionMode == ActorSelection ) { - Superclass::highlight(theIsHighlight); + Superclass::Highlight(theIsHighlight); return; } + if(!theIsHighlight) + return; + if( aSelectionMode != GaussPointSelection ) return; if ( !aCurrentHasIndex || !myBarVisibility ) return; - myTextActor->SetVisibility(anIsVisible); - myCellActor->SetVisibility(anIsVisible && myPickingSettings->GetDisplayParentMesh()); - GetScalarBarCtrl()->SetIsMarked(anIsVisible); - myCursorPyramidSelected->SetVisibility(anIsVisible); + // myTextActor->SetVisibility(anIsVisible); + // myCellActor->SetVisibility(anIsVisible && myPickingSettings->GetDisplayParentMesh()); + // GetScalarBarCtrl()->SetIsMarked(anIsVisible); + // myCursorPyramidSelected->SetVisibility(anIsVisible); //GetScalarBarCtrl()->Update(); - myIsHighlighted = aCurrentHasIndex; +// myIsHighlighted = aCurrentHasIndex; // Zoom if necessary - ChangeZoom(myPickingSettings, - GetRenderer(), - anInitialHasIndex, - aCurrentHasIndex); +// ChangeZoom(myPickingSettings, +// GetRenderer(), +// anInitialHasIndex, +// aCurrentHasIndex); // TColStd_IndexedMapOfInteger aMapIndex; mySelector->GetIndex( getIO(), aMapIndex ); @@ -1031,17 +1055,20 @@ VISU_GaussPtsAct return; // FlyTo - vtkRenderWindowInteractor* anInteractor = myInteractor; - vtkFloatingPointType aDollyWas = anInteractor->GetDolly(); - int aNumberOfFlyFramesWas = anInteractor->GetNumberOfFlyFrames(); + if( anIsVisible && aPickingSettings->GetCameraMovementEnabled() ) + { + vtkRenderWindowInteractor* anInteractor = myInteractor; + vtkFloatingPointType aDollyWas = anInteractor->GetDolly(); + int aNumberOfFlyFramesWas = anInteractor->GetNumberOfFlyFrames(); - anInteractor->SetDolly(0.0); - anInteractor->SetNumberOfFlyFrames(myPickingSettings->GetStepNumber()); - anInteractor->FlyTo(aRenderer, aLocalNodeCoord); - aRenderer->ResetCameraClippingRange(); - anInteractor->SetDolly(aDollyWas); - anInteractor->SetNumberOfFlyFrames(aNumberOfFlyFramesWas); - anInteractor->InvokeEvent(SVTK::ChangeRotationPoint, aLocalNodeCoord); + anInteractor->SetDolly(0.0); + anInteractor->SetNumberOfFlyFrames(aPickingSettings->GetStepNumber()); + anInteractor->FlyTo(aRenderer, aNodeCoord); + aRenderer->ResetCameraClippingRange(); + anInteractor->SetDolly(aDollyWas); + anInteractor->SetNumberOfFlyFrames(aNumberOfFlyFramesWas); + anInteractor->InvokeEvent(SVTK::ChangeRotationPoint, aNodeCoord); + } // std::ostringstream aStr; // int anObjId = aMapIndex(1); @@ -1061,10 +1088,10 @@ VISU_GaussPtsAct GetScalarBarCtrl()->SetMarkValue(aVal); GetScalarBarCtrl()->Update(); // - vtkFloatingPointType aPyramidHeight = myPickingSettings->GetPyramidHeight(); + vtkFloatingPointType aPyramidHeight = aPickingSettings->GetPyramidHeight(); aPyramidHeight = aPyramidHeight*myGaussPointsPL->GetMaxPointSize(); myCursorPyramidSelected->Init(aPyramidHeight, - myPickingSettings->GetCursorSize(), + aPickingSettings->GetCursorSize(), GetRadius(anObjId,aVtkId,aScalarArray), GetMagnification(anObjId), GetClamp(anObjId), @@ -1106,55 +1133,26 @@ VISU_GaussPtsAct // // myTextActor std::string aString = aStr.str(); - myTextActor->SetModePosition(myPickingSettings->GetInfoWindowPosition()); - myTextActor->SetTransparency(myPickingSettings->GetInfoWindowTransparency()); + myTextActor->SetModePosition(aPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(aPickingSettings->GetInfoWindowTransparency()); myTextActor->SetWorldPoint(aWorldCoord); myTextActor->SetText(aString.c_str()); - myTextActor->SetVisibility(anIsVisible && theIsHighlight); + myTextActor->SetVisibility(anIsVisible && theIsHighlight && aShowTextActor); // // myCellActor - if(myPickingSettings->GetDisplayParentMesh()){ - const VISU::PGaussPtsIDMapper& aGaussPtsIDMapper = - myGaussPointsPL->GetGaussPtsIDMapper(); - VISU::TNamedIDMapper* aParent = aGaussPtsIDMapper->GetParent(); - - myCellSource->Reset(); - myCellSource->Modified(); // a VTK bug - vtkUnstructuredGrid* aDataSet = aParent->GetUnstructuredGridOutput(); - myCellSource->SetPoints(aDataSet->GetPoints()); - - VISU::TGaussPointID aGaussPointID = aGaussPtsIDMapper->GetObjID(anObjId); - vtkIdType aCellID = aGaussPointID.first; - vtkCell* aCell = aParent->GetElemCell(aCellID); - myCellSource->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds()); - myCellActor->SetVisibility(anIsVisible && theIsHighlight); - myCellActor->SetRepresentation(VTK_WIREFRAME); - } - else - myCellActor->SetVisibility(false); - } -} - - -//---------------------------------------------------------------- -void -VISU_GaussPtsAct -::SetPickingSettings(VISU_PickingSettings* thePickingSettings) -{ - if(myPickingSettings == thePickingSettings) - return; - - if(myPickingSettings) - myPickingSettings->RemoveObserver(myEventCallbackCommand.GetPointer()); - - myPickingSettings = thePickingSettings; - - if(thePickingSettings) - { - thePickingSettings->AddObserver(VISU::UpdatePickingSettingsEvent, - myEventCallbackCommand.GetPointer(), - myPriority); - this->UpdatePickingSettings(); + const VISU::PGaussPtsIDMapper& aGaussPtsIDMapper = myGaussPointsPL->GetGaussPtsIDMapper(); + VISU::TNamedIDMapper* aParent = aGaussPtsIDMapper->GetParent(); + // + myCellSource->Reset(); + myCellSource->Modified(); // a VTK bug + vtkUnstructuredGrid* aCellDataSet = aParent->GetUnstructuredGridOutput(); + myCellSource->SetPoints(aCellDataSet->GetPoints()); + // + VISU::TGaussPointID aGaussPointID = aGaussPtsIDMapper->GetObjID(anObjId); + vtkIdType aCellID = aGaussPointID.first; + vtkCell* aCell = aParent->GetElemCell(aCellID); + myCellSource->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds()); + myCellActor->SetVisibility(anIsVisible && theIsHighlight && aShowCellActor); } } @@ -1162,19 +1160,21 @@ void VISU_GaussPtsAct ::UpdatePickingSettings() { - if(!myPickingSettings) + //printf( "VISU_GaussPtsAct::UpdatePickingSettings()\n" ); + VISU_PickingSettings* aPickingSettings = VISU_PickingSettings::Get(); + if(!aPickingSettings) return; - myTextActor->SetModePosition(myPickingSettings->GetInfoWindowPosition()); - myTextActor->SetTransparency(myPickingSettings->GetInfoWindowTransparency()); + myTextActor->SetModePosition(aPickingSettings->GetInfoWindowPosition()); + myTextActor->SetTransparency(aPickingSettings->GetInfoWindowTransparency()); - vtkFloatingPointType aHeight = myGaussPointsPL->GetMaxPointSize()*myPickingSettings->GetPyramidHeight(); - vtkFloatingPointType aCursorSize = myPickingSettings->GetCursorSize(); + vtkFloatingPointType aHeight = myGaussPointsPL->GetMaxPointSize()*aPickingSettings->GetPyramidHeight(); + vtkFloatingPointType aCursorSize = aPickingSettings->GetCursorSize(); myCursorPyramid->SetPreferences(aHeight,aCursorSize); myCursorPyramidSelected->SetPreferences(aHeight,aCursorSize); - myHighlightActor->GetProperty()->SetColor( myPickingSettings->GetColor() ); - myPointPicker->SetTolerance( myPickingSettings->GetPointTolerance() ); + myHighlightActor->GetProperty()->SetColor( aPickingSettings->GetColor() ); + myPointPicker->SetTolerance( aPickingSettings->GetPointTolerance() ); Highlight(isHighlighted()); @@ -1256,6 +1256,51 @@ VISU_GaussPtsAct return aTime; } +void VISU_GaussPtsAct::RemoveAllClippingPlanes() +{ + myFunction->GetFunction()->RemoveAllItems(); + myFunction->Modified(); +} + +vtkIdType VISU_GaussPtsAct::GetNumberOfClippingPlanes() +{ + return myFunction->GetFunction()->GetNumberOfItems(); +} + +bool VISU_GaussPtsAct::AddClippingPlane(vtkPlane* thePlane) +{ + vtkImplicitFunctionCollection* aFunctions = GetClippingPlanes(); + aFunctions->InitTraversal(); + vtkImplicitFunction* aItem; + while ((aItem = aFunctions->GetNextItem())) { + if (thePlane == aItem) + return false; + } + myFunction->AddFunction(thePlane); + return true; +} + +vtkPlane* VISU_GaussPtsAct::GetClippingPlane(vtkIdType theID) +{ + vtkPlane* aPlane = NULL; + if ((theID >= 0) && (theID < GetNumberOfClippingPlanes())) { + vtkImplicitFunctionCollection* aFunction = myFunction->GetFunction(); + vtkImplicitFunction* aFun = NULL; + aFunction->InitTraversal(); + for (vtkIdType i = 0; i <= theID; i++) + aFun = aFunction->GetNextItem(); + aPlane = dynamic_cast(aFun); + } + return aPlane; +} + +vtkImplicitFunctionCollection* VISU_GaussPtsAct::GetClippingPlanes() +{ + return myFunction->GetFunction(); +} + + + //============================================================================== vtkStandardNewMacro(VISU_GaussPtsAct1); @@ -1314,16 +1359,16 @@ VISU_GaussPtsAct1 { Superclass::AddToRender(theRenderer); - myInsideDeviceActor->AddToRender(theRenderer); - myOutsideDeviceActor->AddToRender(theRenderer); + //myInsideDeviceActor->AddToRender(theRenderer); + //myOutsideDeviceActor->AddToRender(theRenderer); } void VISU_GaussPtsAct1 ::RemoveFromRender(vtkRenderer* theRenderer) { - myInsideDeviceActor->RemoveFromRender(theRenderer); - myOutsideDeviceActor->RemoveFromRender(theRenderer); + //myInsideDeviceActor->RemoveFromRender(theRenderer); + //myOutsideDeviceActor->RemoveFromRender(theRenderer); Superclass::RemoveFromRender(theRenderer); } @@ -1401,18 +1446,18 @@ VISU_GaussPtsAct1 Superclass::SetMapperInput(theDataSet); - if(VISU_GaussPointsPL* aPipeLine = CreatePipeLine(GetGaussPointsPL())){ - myInsideDeviceActor->SetPipeLine(aPipeLine); - aPipeLine->Delete(); - } +// if(VISU_GaussPointsPL* aPipeLine = CreatePipeLine(GetGaussPointsPL())){ +// myInsideDeviceActor->SetPipeLine(aPipeLine); +// aPipeLine->Delete(); +// } - if(VISU_GaussPointsPL* aPipeLine = CreatePipeLine(GetGaussPointsPL())){ - myOutsideDeviceActor->SetPipeLine(aPipeLine); - aPipeLine->Delete(); +// if(VISU_GaussPointsPL* aPipeLine = CreatePipeLine(GetGaussPointsPL())){ +// myOutsideDeviceActor->SetPipeLine(aPipeLine); +// aPipeLine->Delete(); - aPipeLine->SetExtractBoundaryCells(true); - aPipeLine->SetExtractInside(true); - } +// aPipeLine->SetExtractBoundaryCells(true); +// aPipeLine->SetExtractInside(true); +// } } @@ -1492,7 +1537,7 @@ VISU_GaussPtsAct1 bool aVisisbility = GetVisibility(); bool anIsSegementation = IsSegmentationEnabled(); - myDeviceActor->SetVisibility(aVisisbility && !anIsSegementation); + myDeviceActor->SetVisibility(aVisisbility/* && !anIsSegementation*/); myInsideDeviceActor->SetVisibility(aVisisbility && anIsSegementation); myOutsideDeviceActor->SetVisibility(aVisisbility && anIsSegementation); @@ -1545,7 +1590,7 @@ VISU_GaussPtsAct1 aPipeline->SetImplicitFunction(anImplicitFunction); // To restore aPipeline->SetExtractBoundaryCells(true); - aPipeline->SetExtractInside(true); + //aPipeline->SetExtractInside(true); aPipeline->SetMagnification( aMagnification ); aPipeline->SetPrimitiveType( myOutsideCursorSettings->GetPrimitiveType() ); @@ -1615,7 +1660,7 @@ VISU_GaussPtsAct1 case vtkCommand::EndInteractionEvent: { bool aVisisbility = GetVisibility(); bool anIsSegementation = IsSegmentationEnabled(); - myDeviceActor->SetVisibility(aVisisbility && !anIsSegementation); + myDeviceActor->SetVisibility(aVisisbility/* && !anIsSegementation*/); myInsideDeviceActor->SetVisibility(aVisisbility && anIsSegementation); myOutsideDeviceActor->SetVisibility(aVisisbility && anIsSegementation); break; @@ -1684,15 +1729,15 @@ VISU_GaussPtsAct2 ::SetMapperInput(vtkDataSet* theDataSet) { if(MYDEBUG2) MESSAGE("VISU_GaussPtsAct2::SetMapperInput - this = "<SetPipeLine(aPipeLine); - myCurrentPL = aPipeLine; - aPipeLine->Delete(); - - myMapper->SetInput(myCurrentPL->GetPickableDataSet()); - SetMapper(myMapper.GetPointer()); - } + Superclass::SetMapperInput(theDataSet); +// if(VISU_GaussPointsPL* aPipeLine = CreatePipeLine(GetGaussPointsPL())){ +// myDeviceActor->SetPipeLine(aPipeLine); +// myCurrentPL = aPipeLine; +// aPipeLine->Delete(); + +// myMapper->SetInput(myCurrentPL->GetPickableDataSet()); +// SetMapper(myMapper.GetPointer()); +// } } //---------------------------------------------------------------------------- diff --git a/src/OBJECT/VISU_GaussPtsAct.h b/src/OBJECT/VISU_GaussPtsAct.h index 4685f60d..5c0b45ed 100644 --- a/src/OBJECT/VISU_GaussPtsAct.h +++ b/src/OBJECT/VISU_GaussPtsAct.h @@ -60,10 +60,11 @@ class vtkInteractorObserver; class vtkCallbackCommand; class VISU_ScalarBarCtrl; -class VISU_PickingSettings; class VISU_InsideCursorSettings; class VISU_OutsideCursorSettings; +class SALOME_ExtractPolyDataGeometry; +class vtkImplicitBoolean; //============================================================================ //! Base class for Gauss Points Actors. @@ -236,9 +237,6 @@ class VTKOCC_EXPORT VISU_GaussPtsAct : public VISU_Actor UpdateInsideCursorSettings( PDeviceActor ); //---------------------------------------------------------------------------- - void - SetPickingSettings(VISU_PickingSettings* thePickingSettings); - //! Apply the picking settings on the actor. void UpdatePickingSettings(); @@ -256,6 +254,17 @@ class VTKOCC_EXPORT VISU_GaussPtsAct : public VISU_Actor unsigned long int GetMTime(); + //---------------------------------------------------------------------------- + virtual void RemoveAllClippingPlanes(); + + virtual vtkIdType GetNumberOfClippingPlanes(); + + virtual bool AddClippingPlane(vtkPlane* thePlane); + + virtual vtkPlane* GetClippingPlane(vtkIdType theID); + + virtual vtkImplicitFunctionCollection* GetClippingPlanes(); + protected: //---------------------------------------------------------------------------- VISU_GaussPtsAct(); @@ -319,11 +328,11 @@ class VTKOCC_EXPORT VISU_GaussPtsAct : public VISU_Actor vtkSmartPointer myGaussPointsPL; vtkSmartPointer myMapper; + vtkSmartPointer myPolyDataExtractor; + vtkSmartPointer myFunction; vtkIdType myLastPreHighlightObjID; - vtkSmartPointer myTextActor; - vtkSmartPointer myCursorPyramid; vtkSmartPointer myCursorPyramidSelected; @@ -334,7 +343,6 @@ class VTKOCC_EXPORT VISU_GaussPtsAct : public VISU_Actor vtkSmartPointer myScalarBarCtrl; VISU_InsideCursorSettings* myInsideCursorSettings; - VISU_PickingSettings* myPickingSettings; }; diff --git a/src/OBJECT/VISU_GaussPtsDeviceActor.cxx b/src/OBJECT/VISU_GaussPtsDeviceActor.cxx index c4b084da..654243d6 100644 --- a/src/OBJECT/VISU_GaussPtsDeviceActor.cxx +++ b/src/OBJECT/VISU_GaussPtsDeviceActor.cxx @@ -34,6 +34,7 @@ #include "VTKViewer_Transform.h" #include "VTKViewer_TransformFilter.h" +#include #include #include @@ -136,7 +137,8 @@ vtkStandardNewMacro(VISU_GaussDeviceActorBase); VISU_GaussDeviceActorBase ::VISU_GaussDeviceActorBase(): - myTransformFilter(VTKViewer_TransformFilter::New()) + myTransformFilter(VTKViewer_TransformFilter::New()), + myPolyDataExtractor(0) { if(MYDEBUG) MESSAGE("VISU_GaussDeviceActorBase - "<SetInput( aDataSet ); + if (myPolyDataExtractor) { + myPolyDataExtractor->SetInput(aDataSet); + myPassFilter[ anId ]->SetInput( myPolyDataExtractor->GetOutput() ); + } else { + myPassFilter[ anId ]->SetInput( aDataSet ); + } myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - + anId++; myTransformFilter->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); @@ -586,7 +593,7 @@ VISU_FramedTextActor::VISU_FramedTextActor() myTextProperty->SetFontFamilyToArial(); // myTextMapper=vtkTextMapper::New(); - myTextMapper->SetInput("some text"); + myTextMapper->SetInput(""); myTextMapper->GetTextProperty()->ShallowCopy(myTextProperty); myTextActor=vtkActor2D::New(); myTextActor->SetMapper(myTextMapper); diff --git a/src/OBJECT/VISU_GaussPtsDeviceActor.h b/src/OBJECT/VISU_GaussPtsDeviceActor.h index 7ff5c369..5b25e78e 100644 --- a/src/OBJECT/VISU_GaussPtsDeviceActor.h +++ b/src/OBJECT/VISU_GaussPtsDeviceActor.h @@ -43,6 +43,7 @@ class VISU_GaussPointsPL; class vtkPassThroughFilter; class vtkImageData; +class SALOME_ExtractPolyDataGeometry; //============================================================================ @@ -92,6 +93,13 @@ class VISU_GaussDeviceActorBase: public vtkLODActor virtual unsigned long int GetMemorySize(); + + //---------------------------------------------------------------------------- + void SetExtractor(SALOME_ExtractPolyDataGeometry* theExtractor) + { myPolyDataExtractor = theExtractor; } + + SALOME_ExtractPolyDataGeometry* GetExtractor() const + { return myPolyDataExtractor; } protected: //---------------------------------------------------------------------------- @@ -101,6 +109,8 @@ class VISU_GaussDeviceActorBase: public vtkLODActor typedef vtkSmartPointer PPassThroughFilter; std::vector myPassFilter; + SALOME_ExtractPolyDataGeometry* myPolyDataExtractor; + VISU_GaussDeviceActorBase(); ~VISU_GaussDeviceActorBase(); diff --git a/src/OBJECT/VISU_GaussPtsSettings.cxx b/src/OBJECT/VISU_GaussPtsSettings.cxx index 7c04a8f0..db7bd70d 100644 --- a/src/OBJECT/VISU_GaussPtsSettings.cxx +++ b/src/OBJECT/VISU_GaussPtsSettings.cxx @@ -30,6 +30,9 @@ #include #include +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" + #include #include @@ -39,7 +42,6 @@ vtkStandardNewMacro( VISU_GaussPtsSettings ); vtkStandardNewMacro( VISU_InsideCursorSettings ); vtkStandardNewMacro( VISU_OutsideCursorSettings ); -vtkStandardNewMacro( VISU_PickingSettings ); //---------------------------------------------------------------- VISU_GaussPtsSettings::VISU_GaussPtsSettings() @@ -86,44 +88,3 @@ VISU_OutsideCursorSettings::VISU_OutsideCursorSettings() : VISU_OutsideCursorSettings::~VISU_OutsideCursorSettings() { } - -//---------------------------------------------------------------- -VISU_PickingSettings::VISU_PickingSettings() -{ - float aCursorSize = 0.5; - float aPyramidHeight = 10.0; - float aPointTolerance = 0.1; - QColor aColor = Qt::yellow; - int anInfoWindowTransparency = 50; - int anInfoWindowPosition = VISU_PickingSettings::BelowPoint; - float aZoomFactor = 1.5; - int aStepNumber = 10; - bool aDisplayParentMesh = false; - - SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); - - this->CursorSize = aResourceMgr->doubleValue( "VISU", "picking_cursor_size", aCursorSize ); - - this->PyramidHeight = aResourceMgr->doubleValue( "VISU", "picking_pyramid_height", aPyramidHeight ); - - this->PointTolerance = aResourceMgr->doubleValue( "VISU", "picking_point_tolerance", aPointTolerance ); - - aColor = aResourceMgr->colorValue( "VISU", "picking_selection_color", aColor ); - this->Color[0] = aColor.red() / 255.0; - this->Color[1] = aColor.green() / 255.0; - this->Color[2] = aColor.blue() / 255.0; - - this->InfoWindowTransparency = aResourceMgr->integerValue( "VISU", "picking_transparency", anInfoWindowTransparency ) / 100.0; - - this->InfoWindowPosition = aResourceMgr->integerValue( "VISU", "picking_position", anInfoWindowPosition ); - - this->ZoomFactor = aResourceMgr->doubleValue( "VISU", "picking_zoom_factor", aZoomFactor ); - - this->StepNumber = aResourceMgr->integerValue( "VISU", "picking_step_number", aStepNumber ); - - this->DisplayParentMesh = aResourceMgr->booleanValue( "VISU", "picking_display_parent_mesh", aDisplayParentMesh ); -} - -VISU_PickingSettings::~VISU_PickingSettings() -{ -} diff --git a/src/OBJECT/VISU_GaussPtsSettings.h b/src/OBJECT/VISU_GaussPtsSettings.h index a34dbca6..11435aeb 100644 --- a/src/OBJECT/VISU_GaussPtsSettings.h +++ b/src/OBJECT/VISU_GaussPtsSettings.h @@ -44,7 +44,6 @@ namespace VISU const vtkIdType UpdateFromSettingsEvent = vtkCommand::UserEvent + 100; const vtkIdType UpdateInsideSettingsEvent = vtkCommand::UserEvent + 101; const vtkIdType UpdateOutsideSettingsEvent = vtkCommand::UserEvent + 102; - const vtkIdType UpdatePickingSettingsEvent = vtkCommand::UserEvent + 103; } @@ -162,68 +161,4 @@ class VTKOCC_EXPORT VISU_OutsideCursorSettings : public VISU_GaussPtsSettings vtkFloatingPointType Color[3]; }; - -//! Class of Picking settings. -/*! - * Contains information about the following parameters: - * Cursor Pyramid height, Info Window transparency, - * Info Window position, Zoom factor on first selected point, - * Camera movement steps number and Display parent mesh. - * Used by Gauss Points Actor. - */ -class VTKOCC_EXPORT VISU_PickingSettings : public vtkObject -{ - public: - enum { BelowPoint = 0, TopLeftCorner }; - - public: - vtkTypeMacro( VISU_PickingSettings, vtkObject ); - - VISU_PickingSettings(); - virtual ~VISU_PickingSettings(); - - static - VISU_PickingSettings* - New(); - - vtkSetMacro( PyramidHeight, vtkFloatingPointType ); - vtkGetMacro( PyramidHeight, vtkFloatingPointType ); - - vtkSetMacro( CursorSize, vtkFloatingPointType ); - vtkGetMacro( CursorSize, vtkFloatingPointType ); - - vtkSetVector3Macro( Color, vtkFloatingPointType ); - vtkGetVector3Macro( Color, vtkFloatingPointType ); - - vtkSetMacro( PointTolerance, vtkFloatingPointType ); - vtkGetMacro( PointTolerance, vtkFloatingPointType ); - - vtkSetMacro( InfoWindowTransparency, vtkFloatingPointType ); - vtkGetMacro( InfoWindowTransparency, vtkFloatingPointType ); - - vtkSetMacro( InfoWindowPosition, int ); - vtkGetMacro( InfoWindowPosition, int ); - - vtkSetMacro( ZoomFactor, vtkFloatingPointType ); - vtkGetMacro( ZoomFactor, vtkFloatingPointType ); - - vtkSetMacro( StepNumber, int ); - vtkGetMacro( StepNumber, int ); - - vtkSetMacro( DisplayParentMesh, bool ); - vtkGetMacro( DisplayParentMesh, bool ); - -private: - vtkFloatingPointType PyramidHeight; - vtkFloatingPointType CursorSize; - vtkFloatingPointType PointTolerance; - vtkFloatingPointType Color[3]; - vtkFloatingPointType InfoWindowTransparency; - int InfoWindowPosition; - vtkFloatingPointType ZoomFactor; - int StepNumber; - bool DisplayParentMesh; -}; - - #endif diff --git a/src/OBJECT/VISU_IsoSurfActor.cxx b/src/OBJECT/VISU_IsoSurfActor.cxx deleted file mode 100644 index 3c58fc47..00000000 --- a/src/OBJECT/VISU_IsoSurfActor.cxx +++ /dev/null @@ -1,165 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : VISU_IsoSurfActor.cxx -// Author : Vitaly Smetannikov -// Module : VISU - - -#include "VISU_IsoSurfActor.h" -#include "VISU_PipeLine.hxx" -#include "VISU_LabelPointsFilter.hxx" - - -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include - - - -//---------------------------------------------------------------------------- -vtkStandardNewMacro(VISU_IsoSurfActor); - - -//---------------------------------------------------------------------------- -VISU_IsoSurfActor::VISU_IsoSurfActor(): - VISU_ScalarMapAct(), - myIsLinesLabeled(true) -{ - myLabelsDataSet = vtkPolyData::New(); - -// myMaskPoints = vtkMaskPoints::New(); -// myMaskPoints->SetInput(myLabelsDataSet); -// myMaskPoints->SetOnRatio(100); - - myMaskPoints = VISU_LabelPointsFilter::New(); - myMaskPoints->SetInput(myLabelsDataSet); - - myLabeledDataMapper = vtkLabeledDataMapper::New(); - myLabeledDataMapper->SetInput(myMaskPoints->GetOutput()); - //myLabeledDataMapper->SetLabelFormat("%e"); - myLabeledDataMapper->SetLabelModeToLabelScalars(); - - myLabels = vtkActor2D::New(); - myLabels->SetMapper(myLabeledDataMapper); - myLabels->GetProperty()->SetColor(1,1,1); - myLabels->SetVisibility(myIsLinesLabeled); -} - - -//---------------------------------------------------------------------------- -VISU_IsoSurfActor::~VISU_IsoSurfActor() -{ - myLabelsDataSet->Delete(); - myMaskPoints->Delete(); - myLabeledDataMapper->Delete(); - myLabels->Delete(); -} - -//---------------------------------------------------------------------------- -void VISU_IsoSurfActor::SetLinesLabeled(bool theIsLinesLabeled, int theNbLbl) -{ - myIsLinesLabeled = theIsLinesLabeled; - myMaskPoints->SetPointsNb(theNbLbl); - Modified(); -} - -//---------------------------------------------------------------------------- -int VISU_IsoSurfActor::GetNbLabels() const -{ - return myMaskPoints->GetPointsNb(); -} - - -//---------------------------------------------------------------------------- -void VISU_IsoSurfActor::UpdateLabels() -{ - if (myIsLinesLabeled) { - vtkDataSet* aDataSet = GetPipeLine()->GetOutput(); - if (aDataSet != NULL) { - unsigned long aTime = myLabelsDataSet->GetMTime(); - unsigned long anObjTime = GetMTime(); - if (aTime < anObjTime) { - myLabelsDataSet->ShallowCopy(aDataSet); - myLabelsDataSet->Modified(); - } - } - } - myLabels->SetVisibility(myIsLinesLabeled); -} - - -//---------------------------------------------------------------------------- -void VISU_IsoSurfActor::AddToRender(vtkRenderer* theRenderer) -{ - VISU_ScalarMapAct::AddToRender(theRenderer); - theRenderer->AddActor2D(myLabels); -} - -//---------------------------------------------------------------------------- -void VISU_IsoSurfActor::RemoveFromRender(vtkRenderer* theRenderer) -{ - VISU_ScalarMapAct::RemoveFromRender(theRenderer); - theRenderer->RemoveActor(myLabels); -} - -//From vtkFollower -int VISU_IsoSurfActor::RenderOpaqueGeometry(vtkViewport *vp) -{ - UpdateLabels(); - return VISU_ScalarMapAct::RenderOpaqueGeometry(vp); -} - - -int VISU_IsoSurfActor::RenderTranslucentGeometry(vtkViewport *vp) -{ - UpdateLabels(); - return VISU_ScalarMapAct::RenderTranslucentGeometry(vp); -} - -void VISU_IsoSurfActor::SetVisibility(int theMode){ - VISU_ScalarMapAct::SetVisibility(theMode); - if(GetVisibility()) - myLabels->VisibilityOn(); - else - myLabels->VisibilityOff(); - Modified(); -} - - -///!!!! For test purposes only -// void VISU_IsoSurfActor::SetMapperInput(vtkDataSet* theDataSet) -// { -// VISU_ScalarMapAct::SetMapperInput(theDataSet); - -// vtkFeatureEdges* aFilter = vtkFeatureEdges::New(); -// aFilter->SetInput(VISU_ScalarMapAct::GetInput()); -// SetInput(aFilter->GetOutput()); -// } diff --git a/src/OBJECT/VISU_IsoSurfActor.h b/src/OBJECT/VISU_IsoSurfActor.h deleted file mode 100644 index 0377ae6a..00000000 --- a/src/OBJECT/VISU_IsoSurfActor.h +++ /dev/null @@ -1,88 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : VISU_IsoSurfActor.h -// Author : Vitaly Smetannikov -// Module : VISU - - -#ifndef VISU_VectorsAct_HeaderFile -#define VISU_VectorsAct_HeaderFile - -#include "VISU_ScalarMapAct.h" - -class vtkActor2D; -//class vtkMaskPoints; -class vtkLabeledDataMapper; -class vtkPolyData; -class VISU_LabelPointsFilter; - - -class VTKOCC_EXPORT VISU_IsoSurfActor : public VISU_ScalarMapAct -{ - public: - vtkTypeMacro(VISU_IsoSurfActor, VISU_ScalarMapAct); - - static VISU_IsoSurfActor* New(); - - - //---------------------------------------------------------------------------- - virtual void AddToRender( vtkRenderer* ); - - virtual void RemoveFromRender( vtkRenderer* ); - - virtual int RenderOpaqueGeometry(vtkViewport *viewport); - virtual int RenderTranslucentGeometry(vtkViewport *viewport); - - //virtual void SetPipeLine(VISU_PipeLine* thePipeLine); - - void SetLinesLabeled(bool theIsLinesLabeled, int theNbLbl); - bool GetLinesLabeled() const { return myIsLinesLabeled;} - - int GetNbLabels() const; - - - //---------------------------------------------------------------------------- - //! Visibility management - virtual void SetVisibility( int ); - - - protected: - - VISU_IsoSurfActor(); - ~VISU_IsoSurfActor(); - - void UpdateLabels(); - - vtkActor2D *myLabels; - vtkLabeledDataMapper* myLabeledDataMapper; - //vtkMaskPoints* myMaskPoints; - VISU_LabelPointsFilter* myMaskPoints; - vtkPolyData* myLabelsDataSet; - - bool myIsLinesLabeled; - //int myNbLabels; -}; - - -#endif diff --git a/src/OBJECT/VISU_MeshAct.cxx b/src/OBJECT/VISU_MeshAct.cxx index cf2e7cfc..486498da 100644 --- a/src/OBJECT/VISU_MeshAct.cxx +++ b/src/OBJECT/VISU_MeshAct.cxx @@ -212,6 +212,64 @@ VISU_MeshAct myEdgeActor->UnShrink(); } +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetFeatureEdgesAllowed(bool theIsFeatureEdgesAllowed) +{ + Superclass::SetFeatureEdgesAllowed(theIsFeatureEdgesAllowed); + + mySurfaceActor->SetFeatureEdgesAllowed(theIsFeatureEdgesAllowed); +} + +void +VISU_MeshAct +::SetFeatureEdgesAngle(vtkFloatingPointType theValue) +{ + Superclass::SetFeatureEdgesAngle(theValue); + + mySurfaceActor->SetFeatureEdgesAngle(theValue); +} + +void +VISU_MeshAct +::SetFeatureEdgesFlags(bool theIsFeatureEdges, + bool theIsBoundaryEdges, + bool theIsManifoldEdges, + bool theIsNonManifoldEdges) +{ + Superclass::SetFeatureEdgesFlags(theIsFeatureEdges, + theIsBoundaryEdges, + theIsManifoldEdges, + theIsNonManifoldEdges); + + mySurfaceActor->SetFeatureEdgesFlags(theIsFeatureEdges, + theIsBoundaryEdges, + theIsManifoldEdges, + theIsNonManifoldEdges); +} + +void +VISU_MeshAct +::SetFeatureEdgesColoring(bool theIsColoring) +{ + Superclass::SetFeatureEdgesColoring(theIsColoring); + + mySurfaceActor->SetFeatureEdgesColoring(theIsColoring); +} + +//---------------------------------------------------------------------------- +void +VISU_MeshAct +::SetFeatureEdgesEnabled(bool theIsFeatureEdgesEnabled) +{ + if(theIsFeatureEdgesEnabled && myRepresentation == VTK_POINTS) + return; + + Superclass::SetFeatureEdgesEnabled(theIsFeatureEdgesEnabled); + + mySurfaceActor->SetFeatureEdgesEnabled(theIsFeatureEdgesEnabled); +} //---------------------------------------------------------------------------- void @@ -288,6 +346,10 @@ VISU_MeshAct myEdgeActor->SetAllocatedRenderTime(this->AllocatedRenderTime/2.0,ren); myEdgeActor->RenderOpaqueGeometry(ren); break; + case FeatureEdges : + mySurfaceActor->SetAllocatedRenderTime(this->AllocatedRenderTime,ren); + mySurfaceActor->RenderOpaqueGeometry(ren); + break; } return 1; } @@ -322,6 +384,10 @@ VISU_MeshAct myEdgeActor->SetAllocatedRenderTime(this->AllocatedRenderTime/2.0,ren); myEdgeActor->RenderTranslucentGeometry(ren); break; + case FeatureEdges : + mySurfaceActor->SetAllocatedRenderTime(this->AllocatedRenderTime,ren); + mySurfaceActor->RenderTranslucentGeometry(ren); + break; } return 1; } diff --git a/src/OBJECT/VISU_MeshAct.h b/src/OBJECT/VISU_MeshAct.h index 5a5778d3..86ea7308 100644 --- a/src/OBJECT/VISU_MeshAct.h +++ b/src/OBJECT/VISU_MeshAct.h @@ -99,6 +99,29 @@ class VTKOCC_EXPORT VISU_MeshAct : public VISU_DataSetActor void UnShrink(); + virtual + void + SetFeatureEdgesAllowed(bool theIsFeatureEdgesAllowed); + + virtual + void + SetFeatureEdgesEnabled(bool theIsFeatureEdgesEnabled); + + virtual + void + SetFeatureEdgesAngle(vtkFloatingPointType theAngle = 30.0); + + virtual + void + SetFeatureEdgesFlags(bool theIsFeatureEdges, + bool theIsBoundaryEdges, + bool theIsManifoldEdges, + bool theIsNonManifoldEdges); + + virtual + void + SetFeatureEdgesColoring(bool theIsColoring); + //! Gets memory size used by the instance (bytes). virtual unsigned long int diff --git a/src/OBJECT/VISU_PointMap3dActor.cxx b/src/OBJECT/VISU_PointMap3dActor.cxx deleted file mode 100644 index 933cf60b..00000000 --- a/src/OBJECT/VISU_PointMap3dActor.cxx +++ /dev/null @@ -1,149 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : -// Author : -// Module : VISU -// $Header$ - -#include "VISU_PointMap3dActor.h" -#include "VISU_PipeLine.hxx" -#include "VISU_ScalarBarActor.hxx" -#include "VISU_DeformedGridPL.hxx" - -#include - -#include "utilities.h" -#include -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -vtkStandardNewMacro(VISU_PointMap3dActor); - -//================================================================== -// function: Constructor -// purpose : -//================================================================== - -VISU_PointMap3dActor -::VISU_PointMap3dActor() -{ - if(MYDEBUG) MESSAGE("VISU_PointMap3dActor::VISU_PointMap3dActor - this = "< myPipeLine; - - VISU_ScalarBarActor* myScalarBar; -}; - -#endif diff --git a/src/OBJECT/VISU_ScalarMapAct.cxx b/src/OBJECT/VISU_ScalarMapAct.cxx index 90816504..790bc9fc 100644 --- a/src/OBJECT/VISU_ScalarMapAct.cxx +++ b/src/OBJECT/VISU_ScalarMapAct.cxx @@ -36,6 +36,9 @@ #include "VISU_DeformedShapePL.hxx" #include "VISU_PipeLineUtils.hxx" +#include +#include + #include #include #include @@ -258,7 +261,7 @@ void VISU_ScalarMapAct ::ShallowCopyPL(VISU_PipeLine* thePipeLine) { - VISU_Actor::ShallowCopyPL( thePipeLine ); + VISU_DataSetActor::ShallowCopyPL( thePipeLine ); myEdgeActor->GetMapper()->ScalarVisibilityOff(); @@ -274,10 +277,19 @@ VISU_ScalarMapAct { Superclass::SetMapperInput( theDataSet ); - myPointsActor->SetInput( theDataSet ); +// myPointsActor->SetInput( theDataSet ); +// mySurfaceActor->SetInput( theDataSet ); +// myEdgeActor->SetInput( theDataSet ); - mySurfaceActor->SetInput( theDataSet ); - myEdgeActor->SetInput( theDataSet ); + if (theDataSet->IsA("vtkPolyData")) { + myPointsActor->SetInput( myPolyDataExtractor->GetOutput() ); + mySurfaceActor->SetInput( myPolyDataExtractor->GetOutput() ); + myEdgeActor->SetInput( myPolyDataExtractor->GetOutput() ); + } else { + myPointsActor->SetInput( myExtractor->GetOutput() ); + mySurfaceActor->SetInput( myExtractor->GetOutput() ); + myEdgeActor->SetInput( myExtractor->GetOutput() ); + } } //---------------------------------------------------------------------------- @@ -334,6 +346,65 @@ VISU_ScalarMapAct mySurfaceActor->UnShrink(); } +//---------------------------------------------------------------------------- +void +VISU_ScalarMapAct +::SetFeatureEdgesAllowed(bool theIsFeatureEdgesAllowed) +{ + Superclass::SetFeatureEdgesAllowed(theIsFeatureEdgesAllowed); + + mySurfaceActor->SetFeatureEdgesAllowed(theIsFeatureEdgesAllowed); +} + +void +VISU_ScalarMapAct +::SetFeatureEdgesAngle(vtkFloatingPointType theValue) +{ + Superclass::SetFeatureEdgesAngle(theValue); + + mySurfaceActor->SetFeatureEdgesAngle(theValue); +} + +void +VISU_ScalarMapAct +::SetFeatureEdgesFlags(bool theIsFeatureEdges, + bool theIsBoundaryEdges, + bool theIsManifoldEdges, + bool theIsNonManifoldEdges) +{ + Superclass::SetFeatureEdgesFlags(theIsFeatureEdges, + theIsBoundaryEdges, + theIsManifoldEdges, + theIsNonManifoldEdges); + + mySurfaceActor->SetFeatureEdgesFlags(theIsFeatureEdges, + theIsBoundaryEdges, + theIsManifoldEdges, + theIsNonManifoldEdges); +} + +void +VISU_ScalarMapAct +::SetFeatureEdgesColoring(bool theIsColoring) +{ + Superclass::SetFeatureEdgesColoring(theIsColoring); + + mySurfaceActor->SetFeatureEdgesColoring(theIsColoring); +} + +//---------------------------------------------------------------------------- +void +VISU_ScalarMapAct +::SetFeatureEdgesEnabled(bool theIsFeatureEdgesEnabled) +{ + if(theIsFeatureEdgesEnabled && myRepresentation == VTK_POINTS) + return; + + Superclass::SetFeatureEdgesEnabled(theIsFeatureEdgesEnabled); + + mySurfaceActor->SetFeatureEdgesEnabled(theIsFeatureEdgesEnabled); +} + //---------------------------------------------------------------------------- void VISU_ScalarMapAct diff --git a/src/OBJECT/VISU_ScalarMapAct.h b/src/OBJECT/VISU_ScalarMapAct.h index 8589d05d..d67cfa5f 100644 --- a/src/OBJECT/VISU_ScalarMapAct.h +++ b/src/OBJECT/VISU_ScalarMapAct.h @@ -77,6 +77,29 @@ class VTKOCC_EXPORT VISU_ScalarMapAct : public VISU_DataSetActor void UnShrink(); + virtual + void + SetFeatureEdgesAllowed(bool theIsFeatureEdgesAllowed); + + virtual + void + SetFeatureEdgesEnabled(bool theIsFeatureEdgesEnabled); + + virtual + void + SetFeatureEdgesAngle(vtkFloatingPointType theAngle = 30.0); + + virtual + void + SetFeatureEdgesFlags(bool theIsFeatureEdges, + bool theIsBoundaryEdges, + bool theIsManifoldEdges, + bool theIsNonManifoldEdges); + + virtual + void + SetFeatureEdgesColoring(bool theIsColoring); + virtual void SetOpacity(vtkFloatingPointType theValue); diff --git a/src/OBJECT/VISU_VectorsAct.cxx b/src/OBJECT/VISU_VectorsAct.cxx index 7a157e23..f878dcf9 100644 --- a/src/OBJECT/VISU_VectorsAct.cxx +++ b/src/OBJECT/VISU_VectorsAct.cxx @@ -36,6 +36,9 @@ #include #include #include +#include +#include +#include //---------------------------------------------------------------------------- vtkStandardNewMacro(VISU_VectorsAct); @@ -120,3 +123,24 @@ VISU_VectorsAct return aSize; } + +//---------------------------------------------------------------------------- +vtkDataSet* +VISU_VectorsAct +::GetValLabelsInput() +{ + VISU_VectorsPL* aPL = dynamic_cast( GetPipeLine() ); + if ( aPL ) + { + return aPL->GetMergedInput(); + /*VISU_UsedPointsFilter* aFilter = aPL->GetUsedPointsFilter(); + vtkSmartPointer< VISU_MergeFilter > aFilter = aPL->myMergeFilter; + if ( aFilter ) + { + aFilter->Update(); + return aFilter->GetOutput(); + }*/ + } + + return Superclass::GetValLabelsInput(); +} diff --git a/src/OBJECT/VISU_VectorsAct.h b/src/OBJECT/VISU_VectorsAct.h index cc76ce48..5c409c57 100644 --- a/src/OBJECT/VISU_VectorsAct.h +++ b/src/OBJECT/VISU_VectorsAct.h @@ -65,6 +65,10 @@ class VTKOCC_EXPORT VISU_VectorsAct : public VISU_ScalarMapAct virtual unsigned long int GetMemorySize(); + + virtual + vtkDataSet* + GetValLabelsInput(); protected: VISU_VectorsAct(); diff --git a/src/PIPELINE/Makefile.am b/src/PIPELINE/Makefile.am index 425f955c..8c488c75 100644 --- a/src/PIPELINE/Makefile.am +++ b/src/PIPELINE/Makefile.am @@ -69,7 +69,8 @@ salomeinclude_HEADERS= \ VISU_ElnoDisassembleFilter.hxx \ VISU_ElnoAssembleFilter.hxx \ VISU_DeformationPL.hxx \ - VISU_OptionalDeformationPL.hxx + VISU_OptionalDeformationPL.hxx \ + VISU_XYPlotActor.hxx dist_libVisuPipeLine_la_SOURCES= \ VISU_MapperHolder.cxx \ @@ -111,7 +112,8 @@ dist_libVisuPipeLine_la_SOURCES= \ VISU_ElnoDisassembleFilter.cxx \ VISU_ElnoAssembleFilter.cxx \ VISU_DeformationPL.cxx \ - VISU_OptionalDeformationPL.cxx + VISU_OptionalDeformationPL.cxx\ + VISU_XYPlotActor.cxx libVisuPipeLine_la_CPPFLAGS= \ $(VTK_INCLUDES) \ diff --git a/src/PIPELINE/SALOME_ExtractGeometry.h b/src/PIPELINE/SALOME_ExtractGeometry.h index ed9c0749..8fbf41f6 100755 --- a/src/PIPELINE/SALOME_ExtractGeometry.h +++ b/src/PIPELINE/SALOME_ExtractGeometry.h @@ -20,6 +20,8 @@ #ifndef SALOME_ExtractGeometry_H #define SALOME_ExtractGeometry_H +#include "VISUPipeline.hxx" + #include #include @@ -27,7 +29,7 @@ class vtkImplicitBoolean; -class SALOME_ExtractGeometry : public vtkExtractGeometry +class VISU_PIPELINE_EXPORT SALOME_ExtractGeometry : public vtkExtractGeometry { public: vtkTypeMacro(SALOME_ExtractGeometry, vtkExtractGeometry); diff --git a/src/PIPELINE/SALOME_ExtractPolyDataGeometry.h b/src/PIPELINE/SALOME_ExtractPolyDataGeometry.h index 05b03918..1b3bf436 100644 --- a/src/PIPELINE/SALOME_ExtractPolyDataGeometry.h +++ b/src/PIPELINE/SALOME_ExtractPolyDataGeometry.h @@ -20,6 +20,8 @@ #ifndef SALOME_ExtractPolyDataGeometry_H #define SALOME_ExtractPolyDataGeometry_H +#include "VISUPipeline.hxx" + #include #include @@ -27,7 +29,7 @@ class vtkImplicitBoolean; -class SALOME_ExtractPolyDataGeometry : public vtkExtractPolyDataGeometry +class VISU_PIPELINE_EXPORT SALOME_ExtractPolyDataGeometry : public vtkExtractPolyDataGeometry { public: vtkTypeMacro(SALOME_ExtractPolyDataGeometry, vtkExtractPolyDataGeometry); diff --git a/src/PIPELINE/VISUPipeLine.cxx b/src/PIPELINE/VISUPipeLine.cxx index 291c457a..0881f71a 100644 --- a/src/PIPELINE/VISUPipeLine.cxx +++ b/src/PIPELINE/VISUPipeLine.cxx @@ -34,6 +34,7 @@ #include "VISU_IsoSurfacesPL.hxx" #include "VISU_CutPlanesPL.hxx" #include "VISU_CutLinesPL.hxx" +#include "VISU_ColoredPL.hxx" #include "VISU_DeformedShapePL.hxx" #include "VISU_VectorsPL.hxx" #include "VISU_StreamLinesPL.hxx" @@ -48,7 +49,9 @@ #include "VISU_ElnoDisassembleFilter.hxx" #include "VISU_ElnoAssembleFilter.hxx" -typedef VISU_ScalarMapPL TPresent; +//typedef VISU_CutPlanesPL TPresent; +//typedef VISU_ScalarMapPL TPresent; +typedef VISU_CutLinesPL TPresent; // VTK includes #include @@ -73,8 +76,42 @@ typedef VISU_ScalarMapPL TPresent; #include #include +//RKV:Begin +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/*#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +*/ +//RKV:End + #include "utilities.h" +static int isOnlyMesh = false; + void PrintMissing(){ MESSAGE(std::endl << "VISUPipeLine : missing operand after `VISUPipeLine'" << std::endl << "VISUPipeLine : Try `VISUPipeLine -h' for more information."); @@ -95,6 +132,159 @@ void PrintHelp(){ void PrintErr(){ MESSAGE("***************************ERROR*****************************************"); } +//#define _DEBUG_ID_MAPPING_ + +//RKV:Begin +/* +vtkActor* barChartActor() +{ + int numTuples = 6; + + vtkFloatArray *bitter = vtkFloatArray::New(); + bitter->SetNumberOfTuples(numTuples); + + for (int i=0; iSetTuple1(i, vtkMath::Random(7,100)); + } + + vtkDataObject *dobj = vtkDataObject::New(); + dobj->GetFieldData()->AddArray(bitter); + + vtkBarChartActor *actor = vtkBarChartActor::New(); + actor->SetInput(dobj); + actor->SetTitle("Bar Chart"); + actor->GetPositionCoordinate()->SetValue(0.05,0.05,0.0); + actor->GetPosition2Coordinate()->SetValue(0.95,0.85,0.0); + actor->GetProperty()->SetColor(1,1,1); + actor->GetLegendActor()->SetNumberOfEntries(numTuples); + for (int i=0; iSetBarColor(i,red,green,blue); + } + actor->SetBarLabel(0,"oil"); + actor->SetBarLabel(1,"gas"); + actor->SetBarLabel(2,"water"); + actor->SetBarLabel(3,"snake oil"); + actor->SetBarLabel(4,"tequila"); + actor->SetBarLabel(5,"beer"); + actor->LegendVisibilityOn(); + + // Set text colors (same as actor for backward compat with test) + actor->GetTitleTextProperty()->SetColor(1,1,0); + actor->GetLabelTextProperty()->SetColor(1,0,0); + return actor; +} +*/ +//RKV:End +//---------------------------------------------------------------------------- +template +VISU_ColoredPL* +CreateColoredPL(VISU_Convertor* theConvertor, + const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theTimeStampNumber); + + +//---------------------------------------------------------------------------- +template<> +VISU_ColoredPL* +CreateColoredPL(VISU_Convertor* theConvertor, + const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theTimeStampNumber) +{ + VISU_GaussPointsPL* aPresent = VISU_GaussPointsPL::New(); + VISU::PGaussPtsIDMapper aGaussPtsIDMapper = + theConvertor->GetTimeStampOnGaussPts(theMeshName, + theEntity, + theFieldName, + theTimeStampNumber); + aPresent->SetGaussPtsIDMapper(aGaussPtsIDMapper); + + char aMainTexture[80]; + strcpy( aMainTexture, getenv( "VISU_ROOT_DIR" ) ); + strcat( aMainTexture, "/share/salome/resources/visu/sprite_texture.bmp" ); + + char anAlphaTexture[80]; + strcpy( anAlphaTexture, getenv( "VISU_ROOT_DIR" ) ); + strcat( anAlphaTexture, "/share/salome/resources/visu/sprite_alpha.bmp" ); + + vtkSmartPointer aTextureValue = + VISU_GaussPointsPL::MakeTexture( aMainTexture, anAlphaTexture ); + aPresent->SetImageData( aTextureValue.GetPointer() ); + + aPresent->Update(); + +#ifdef _DEBUG_ID_MAPPING_ + vtkDataSet* aDataSet = aPresent->GetOutput(); + aDataSet->Update(); + int aNbCells = aDataSet->GetNumberOfCells(); + cout<<"aNbCells = "<GetNodeObjID(anCellId); + vtkIdType aVtkID = aPresent->GetNodeVTKID(anObjID); + cout<GetNodeCoord(anObjID); + cout< +VISU_ColoredPL* +CreateColoredPL(VISU_Convertor* theConvertor, + const std::string& theMeshName, + const VISU::TEntity& theEntity, + const std::string& theFieldName, + int theTimeStampNumber) +{ + TPipeLine* aPresent = TPipeLine::New(); + VISU::PUnstructuredGridIDMapper anUnstructuredGridIDMapper = + theConvertor->GetTimeStampOnMesh(theMeshName, + theEntity, + theFieldName, + theTimeStampNumber); + aPresent->SetUnstructuredGridIDMapper(anUnstructuredGridIDMapper); + + vtkFloatingPointType aRange[] = { 4, 5 }; +cout << "before filter limits set" << endl; + vtkObject::GlobalWarningDisplayOn(); + aPresent->DebugOn(); + aPresent->SetScalarFilterRange( aRange ); + aPresent->UseScalarFiltering( true ); +cout << "after filter set" << endl; + + //aPresent->ClearGeometry(); + //{ + // VISU::PUnstructuredGridIDMapper anIDMapper = + // theConvertor->GetMeshOnGroup(theMeshName, + // "groupe1"); + // aPresent->AddGeometry(anIDMapper->GetOutput()); + //} + //{ + // VISU::PUnstructuredGridIDMapper anIDMapper = + // theConvertor->GetMeshOnGroup(theMeshName, + // "TUBEH "); + // aPresent->AddGeometry(anIDMapper->GetOutput()); + //} + //{ + // VISU::PUnstructuredGridIDMapper anIDMapper = + // theConvertor->GetMeshOnGroup(theMeshName, + // "STRI "); + // aPresent->AddGeometry(anIDMapper->GetOutput()); + //} + aPresent->Update(); +cout << "after update" << endl; + return aPresent; +} //---------------------------------------------------------------------------- @@ -187,106 +377,260 @@ main(int argc, char** argv) const VISU::TMeshMap& aMeshMap = aConvertor->GetMeshMap(); VISU::TMeshMap::const_iterator aMeshMapIter = aMeshMap.begin(); if(aMeshMapIter == aMeshMap.end()) return 0; - //Iterate by meshes - for (;aMeshMapIter != aMeshMap.end();aMeshMapIter++) { - - const std::string& theMeshName = aMeshMapIter->first; - if( strcmp(aMeshName, theMeshName.c_str()) ) - continue; - else - isMeshOk = true; - - const VISU::PMesh aMesh = aMeshMapIter->second; - const VISU::TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; - VISU::TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter; - - aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); - //Iterate by meshes on entity - for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++) { - const VISU::TEntity& anEntity = aMeshOnEntityMapIter->first; - const VISU::PMeshOnEntity aMeshOnEntity = aMeshOnEntityMapIter->second; - - const VISU::TFieldMap& aFieldMap = aMeshOnEntity->myFieldMap; - VISU::TFieldMap::const_iterator aFieldMapIter = aFieldMap.begin(); - - //Iterate by field - for(; aFieldMapIter != aFieldMap.end(); aFieldMapIter++){ - const VISU::PField aField = aFieldMapIter->second; - const std::string& theFieldName = aFieldMapIter->first; - - if( strcmp(aFieldName, theFieldName.c_str()) ) - continue; - else - isFieldOk = true; - - if(aComponentNumber > aField->myNbComp) - continue; - else - isComponentOk = true; - - const VISU::TValField& aValField = aField->myValField; - VISU::TValField::const_iterator aValFieldIter = aValField.find(aTimeStampNumber); - if(aValFieldIter == aValField.end()) - continue; - else - isTimeStampOk = true; - - int aTimeStamp = aValFieldIter->first; - - vtkActor* anActor = vtkActor::New(); - - if(anEntity != VISU::NODE_ENTITY){ - VISU::PUnstructuredGridIDMapper anUnstructuredGridIDMapper = - aConvertor->GetTimeStampOnMesh(theMeshName, - anEntity, - theFieldName, - aTimeStamp); - - vtkUnstructuredGrid* anUnstructuredGrid = anUnstructuredGridIDMapper->GetUnstructuredGridOutput(); - VISU::WriteToFile( anUnstructuredGrid, "/data/apo/elno_from_id_mapper.vtk" ); - - VISU_ElnoDisassembleFilter* aDisassembleFilter = VISU_ElnoDisassembleFilter::New(); - aDisassembleFilter->SetInput( anUnstructuredGrid ); - aDisassembleFilter->SetShrinkFactor( 0.999 ); - VISU::WriteToFile( aDisassembleFilter->GetOutput(), "/data/apo/elno_from_disassemble.vtk" ); - - vtkCutter *aCutter = vtkCutter::New(); - - vtkPointLocator* aPointLocator = vtkPointLocator::New(); - aCutter->SetLocator( aPointLocator ); - aPointLocator->Delete(); - - TPresent* aPresent = TPresent::New(); - aPresent->SetUnstructuredGridIDMapper( anUnstructuredGridIDMapper ); - //aPresent->SetOrientation( VISU_CutPlanesPL::ZX, 0.0, 0.0, 0 ); - aPresent->Update(); - - aPresent->GetMapper()->InterpolateScalarsBeforeMappingOn(); - anActor->SetMapper( aPresent->GetMapper() ); - - vtkScalarBarActor* aScalarBar = vtkScalarBarActor::New(); - //aScalarBar->SetLookupTable( aMapperTable ); - aScalarBar->SetLookupTable( aPresent->GetBarTable() ); - - - vtkScalarBarWidget* aWidget = vtkScalarBarWidget::New(); - aWidget->SetScalarBarActor( aScalarBar ); - aWidget->SetInteractor( anInteractor ); - aWidget->SetEnabled( true ); - - aRenderer->AddActor(anActor); - aRenderer->AddActor2D(aScalarBar); - }else{ - continue; - } - - aWindow->Render(); - aRenderer->ResetCamera(); - - anInteractor->Start(); - return 0; - } - } + const std::string& aMeshName = aMeshMapIter->first; + const VISU::PMesh aMesh = aMeshMapIter->second; + const VISU::TMeshOnEntityMap& aMeshOnEntityMap = aMesh->myMeshOnEntityMap; + VISU::TMeshOnEntityMap::const_iterator aMeshOnEntityMapIter; + if(isOnlyMesh){ + const VISU::TEntity& anEntity = VISU::CELL_ENTITY; + aMeshOnEntityMapIter = aMeshOnEntityMap.find(anEntity); + + VISU::PNamedIDMapper anIDMapper = + aConvertor->GetMeshOnEntity(aMeshName,anEntity); + + VISU_MeshPL* aPresent = VISU_MeshPL::New(); + aPresent->SetUnstructuredGridIDMapper(anIDMapper); + + vtkActor* aActor = vtkActor::New(); + aActor->SetMapper(aPresent->GetMapper()); + aActor->GetProperty()->SetRepresentation(VTK_WIREFRAME); + //aRenderer->ResetCameraClippingRange(); + + aRenderer->AddActor(aActor); + + aWindow->Render(); + anInteractor->Start(); + return 0; + } + //Import fields + aMeshOnEntityMapIter = aMeshOnEntityMap.begin(); + for(; aMeshOnEntityMapIter != aMeshOnEntityMap.end(); aMeshOnEntityMapIter++) { + const VISU::TEntity& anEntity = aMeshOnEntityMapIter->first; + const VISU::PMeshOnEntity aMeshOnEntity = aMeshOnEntityMapIter->second; + const VISU::TFieldMap& aFieldMap = aMeshOnEntity->myFieldMap; + VISU::TFieldMap::const_iterator aFieldMapIter = aFieldMap.begin(); + for(; aFieldMapIter != aFieldMap.end(); aFieldMapIter++){ + const VISU::PField aField = aFieldMapIter->second; +// if(aField->myNbComp == 1) +// continue; + const std::string& aFieldName = aFieldMapIter->first; + const VISU::TValField& aValField = aField->myValField; + VISU::TValField::const_reverse_iterator aValFieldIter = aValField.rbegin(); + if(aValFieldIter == aValField.rend()) return 0; + int aTimeStamp = aValFieldIter->first; + + vtkActor* anActor = vtkActor::New(); + VISU_ColoredPL* aPresent = NULL; + if(anEntity == VISU::NODE_ENTITY){ + aPresent = CreateColoredPL(aConvertor, + aMeshName, + anEntity, + aFieldName, + aTimeStamp); + + anActor->SetMapper(aPresent->GetMapper()); + }else{ + continue; + aPresent = CreateColoredPL(aConvertor, + aMeshName, + anEntity, + aFieldName, + aTimeStamp); + + VTKViewer_GeometryFilter* aGeometryFilter = VTKViewer_GeometryFilter::New(); + aGeometryFilter->SetInput(aPresent->GetOutput()); + aGeometryFilter->SetInside(true); + + vtkMaskPoints* aMaskPoints = vtkMaskPoints::New(); + aMaskPoints->SetInput(aGeometryFilter->GetOutput()); + aMaskPoints->SetGenerateVertices(true); + aMaskPoints->SetOnRatio(1); + + VISU_OpenGLPointSpriteMapper* aMapper = VISU_OpenGLPointSpriteMapper::New(); + aMapper->SetAverageCellSize( VISU_DeformedShapePL::GetScaleFactor( aPresent->GetOutput() ) ); + + char aMainTexture[80]; + strcpy( aMainTexture, getenv( "VISU_ROOT_DIR" ) ); + strcat( aMainTexture, "/share/salome/resources/visu/sprite_texture.vti" ); + + char anAlphaTexture[80]; + strcpy( anAlphaTexture, getenv( "VISU_ROOT_DIR" ) ); + strcat( anAlphaTexture, "/share/salome/resources/visu/sprite_alpha.vti" ); + + vtkSmartPointer aTextureValue = + VISU_GaussPointsPL::MakeTexture( aMainTexture, anAlphaTexture ); + aMapper->SetImageData( aTextureValue.GetPointer() ); + + //vtkPolyDataMapper* aMapper = vtkPolyDataMapper::New(); + aMapper->SetLookupTable(aPresent->GetMapperTable()); + aMapper->SetUseLookupTableScalarRange(true); + aMapper->SetColorModeToMapScalars(); + aMapper->SetScalarVisibility(true); + + aMapper->SetInput(aMaskPoints->GetOutput()); + aGeometryFilter->Delete(); + + anActor->SetMapper(aMapper); + aMapper->Delete(); + } + + + + + +//RKV:Begin + vtkLookupTable* lut = vtkLookupTable::New(); + int nbColors = aPresent->GetNbColors(); + lut->SetNumberOfTableValues(nbColors); + vtkDataArray* dataArr; + if(VISU::IsDataOnCells(aPresent->GetInput())) { + dataArr = aPresent->GetInput()->GetCellData()->GetScalars(); + } else { + dataArr = aPresent->GetInput()->GetPointData()->GetScalars(); + } + vtkFloatingPointType aRange[2]; + dataArr->GetRange(aRange); + MSG(true, "Range[0]: "<SetTableRange(aRange); + lut->Build(); + MSG(true, "1\n"); + vtkIntArray* distr = vtkIntArray::New(); + distr->SetNumberOfValues(nbColors); + MSG(true, "Number of colors: "<FillComponent(0, 0.); + MSG(true, "2\n"); + int aNbVals = dataArr->GetNumberOfTuples(); + int idx = 0, cnt = 0; + + MSG(true, "3\n"); + for(vtkIdType aValId = 0; aValId < aNbVals; aValId++){ +// MSG(true, "Value: "<< *(dataArr->GetTuple(aValId))); + idx = lut->GetIndex(*(dataArr->GetTuple(aValId))); +// MSG(true, "Value index "<GetValue(idx); + distr->SetValue(idx, cnt + 1); + } + MSG(true, "4\n"); + distr->Modified(); + double range[2]; + distr->GetRange(range); + MSG(true, "DistrRange[0]: " << range[0]); + MSG(true, "DistrRange[1]: " << range[1]); + MSG(true, "5\n"); +// vtkPoints* points = vtkPoints::New(); +// aNbVals = distr->GetNumberOfTuples(); +// points->Allocate(aNbVals); +// double x[3] = {0., 0., 0.}; +/* for(vtkIdType aValId = 0; aValId < aNbVals; aValId++){ + x[0] = aValId; + points->InsertPoint(aValId, x); +*/// MSG(true, "Inserted point "<GetValue(aValId)); +// } +// points->SetData(distr); + +/* vtkPointSet* pset = vtkPolyData::New(); + pset->SetPoints(points); + pset->GetPointData()->SetScalars(distr); +*/ + vtkDataObject *dobj = vtkDataObject::New(); + dobj->GetFieldData()->AddArray(distr); + + vtkXYPlotActor* xyplot = vtkXYPlotActor::New(); +// xyplot->AddInput(pset); + xyplot->AddDataObjectInput(dobj); + xyplot->GetPositionCoordinate()->SetValue(0.0, 0.67, 0); + xyplot->GetPosition2Coordinate()->SetValue(1.0, 0.33, 0); // #relative to Position + xyplot->SetXValuesToIndex(); +// xyplot->SetXValuesToNormalizedArcLength(); +// xyplot->SetXValuesToArcLength(); +// xyplot->SetNumberOfXLabels(0); + xyplot->SetTitle(""); + xyplot->SetXTitle(""); + xyplot->SetYTitle("Distribution"); +// xyplot->ReverseYAxisOn(); +// xyplot->SetDataObjectPlotModeToRows(); + xyplot->SetLabelFormat("%.0f"); + xyplot->SetXRange(0, nbColors-1); + xyplot->SetYRange(range[0], range[1]); +/* int ny = floor(fabs(range[1] - range[0])); + MSG(true, "ny = "<SetNumberOfYLabels(ny); + MSG(true, "nbYLabels = "<GetNumberOfYLabels()); + } +*/ xyplot->GetProperty()->SetColor(1, 1, 1); + xyplot->GetProperty()->SetLineWidth(2); + xyplot->GetProperty()->SetDisplayLocationToForeground(); +/* vtkMatrix4x4 *m = vtkMatrix4x4::New(); + MSG(true, "5.1\n"); + m->Zero(); + MSG(true, "5.2\n"); + m->SetElement(0, 1, 1); + m->SetElement(1, 0, -1); + m->SetElement(2, 2, 1); + m->SetElement(3, 3, 1); + MSG(true, "5.3\n"); + xyplot->PokeMatrix(m); +*/ //# Set text prop color (same color for backward compat with test) + //# Assign same object to all text props + vtkTextProperty* tprop; + tprop = xyplot->GetTitleTextProperty(); + tprop->SetColor(xyplot->GetProperty()->GetColor()); + xyplot->SetAxisTitleTextProperty(tprop); + xyplot->SetAxisLabelTextProperty(tprop); + +//RKV:End + + + MSG(true, "6\n"); + +/*{ + vtkXYPlotWidget* aWidget = vtkXYPlotWidget::New(); + aWidget->SetInteractor( anInteractor ); + aWidget->SetXYPlotActor( xyplot ); + aWidget->SetEnabled( 1 ); +}*/ + + + vtkObject::GlobalWarningDisplayOn(); + + VISU_ScalarBarActor * aScalarBar = VISU_ScalarBarActor::New(); + //vtkScalarBarActor * aScalarBar = vtkScalarBarActor::New(); + aPresent->SetNbColors(5); + aPresent->DebugOn(); + aPresent->Update(); + aScalarBar->SetLookupTable(aPresent->GetBarTable()); + aScalarBar->DebugOn(); + aScalarBar->SetDistribution(aPresent->GetDistribution()); + aScalarBar->DistributionVisibilityOn(); +// aScalarBar->SetOrientationToHorizontal(); +// aScalarBar->GetPositionCoordinate()->SetValue(.1, .6, 0); +// aScalarBar->GetPosition2Coordinate()->SetValue(.8, .3, 0); + +/*{ + vtkScalarBarWidget* aWidget = vtkScalarBarWidget::New(); + aWidget->SetInteractor( anInteractor ); + aWidget->SetScalarBarActor( aScalarBar ); + aWidget->SetEnabled( 1 ); +} +*/ + aRenderer->AddActor(anActor); +// aRenderer->AddActor2D(xyplot); //RKV + aRenderer->AddActor2D(aScalarBar); + + //aRenderer->AddActor2D(barChartActor()); //RKV + + aWindow->Render(); + aRenderer->ResetCamera(); + + anInteractor->Start(); + return 0; + } } } else{ diff --git a/src/PIPELINE/VISU_ColoredPL.cxx b/src/PIPELINE/VISU_ColoredPL.cxx index 0792a90c..decfeff2 100644 --- a/src/PIPELINE/VISU_ColoredPL.cxx +++ b/src/PIPELINE/VISU_ColoredPL.cxx @@ -34,14 +34,21 @@ #include "VISU_PipeLineUtils.hxx" +#include +#include +#include + //---------------------------------------------------------------------------- VISU_ColoredPL ::VISU_ColoredPL(): - myMapperTable(VISU_LookupTable::New()), - myBarTable(VISU_LookupTable::New()), - myExtractor(VISU_Extractor::New()), - myFieldTransform(VISU_FieldTransform::New()) + myMapperTable( VISU_LookupTable::New() ), + myBarTable( VISU_LookupTable::New() ), + myExtractor( VISU_Extractor::New() ), + myFieldTransform( VISU_FieldTransform::New() ), + myThreshold ( vtkThreshold::New() ), + myPassFilter( vtkPassThroughFilter::New() ), + myDistribution( vtkDoubleArray::New() ) { myMapperTable->Delete(); myMapperTable->SetScale(VTK_SCALE_LINEAR); @@ -54,6 +61,11 @@ VISU_ColoredPL myExtractor->Delete(); myFieldTransform->Delete(); + + myThreshold->AllScalarsOn(); + myThreshold->Delete(); + myPassFilter->Delete(); + myDistribution->Delete(); } @@ -74,6 +86,9 @@ VISU_ColoredPL aTime = std::max(aTime, myBarTable->GetMTime()); aTime = std::max(aTime, myExtractor->GetMTime()); aTime = std::max(aTime, myFieldTransform->GetMTime()); + aTime = std::max(aTime, myThreshold->GetMTime()); + aTime = std::max(aTime, myPassFilter->GetMTime()); + aTime = std::max(aTime, myDistribution->GetMTime()); return aTime; } @@ -88,8 +103,12 @@ VISU_ColoredPL Superclass::DoShallowCopy(thePipeLine, theIsCopyInput); if(VISU_ColoredPL *aPipeLine = dynamic_cast(thePipeLine)){ - if(theIsCopyInput) - SetScalarRange(aPipeLine->GetScalarRange()); + if ( theIsCopyInput ) { + SetScalarRange( aPipeLine->GetScalarRange() ); + if ( this->IsScalarFilterUsed() ) + SetScalarFilterRange( aPipeLine->GetScalarFilterRange() ); + } + SetScalarMode(aPipeLine->GetScalarMode()); SetNbColors(aPipeLine->GetNbColors()); SetScaling(aPipeLine->GetScaling()); @@ -135,7 +154,6 @@ VISU_ColoredPL theExtractor->SetScalarMode(theScalarMode); } - //---------------------------------------------------------------------------- void VISU_ColoredPL @@ -148,18 +166,144 @@ VISU_ColoredPL //---------------------------------------------------------------------------- void VISU_ColoredPL -::SetScalarRange(vtkFloatingPointType theRange[2]) +::SetScalarRange( vtkFloatingPointType theRange[2] ) { - if(theRange[0] > theRange[1]) + if ( theRange[0] > theRange[1] ) return; - if(VISU::CheckIsSameRange(GetScalarRange(), theRange)) + if (VISU::CheckIsSameRange( GetScalarRange(), theRange) ) + return; + + myFieldTransform->SetScalarRange( theRange ); + myBarTable->SetRange( theRange ); +} + + +//---------------------------------------------------------------------------- +void +VISU_ColoredPL +::SetScalarFilterRange( vtkFloatingPointType theRange[2] ) +{ + vtkFloatingPointType aRange[ 2 ]; + this->GetScalarFilterRange( aRange ); + + if ( VISU::CheckIsSameRange( aRange, theRange) ) return; - myFieldTransform->SetScalarRange(theRange); - myBarTable->SetRange(theRange); + myThreshold->ThresholdBetween( theRange[0], theRange[1] ); +} + + +//---------------------------------------------------------------------------- +void +VISU_ColoredPL +::GetScalarFilterRange( vtkFloatingPointType theRange[2] ) +{ + theRange[ 0 ] = myThreshold->GetLowerThreshold(); + theRange[ 1 ] = myThreshold->GetUpperThreshold(); +} + + +//---------------------------------------------------------------------------- +vtkFloatingPointType* +VISU_ColoredPL +::GetScalarFilterRange() +{ + static vtkFloatingPointType aRange[ 2 ]; + + this->GetScalarFilterRange( aRange ); + + return aRange; } + +//---------------------------------------------------------------------------- +void +VISU_ColoredPL +::UseScalarFiltering( bool theUseScalarFilter ) +{ + if ( theUseScalarFilter ) { + // Include threshold filter between the transform and the pass filters. + myPassFilter->SetInput( myThreshold->GetOutput() ); + } else { + // Exclude threshold filter before the pass filter. + myPassFilter->SetInput( myFieldTransform->GetOutput() ); + } +} + + +//---------------------------------------------------------------------------- +bool +VISU_ColoredPL +::IsScalarFilterUsed() +{ + return myThreshold->GetOutput() == myPassFilter->GetInput(); +} + + +//---------------------------------------------------------------------------- +vtkDoubleArray* +VISU_ColoredPL +::GetDistribution() +{ + unsigned long int aTime = this->GetMTime(); + // If modified then update the distribution array + if (aTime > myDistribution->GetMTime()) { + // Set number of colors for the distribution + int nbColors = this->GetNbColors(); + this->myDistribution->SetNumberOfValues(nbColors); + // Initialize numbers of colored cells with zero + this->myDistribution->FillComponent(0, 0); + // Create a lookup table to compute a color of a cell + VISU_LookupTable* lut = GetMapperTable(); + vtkFloatingPointType aMapScale = lut->GetMapScale(); + // Get scalar values from the input data to calculate their distribution within cells + vtkDataArray* dataArr; + // Dtermine where we have to take scalars from: cells data or points data. + if(VISU::IsDataOnCells(this->GetOutput())) { + dataArr = this->GetOutput()->GetCellData()->GetScalars(); + } else { + dataArr = this->GetOutput()->GetPointData()->GetScalars(); + } + // If scalars data array is not defined then create an empty one to avoid exceptions + if (dataArr == NULL) { + dataArr = vtkDoubleArray::New(); + } + + // Get range of scalars values +// vtkFloatingPointType aRange[2]; +// dataArr->GetRange(aRange); + + // Build the lookup table with the found range + // Get number of scalar values + int aNbVals = dataArr->GetNumberOfTuples(); + if (aNbVals > 0) { + // Count the number of scalar values for each color in the input data + int idx = 0; + double cnt = 0; + // For each scalar value + for(vtkIdType aValId = 0; aValId < aNbVals; aValId++){ + // Find the color index for this scalar value + idx = lut->GetIndex(*(dataArr->GetTuple(aValId)) * aMapScale); + // Increment the distribution value for this color index + cnt = this->myDistribution->GetValue(idx); + this->myDistribution->SetValue(idx, cnt + 1); + } + // Compute relative values when 1 is according to the total number of scalar values + for(vtkIdType aValId = 0; aValId < nbColors; aValId++){ + cnt = this->myDistribution->GetValue(aValId); + this->myDistribution->SetValue(aValId, cnt / aNbVals); + } + } + this->myDistribution->Modified(); + + } + + return myDistribution; +} +//---------------------------------------------------------------------------- + // RKV : End + //---------------------------------------------------------------------------- vtkFloatingPointType* VISU_ColoredPL @@ -215,7 +359,12 @@ VISU_ColoredPL ::Init() { SetScalarMode(0); - SetSourceRange(); + + vtkFloatingPointType aRange[2]; + GetSourceRange( aRange ); + + SetScalarRange( aRange ); + SetScalarFilterRange( aRange ); } //---------------------------------------------------------------------------- @@ -223,9 +372,9 @@ vtkPointSet* VISU_ColoredPL ::GetClippedInput() { - if(GetFieldTransformFilter()->GetInput()) - GetFieldTransformFilter()->Update(); - return GetFieldTransformFilter()->GetUnstructuredGridOutput(); + if(myPassFilter->GetInput()) + myPassFilter->Update(); + return myPassFilter->GetUnstructuredGridOutput(); } @@ -234,9 +383,14 @@ void VISU_ColoredPL ::Build() { - myExtractor->SetInput(Superclass::GetClippedInput()); + myExtractor->SetInput( Superclass::GetClippedInput() ); myFieldTransform->SetInput(myExtractor->GetOutput()); + myThreshold->SetInput( myFieldTransform->GetOutput() ); + // The pass filter is used here for possibility to include/exclude + // threshold filter before it. + myPassFilter->SetInput( myFieldTransform->GetOutput() ); + GetMapperHolder()->SetLookupTable(GetMapperTable()); //GetMapper()->InterpolateScalarsBeforeMappingOn(); GetMapper()->SetUseLookupTableScalarRange( true ); @@ -343,7 +497,7 @@ VISU_ColoredPL ::GetSourceRange(vtkFloatingPointType theRange[2]) { myExtractor->Update(); - myExtractor->GetOutput()->GetScalarRange(theRange); + myExtractor->GetOutput()->GetScalarRange( theRange ); } void @@ -351,6 +505,6 @@ VISU_ColoredPL ::SetSourceRange() { vtkFloatingPointType aRange[2]; - GetSourceRange(aRange); - SetScalarRange(aRange); + GetSourceRange( aRange ); + SetScalarRange( aRange ); } diff --git a/src/PIPELINE/VISU_ColoredPL.hxx b/src/PIPELINE/VISU_ColoredPL.hxx index e507f140..ada174b8 100644 --- a/src/PIPELINE/VISU_ColoredPL.hxx +++ b/src/PIPELINE/VISU_ColoredPL.hxx @@ -36,9 +36,13 @@ class VISU_Extractor; class VISU_FieldTransform; class VISU_LookupTable; +class vtkPassThroughFilter; +class vtkDoubleArray; +class vtkThreshold; + //---------------------------------------------------------------------------- -class VISU_ColoredPL : public VISU_PipeLine +class VISU_PIPELINE_EXPORT VISU_ColoredPL : public VISU_PipeLine { public: vtkTypeMacro(VISU_ColoredPL, VISU_PipeLine); @@ -62,7 +66,22 @@ public: virtual void - SetScalarRange(vtkFloatingPointType theRange[2]); + SetScalarRange( vtkFloatingPointType theRange[2] ); + + void + SetScalarFilterRange( vtkFloatingPointType theRange[2] ); + + void + GetScalarFilterRange( vtkFloatingPointType theRange[2] ); + + vtkFloatingPointType* + GetScalarFilterRange(); + + bool + IsScalarFilterUsed(); + + void + UseScalarFiltering( bool theUseScalarFilter ); virtual void @@ -80,8 +99,11 @@ public: int GetNbColors(); - //---------------------------------------------------------------------------- + vtkDoubleArray* GetDistribution(); + + public: + //---------------------------------------------------------------------------- virtual void Init(); @@ -157,11 +179,13 @@ protected: VISU_Extractor* theExtractor); private: - vtkSmartPointer myMapperTable; - vtkSmartPointer myBarTable; - vtkSmartPointer myExtractor; - vtkSmartPointer myFieldTransform; - + vtkSmartPointer< VISU_LookupTable > myMapperTable; + vtkSmartPointer< VISU_LookupTable > myBarTable; + vtkSmartPointer< VISU_Extractor > myExtractor; + vtkSmartPointer< VISU_FieldTransform > myFieldTransform; + vtkSmartPointer< vtkThreshold > myThreshold; + vtkSmartPointer< vtkPassThroughFilter > myPassFilter; + vtkSmartPointer< vtkDoubleArray > myDistribution; }; #endif diff --git a/src/PIPELINE/VISU_CutLinesPL.cxx b/src/PIPELINE/VISU_CutLinesPL.cxx index dbd2243a..89b00b02 100644 --- a/src/PIPELINE/VISU_CutLinesPL.cxx +++ b/src/PIPELINE/VISU_CutLinesPL.cxx @@ -41,6 +41,7 @@ VISU_CutLinesPL ::VISU_CutLinesPL() { SetIsShrinkable(false); + SetIsFeatureEdgesAllowed(false); myCondition = 1; myPosition = 0; diff --git a/src/PIPELINE/VISU_CutPlanesPL.cxx b/src/PIPELINE/VISU_CutPlanesPL.cxx index a8776eaf..5888942e 100644 --- a/src/PIPELINE/VISU_CutPlanesPL.cxx +++ b/src/PIPELINE/VISU_CutPlanesPL.cxx @@ -59,6 +59,7 @@ VISU_CutPlanesPL if(MYDEBUG) MESSAGE("VISU_CutPlanesPL()::VISU_CutPlanesPL() - "<GetDataSetMapper(), theIsCopyInput); + myExtractGeometry->SetImplicitFunction(aMapperHolder->GetImplicitFunction()); } } @@ -317,6 +318,7 @@ VISU_DataSetMapperHolder if (vtkImplicitBoolean* aBoolean = myExtractGeometry->GetImplicitBoolean()) { vtkImplicitFunctionCollection* aFunction = aBoolean->GetFunction(); aFunction->AddItem(thePlane); + aBoolean->Modified(); // Check, that at least one cell present after clipping. // This check was introduced because of bug IPAL8849. vtkDataSet* aClippedDataSet = GetClippedInput(); @@ -346,6 +348,19 @@ VISU_DataSetMapperHolder return aPlane; } +//---------------------------------------------------------------------------- +void VISU_DataSetMapperHolder::RemoveClippingPlane(vtkIdType theID) +{ + if(theID >= 0 && theID < GetNumberOfClippingPlanes()){ + if(vtkImplicitBoolean* aBoolean = myExtractGeometry->GetImplicitBoolean()){ + vtkImplicitFunctionCollection* aFunctions = aBoolean->GetFunction(); + aFunctions->RemoveItem(theID); + aBoolean->Modified(); + } + } +} + + //---------------------------------------------------------------------------- void VISU_DataSetMapperHolder diff --git a/src/PIPELINE/VISU_DataSetMapperHolder.hxx b/src/PIPELINE/VISU_DataSetMapperHolder.hxx index 6588abd9..23f056e6 100644 --- a/src/PIPELINE/VISU_DataSetMapperHolder.hxx +++ b/src/PIPELINE/VISU_DataSetMapperHolder.hxx @@ -134,6 +134,8 @@ public: vtkPlane* GetClippingPlane(vtkIdType theID); + virtual void RemoveClippingPlane(vtkIdType theID); + protected: //---------------------------------------------------------------------------- VISU_DataSetMapperHolder(); diff --git a/src/PIPELINE/VISU_DeformationPL.cxx b/src/PIPELINE/VISU_DeformationPL.cxx deleted file mode 100755 index 88e29868..00000000 --- a/src/PIPELINE/VISU_DeformationPL.cxx +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File: VISU_ScalarMapPL.cxx -// Author: Roman NIKOLAEV -// Module : VISU - -//Salome includes -#include "VISU_DeformationPL.hxx" -#include "VISU_MergeFilter.hxx" -#include "VISU_DeformedShapePL.hxx" -#include "VISU_PipeLineUtils.hxx" - -//VTK includes -#include -#include -#include -#include -#include -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - - -//---------------------------------------------------------------------------- -VISU_DeformationPL::VISU_DeformationPL(): - myScaleFactor(1.0), - myMapScaleFactor(1.0) -{ - if(MYDEBUG) MESSAGE("VISU_DeformationPL()::VISU_DeformationPL() - "<SetScaleFactor(myScaleFactor); - - myVectorMergeFilter = VISU_MergeFilter::New(); - myVectorMergeFilter->SetMergingInputs(true); - myInputPassFilter = vtkPassThroughFilter::New(); - myOutputPassFiler = vtkPassThroughFilter::New(); - myCellDataToPointData = vtkCellDataToPointData::New(); - myCellDataToPointData->PassCellDataOn(); - - myInputPassFilter->SetInput(vtkUnstructuredGrid::New()); - - myCellDataToPointData->SetInput(myInputPassFilter->GetOutput()); - - myWarpVector->SetInput(myCellDataToPointData->GetOutput()); - - myOutputPassFiler->SetInput(myWarpVector->GetOutput()); -} - -//---------------------------------------------------------------------------- -VISU_DeformationPL::~VISU_DeformationPL() -{ - if(MYDEBUG) MESSAGE("VISU_DeformationPL()::~VISU_DeformationPL() - "<Delete(); - myVectorMergeFilter->Delete(); - myInputPassFilter->Delete(); - myOutputPassFiler->Delete(); - myCellDataToPointData->Delete(); -} - - -//---------------------------------------------------------------------------- -unsigned long int -VISU_DeformationPL::GetMTime(){ - unsigned long int aTime = std::max(myWarpVector->GetMTime(), - myVectorMergeFilter->GetMTime()); - - aTime = std::max(aTime,myInputPassFilter->GetMTime()); - aTime = std::max(aTime,myOutputPassFiler->GetMTime()); - aTime = std::max(aTime,myCellDataToPointData->GetMTime()); - return 0; -} - -//---------------------------------------------------------------------------- -void VISU_DeformationPL::SetScale(vtkFloatingPointType theScaleFactor) -{ - if(myScaleFactor == theScaleFactor) - return; - myScaleFactor = theScaleFactor; - myWarpVector->SetScaleFactor(myScaleFactor*myMapScaleFactor); -} - -void VISU_DeformationPL::SetMapScale(vtkFloatingPointType theMapScaleFactor) -{ - if(myMapScaleFactor == theMapScaleFactor) - return; - myMapScaleFactor = theMapScaleFactor; - - myWarpVector->SetScaleFactor(myScaleFactor*myMapScaleFactor); -} - - -vtkFloatingPointType VISU_DeformationPL::GetScale() -{ - return myScaleFactor; -} - -//---------------------------------------------------------------------------- -void VISU_DeformationPL::SetWarpVectorInput(vtkDataSet *theInput) -{ - myInputPassFilter->SetInput(theInput); -} - -//---------------------------------------------------------------------------- -vtkDataSet* VISU_DeformationPL::GetWarpVectorOutput() -{ - return myOutputPassFiler->GetOutput(); -} - -//---------------------------------------------------------------------------- -void VISU_DeformationPL::SetMergeFilterInput(vtkDataSet* ScalarInput, - vtkDataSet* VectorialInput) -{ - myVectorMergeFilter->SetScalars(ScalarInput); - myVectorMergeFilter->AddField("VISU_CELLS_MAPPER",ScalarInput); - myVectorMergeFilter->AddField("VISU_POINTS_MAPPER",ScalarInput); - - myVectorMergeFilter->SetGeometry(VectorialInput); - myVectorMergeFilter->SetVectors(VectorialInput); -} - -//---------------------------------------------------------------------------- -vtkDataSet* VISU_DeformationPL::GetMergeFilterOutput(){ - return myVectorMergeFilter->GetOutput(); -} - -//---------------------------------------------------------------------------- -vtkFloatingPointType VISU_DeformationPL::GetDefaultScaleFactor(VISU_DeformationPL *thePipeLine) -{ - if(!thePipeLine || !thePipeLine->GetMergeFilterOutput()) - return 0.0; - - vtkFloatingPointType aSourceRange[2]; - thePipeLine->GetMergeFilterOutput()->GetScalarRange(aSourceRange); - - static vtkFloatingPointType EPS = 1.0 / VTK_LARGE_FLOAT; - if(fabs(aSourceRange[1]) > EPS){ - vtkDataSet* aDataSet = thePipeLine->GetMergeFilterOutput(); - vtkFloatingPointType aScaleFactor = VISU_DeformedShapePL::GetScaleFactor(aDataSet); - return aScaleFactor / aSourceRange[1]; - } - return 0.0; -} - diff --git a/src/PIPELINE/VISU_DeformationPL.hxx b/src/PIPELINE/VISU_DeformationPL.hxx deleted file mode 100755 index e18f43e3..00000000 --- a/src/PIPELINE/VISU_DeformationPL.hxx +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : VISU_DeformationPL.hxx -// Author : -// Module : SALOME - -#ifndef VISU_DeformationPL_HeaderFile -#define VISU_DeformationPL_HeaderFile - -#include "VISUPipeline.hxx" -#include "VISU_MapperHolder.hxx" -#include - -class vtkDataSet; -class VISU_MergeFilter; -class vtkPassThroughFilter; -class vtkWarpVector; -class vtkCellDataToPointData; - -class VISU_PIPELINE_EXPORT VISU_DeformationPL { - -public: - VISU_DeformationPL(); - virtual ~VISU_DeformationPL(); - - //----------------------------------------------------------- - virtual void SetScale(vtkFloatingPointType theScaleFactor); - virtual void SetMapScale(vtkFloatingPointType theMapScaleFactor); - virtual vtkFloatingPointType GetScale(); - - //----------------------------------------------------------- - virtual void SetVectorialField(VISU::PUnstructuredGridIDMapper theIdMapper) = 0; - virtual VISU::PUnstructuredGridIDMapper getVectorialField() = 0; - - - //----------------------------------------------------------- - virtual - unsigned - long int - GetMTime(); - - static vtkFloatingPointType GetDefaultScaleFactor(VISU_DeformationPL *thePipeLine); - - void SetWarpVectorInput(vtkDataSet *theInput); - vtkDataSet* GetWarpVectorOutput(); - - //----------------------------------------------------------- - void SetMergeFilterInput(vtkDataSet* ScalarInput, - vtkDataSet* VectorialInput); - - vtkDataSet* GetMergeFilterOutput(); - -protected: - - VISU::PUnstructuredGridIDMapper myVectorialField; - vtkWarpVector *myWarpVector; - vtkSmartPointer myVectorMergeFilter; - vtkPassThroughFilter *myInputPassFilter; - vtkPassThroughFilter *myOutputPassFiler; - vtkCellDataToPointData *myCellDataToPointData; - -private: - vtkFloatingPointType myScaleFactor; - vtkFloatingPointType myMapScaleFactor; - -}; - -#endif diff --git a/src/PIPELINE/VISU_DeformedGridPL.cxx b/src/PIPELINE/VISU_DeformedGridPL.cxx deleted file mode 100644 index 72f40c58..00000000 --- a/src/PIPELINE/VISU_DeformedGridPL.cxx +++ /dev/null @@ -1,238 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File: VISU_DeformedGridPL.cxx -// Author: Alexey PETROV -// Module : VISU - - -#include "VISU_DeformedGridPL.hxx" -#include "VISU_FieldTransform.hxx" -#include "VISU_Plot3DPL.hxx" - -#include "VISU_PipeLineUtils.hxx" - -#include -#include -#include - - -//---------------------------------------------------------------------------- -vtkStandardNewMacro(VISU_DeformedGridPL); - - -//---------------------------------------------------------------------------- -VISU_DeformedGridPL -::VISU_DeformedGridPL(): - myContourFilter(vtkContourFilter::New()), - myWarpScalar(vtkWarpScalar::New()), - myIsContour(false), - myScaleFactor(1.0), - myMapScaleFactor(1.0) -{ - SetIsShrinkable(false); - SetNumberOfContours(32); -} - - -//---------------------------------------------------------------------------- -VISU_DeformedGridPL -::~VISU_DeformedGridPL() -{} - - -//---------------------------------------------------------------------------- -unsigned long int -VISU_DeformedGridPL -::GetMTime() -{ - unsigned long int aTime = Superclass::GetMTime(); - - aTime = std::max(aTime, myContourFilter->GetMTime()); - aTime = std::max(aTime, myWarpScalar->GetMTime()); - - return aTime; -} - - -//---------------------------------------------------------------------------- -unsigned long int -VISU_DeformedGridPL -::GetMemorySize() -{ - unsigned long int aSize = Superclass::GetMemorySize(); - - if(vtkDataObject* aDataObject = myContourFilter->GetInput()) - aSize += aDataObject->GetActualMemorySize() * 1024; - - if(vtkDataObject* aDataObject = myWarpScalar->GetInput()) - aSize += aDataObject->GetActualMemorySize() * 1024; - - return aSize; -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::DoShallowCopy(VISU_PipeLine *thePipeLine, - bool theIsCopyInput) -{ - Superclass::DoShallowCopy(thePipeLine, theIsCopyInput); - - if(VISU_DeformedGridPL *aPipeLine = dynamic_cast(thePipeLine)){ - SetScaleFactor( aPipeLine->GetScaleFactor() ); - SetContourPrs( aPipeLine->GetIsContourPrs() ); - SetNumberOfContours( aPipeLine->GetNumberOfContours() ); - } -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::Init() -{ - Superclass::Init(); - - vtkPointSet* aPointSet = GetFieldTransformFilter()->GetPolyDataOutput(); - SetScaleFactor( VISU_Plot3DPL::GetScaleFactor( this, aPointSet ) ); -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::Build() -{ - Superclass::Build(); - - myWarpScalar->SetInput( GetFieldTransformFilter()->GetPolyDataOutput() ); - GetPolyDataMapper()->SetInput( myWarpScalar->GetPolyDataOutput() ); -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::Update() -{ - vtkPointSet* aPointSet = GetFieldTransformFilter()->GetPolyDataOutput(); - if ( !myIsContour ) // surface prs - { - myWarpScalar->SetInput( aPointSet ); - } - else // contour prs - { - myContourFilter->SetInput( aPointSet ); - - vtkFloatingPointType aScalarRange[2]; - GetSourceRange( aScalarRange ); - - myContourFilter->GenerateValues( GetNumberOfContours(), aScalarRange ); - myWarpScalar->SetInput( myContourFilter->GetOutput() ); - } - - Superclass::Update(); -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::SetNumberOfContours(int theNumber) -{ - myContourFilter->SetNumberOfContours(theNumber); -} - - -//---------------------------------------------------------------------------- -int -VISU_DeformedGridPL -::GetNumberOfContours() -{ - return myContourFilter->GetNumberOfContours(); -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::SetScaleFactor(vtkFloatingPointType theScaleFactor) -{ - if ( VISU::CheckIsSameValue( myWarpScalar->GetScaleFactor(), theScaleFactor ) ) - return; - - myScaleFactor = theScaleFactor; - myWarpScalar->SetScaleFactor(theScaleFactor*myMapScaleFactor); -} - - -//---------------------------------------------------------------------------- -vtkFloatingPointType -VISU_DeformedGridPL -::GetScaleFactor() -{ - return myScaleFactor; -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::SetContourPrs(bool theIsContourPrs ) -{ - if(myIsContour == theIsContourPrs) - return; - - myIsContour = theIsContourPrs; - Modified(); -} - - -//---------------------------------------------------------------------------- -bool -VISU_DeformedGridPL -::GetIsContourPrs() -{ - return myIsContour; -} - - -//---------------------------------------------------------------------------- -void -VISU_DeformedGridPL -::SetMapScale(vtkFloatingPointType theMapScale) -{ - Superclass::SetMapScale(theMapScale); - myMapScaleFactor = theMapScale; - - if ( myIsContour ) { - vtkFloatingPointType aSourceRange[2]; - GetSourceRange( aSourceRange ); - vtkFloatingPointType aDeltaRange = aSourceRange[1] - aSourceRange[0]; - vtkFloatingPointType aNewRange[2] = { aSourceRange[1] - theMapScale*aDeltaRange, aSourceRange[1] }; - myContourFilter->GenerateValues( GetNumberOfContours(), aNewRange ); - } - - myWarpScalar->SetScaleFactor( myScaleFactor * theMapScale ); -} diff --git a/src/PIPELINE/VISU_DeformedGridPL.hxx b/src/PIPELINE/VISU_DeformedGridPL.hxx deleted file mode 100644 index 4f325949..00000000 --- a/src/PIPELINE/VISU_DeformedGridPL.hxx +++ /dev/null @@ -1,117 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File: VISU_ScalarMapPL.hxx -// Author: Alexey PETROV -// Module : VISU - -#ifndef VISU_DeformedGridPL_HeaderFile -#define VISU_DeformedGridPL_HeaderFile - -#include "VISUPipeline.hxx" -#include "VISU_PolyDataPL.hxx" - -class vtkWarpScalar; -class vtkContourFilter; - - -//---------------------------------------------------------------------------- -class VISU_PIPELINE_EXPORT VISU_DeformedGridPL : public VISU_PolyDataPL -{ -public: - vtkTypeMacro(VISU_DeformedGridPL, VISU_PolyDataPL); - - static - VISU_DeformedGridPL* - New(); - - //---------------------------------------------------------------------------- - virtual - unsigned long int - GetMTime(); - - //! Gets memory size used by the instance (bytes). - virtual - unsigned long int - GetMemorySize(); - - //---------------------------------------------------------------------------- - void - SetScaleFactor( vtkFloatingPointType theScaleFactor ); - - vtkFloatingPointType - GetScaleFactor(); - - void - SetContourPrs( bool theIsContourPrs ); - - bool - GetIsContourPrs(); - - void - SetNumberOfContours( int theNumber ); - - int - GetNumberOfContours(); - - virtual - void - SetMapScale(vtkFloatingPointType theMapScale = 1.0); - - //---------------------------------------------------------------------------- - virtual - void - Init(); - - virtual - void - Update(); - -protected: - //---------------------------------------------------------------------------- - VISU_DeformedGridPL(); - - virtual - ~VISU_DeformedGridPL(); - - virtual - void - Build(); - - virtual - void - DoShallowCopy(VISU_PipeLine *thePipeLine, - bool theIsCopyInput); - -private: - VISU_DeformedGridPL(const VISU_DeformedGridPL&); // Not implemented. - void operator=(const VISU_DeformedGridPL&); // Not implemented. - - vtkFloatingPointType myScaleFactor; - vtkFloatingPointType myMapScaleFactor; - vtkContourFilter* myContourFilter; - vtkWarpScalar *myWarpScalar; - bool myIsContour; -}; - -#endif diff --git a/src/PIPELINE/VISU_DeformedShapePL.cxx b/src/PIPELINE/VISU_DeformedShapePL.cxx index 2a7f2c6a..b17f86b8 100644 --- a/src/PIPELINE/VISU_DeformedShapePL.cxx +++ b/src/PIPELINE/VISU_DeformedShapePL.cxx @@ -43,6 +43,7 @@ VISU_DeformedShapePL myMapScaleFactor(1.0) { SetIsShrinkable(true); + SetIsFeatureEdgesAllowed(true); myWarpVector = vtkWarpVector::New(); myCellDataToPointData = vtkCellDataToPointData::New(); @@ -110,6 +111,8 @@ VISU_DeformedShapePL aVolume *= aVol; } } + if( aNbElem == 0 || fabs(idim) < 1.0 / VTK_LARGE_FLOAT ) + return 0.0; // to avoid division by zero aVolume /= aNbElem; return pow(aVolume, vtkFloatingPointType(1.0/idim)); } diff --git a/src/PIPELINE/VISU_ElnoAssembleFilter.cxx b/src/PIPELINE/VISU_ElnoAssembleFilter.cxx deleted file mode 100644 index be843ed3..00000000 --- a/src/PIPELINE/VISU_ElnoAssembleFilter.cxx +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com - -#include "VISU_ElnoAssembleFilter.hxx" -#include "VISU_PipeLineUtils.hxx" -#include "VISU_ElnoMeshValue.hxx" - -#include -#include -#include -#include -#include -#include -#include -#include - - -//---------------------------------------------------------------------------- -vtkStandardNewMacro( VISU_ElnoAssembleFilter ); - - -//---------------------------------------------------------------------------- -VISU_ElnoAssembleFilter::VISU_ElnoAssembleFilter() -{ - this->SetInputArrayToProcess( 0, // idx - 0, // port - 0, // connection - vtkDataObject::FIELD_ASSOCIATION_POINTS, // field association - "ELNO_POINT_COORDS" ); // name - - this->myIsRestorePoints = false; -} - - -//---------------------------------------------------------------------------- -VISU_ElnoAssembleFilter::~VISU_ElnoAssembleFilter() -{} - - -//---------------------------------------------------------------------------- -void VISU_ElnoAssembleFilter::SetElnoAssembleState( bool theIsRestorePoints ) -{ - if ( myIsRestorePoints == theIsRestorePoints ) - return; - - myIsRestorePoints = theIsRestorePoints; - this->Modified(); -} - -//---------------------------------------------------------------------------- -namespace -{ - //---------------------------------------------------------------------------- - template < int points_type, int elno_type > - int Execute2( vtkPointSet *theInput, - vtkPointSet *theOutput, - vtkDataArray *theElnoPointCoords ) - { - theOutput->CopyStructure( theInput ); - - vtkCellData *aCellData = theOutput->GetCellData(); - aCellData->PassData( theInput->GetCellData() ); - - vtkPointData *aPointData = theOutput->GetPointData(); - aPointData->PassData( theInput->GetPointData() ); - - vtkPoints *anInputPoints = theInput->GetPoints(); - vtkPoints *aPoints = anInputPoints->New( elno_type ); - vtkIdType aNbPoints = theInput->GetNumberOfPoints(); - aPoints->SetNumberOfPoints( aNbPoints ); - - typedef typename VISU::TL::TEnum2VTKArrayType< elno_type >::TResult TPointsDataArray; - typedef typename VISU::TL::TEnum2VTKBasicType< elno_type >::TResult TPointsDataType; - TPointsDataArray* anOutputPointsArray = TPointsDataArray::SafeDownCast( aPoints->GetData() ); - - TPointsDataArray* anElnoPointCoords = TPointsDataArray::SafeDownCast( theElnoPointCoords ); - - for ( vtkIdType aPointId = 0; aPointId < aNbPoints; aPointId++ ) { - TPointsDataType aCoords[ 3 ]; - anElnoPointCoords->GetTupleValue( aPointId, aCoords ); - anOutputPointsArray->SetTupleValue( aPointId, aCoords ); - } - - theOutput->SetPoints( aPoints ); - - return 1; - } - - - //---------------------------------------------------------------------------- - template < int points_type > - int Execute( vtkPointSet *theInput, - vtkPointSet *theOutput, - vtkDataArray *theElnoPointCoords ) - { - switch( theElnoPointCoords->GetDataType() ){ - case VTK_DOUBLE: - return Execute2< points_type, VTK_DOUBLE >( theInput, theOutput, theElnoPointCoords ); - case VTK_FLOAT: - return Execute2< points_type, VTK_FLOAT >( theInput, theOutput, theElnoPointCoords ); - case VTK_INT: - return Execute2< points_type, VTK_INT >( theInput, theOutput, theElnoPointCoords ); - case VTK_LONG: - return Execute2< points_type, VTK_LONG >( theInput, theOutput, theElnoPointCoords ); - default: - break; - } - - return 0; - } - - - //---------------------------------------------------------------------------- -} - - -//---------------------------------------------------------------------------- -int VISU_ElnoAssembleFilter::RequestData( vtkInformation *vtkNotUsed(request), - vtkInformationVector **inputVector, - vtkInformationVector *outputVector ) -{ - // get the info objects - vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); - vtkInformation *outInfo = outputVector->GetInformationObject(0); - - // get the input and ouptut - vtkPointSet *anInput = vtkPointSet::SafeDownCast( inInfo->Get( vtkDataObject::DATA_OBJECT() ) ); - vtkPointSet *anOutput = vtkPointSet::SafeDownCast( outInfo->Get( vtkDataObject::DATA_OBJECT() ) ); - - vtkDataArray *anElnoPointCoords = this->GetInputArrayToProcess( 0, inputVector ); - - if ( !myIsRestorePoints || !anElnoPointCoords ) { - anOutput->ShallowCopy( anInput ); - return 1; - } - - vtkPoints *aPoints = anInput->GetPoints(); - switch( aPoints->GetDataType() ){ - case VTK_DOUBLE: - return ::Execute< VTK_DOUBLE >( anInput, anOutput, anElnoPointCoords ); - case VTK_FLOAT: - return ::Execute< VTK_FLOAT >( anInput, anOutput, anElnoPointCoords ); - case VTK_INT: - return ::Execute< VTK_INT >( anInput, anOutput, anElnoPointCoords ); - case VTK_LONG: - return ::Execute< VTK_LONG >( anInput, anOutput, anElnoPointCoords ); - default: - break; - } - - return 0; -} - - -//---------------------------------------------------------------------------- diff --git a/src/PIPELINE/VISU_ElnoAssembleFilter.hxx b/src/PIPELINE/VISU_ElnoAssembleFilter.hxx deleted file mode 100644 index 8f586c66..00000000 --- a/src/PIPELINE/VISU_ElnoAssembleFilter.hxx +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com - -#ifndef VISU_ElnoAssembleFilter_H -#define VISU_ElnoAssembleFilter_H - -#include - -class VISU_ElnoAssembleFilter : public vtkPointSetAlgorithm -{ -public: - typedef vtkPointSetAlgorithm Superclass; - - static VISU_ElnoAssembleFilter *New(); - - void SetElnoAssembleState( bool theIsRestorePoints ); - -protected: - VISU_ElnoAssembleFilter(); - ~VISU_ElnoAssembleFilter(); - - int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); - - bool myIsRestorePoints; - -private: - VISU_ElnoAssembleFilter(const VISU_ElnoAssembleFilter&); // Not implemented. - void operator=(const VISU_ElnoAssembleFilter&); // Not implemented. -}; - -#endif diff --git a/src/PIPELINE/VISU_ElnoDisassembleFilter.cxx b/src/PIPELINE/VISU_ElnoDisassembleFilter.cxx deleted file mode 100644 index eb84ca41..00000000 --- a/src/PIPELINE/VISU_ElnoDisassembleFilter.cxx +++ /dev/null @@ -1,400 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com - -#include "VISU_ElnoDisassembleFilter.hxx" -#include "VISU_PipeLineUtils.hxx" -#include "VISU_ElnoMeshValue.hxx" - -#include -#include -#include -#include -#include -#include -#include -#include - - -//---------------------------------------------------------------------------- -vtkStandardNewMacro( VISU_ElnoDisassembleFilter ); - - -//---------------------------------------------------------------------------- -VISU_ElnoDisassembleFilter::VISU_ElnoDisassembleFilter() -{ - this->SetInputArrayToProcess( 0, // idx - 0, // port - 0, // connection - vtkDataObject::FIELD_ASSOCIATION_CELLS, // field association - "ELNO_FIELD" ); // name - - this->SetInputArrayToProcess( 1, // idx - 0, // port - 0, // connection - vtkDataObject::FIELD_ASSOCIATION_CELLS, // field association - "ELNO_COMPONENT_MAPPER" ); // name - - this->myShrinkFactor = -0.999; -} - - -//---------------------------------------------------------------------------- -VISU_ElnoDisassembleFilter::~VISU_ElnoDisassembleFilter() -{} - - -//---------------------------------------------------------------------------- -void VISU_ElnoDisassembleFilter::SetShrinkFactor( vtkFloatingPointType theValue ) -{ - if ( VISU::CheckIsSameValue( theValue, myShrinkFactor ) ) - return; - - myShrinkFactor = theValue; - this->Modified(); -} - - -//---------------------------------------------------------------------------- -vtkFloatingPointType VISU_ElnoDisassembleFilter::GetShrinkFactor() -{ - return myShrinkFactor; -} - - -//---------------------------------------------------------------------------- -namespace -{ - //---------------------------------------------------------------------------- - template < int points_type, int elno_type > - struct TExecute2 - { - vtkUnstructuredGrid *myInput; - vtkUnstructuredGrid *myOutput; - vtkDataArray *myElnoDataArray; - vtkDataArray *myElnoDataMapper; - vtkFloatingPointType myShrinkFactor; - - typedef typename VISU::TL::TEnum2VTKArrayType< points_type >::TResult TPointsDataArray; - typedef typename VISU::TL::TEnum2VTKBasicType< points_type >::TResult TPointsDataType; - - typedef typename VISU::TL::TEnum2VTKArrayType< elno_type >::TResult TElnoDataArray; - typedef typename VISU::TL::TEnum2VTKBasicType< elno_type >::TResult TElnoDataType; - - VISU::TGetElnoNodeData< elno_type > myGetElnoNodeData; - vtkCellArray *myConnectivity; - vtkPointData *myInputPointData; - vtkPointData *myOutputPointData; - TPointsDataArray *myInputPointsArray; - TPointsDataArray *myOutputPointsArray; - TElnoDataArray* myElnoFullDataArray; - TElnoDataArray* myElnoPartialDataArray; - TPointsDataArray *myElnoPointCoords; - vtkIntArray* myInputPointsMapper; - vtkIntArray* myOutputPointsMapper; - - //---------------------------------------------------------------------------- - TExecute2( vtkUnstructuredGrid *theInput, - vtkUnstructuredGrid *theOutput, - vtkDataArray *theElnoDataArray, - vtkDataArray *theElnoDataMapper, - vtkFloatingPointType theShrinkFactor ) - : myGetElnoNodeData( theElnoDataArray, theElnoDataMapper ) - , myInput( theInput ) - , myOutput( theOutput ) - , myElnoDataArray( theElnoDataArray ) - , myElnoDataMapper( theElnoDataMapper ) - , myShrinkFactor( theShrinkFactor ) - { - myConnectivity = vtkCellArray::New(); - myConnectivity->DeepCopy( theInput->GetCells() ); - - vtkPoints *anInputPoints = theInput->GetPoints(); - vtkPoints *aPoints = anInputPoints->New( anInputPoints->GetDataType() ); - vtkIdType aNbCells = myConnectivity->GetNumberOfCells(); - vtkIdType aNbPoints = myConnectivity->GetNumberOfConnectivityEntries() - aNbCells; - aPoints->Allocate( aNbPoints ); - - myInputPointsArray = TPointsDataArray::SafeDownCast( anInputPoints->GetData() ); - myOutputPointsArray = TPointsDataArray::SafeDownCast( aPoints->GetData() ); - - myInputPointData = theInput->GetPointData(); - myOutputPointData = theOutput->GetPointData(); - myOutputPointData->Allocate( aNbPoints ); - - vtkCellData *anInputCellData = theInput->GetCellData(); - - // To create a new copy of initial data for output - myElnoFullDataArray = TElnoDataArray::New(); - myElnoFullDataArray->SetName( "VISU_FIELD" ); - myElnoFullDataArray->SetNumberOfComponents( myGetElnoNodeData.getNbComp() ); - myElnoFullDataArray->SetNumberOfTuples( aNbPoints ); - - // To create a new copy of partial initial data for output - myElnoPartialDataArray = TElnoDataArray::New(); - // This partial data can be represented as in terms of vectors as scalars - if ( anInputCellData->GetVectors() != NULL ) - myElnoPartialDataArray->SetNumberOfComponents( 3 ); - else - myElnoPartialDataArray->SetNumberOfComponents( 1 ); - myElnoPartialDataArray->SetNumberOfTuples( aNbPoints ); - - myElnoPointCoords = TPointsDataArray::New(); - myElnoPointCoords->SetName( "ELNO_POINT_COORDS" ); - myElnoPointCoords->SetNumberOfComponents( 3 ); - myElnoPointCoords->SetNumberOfTuples( aNbPoints ); - - vtkDataArray* anArray = myInputPointData->GetArray( "VISU_POINTS_MAPPER" ); - myInputPointsMapper = vtkIntArray::SafeDownCast( anArray ); - - myOutputPointsMapper = vtkIntArray::New(); - myOutputPointsMapper->SetName( myInputPointsMapper->GetName() ); - myOutputPointsMapper->SetNumberOfComponents( myInputPointsMapper->GetNumberOfComponents() ); - myOutputPointsMapper->SetNumberOfTuples( aNbPoints ); - - if ( theShrinkFactor > 0.0 ) - this->ShrinkExecute(); - else - this->SimpleExecute(); - - theOutput->SetPoints( aPoints ); - - theOutput->SetCells( theInput->GetCellTypesArray(), - theInput->GetCellLocationsArray(), - myConnectivity ); - - myConnectivity->Delete(); - - vtkCellData *anOutputCellData = theOutput->GetCellData(); - anOutputCellData->PassData( anInputCellData ); - - anOutputCellData->RemoveArray( "ELNO_COMPONENT_MAPPER" ); - anOutputCellData->RemoveArray( "ELNO_FIELD" ); - anOutputCellData->RemoveArray( "VISU_FIELD" ); - anOutputCellData->SetVectors( NULL ); - - //anOutputPointData->PassData( anInputPointData ); - - myOutputPointData->AddArray( myElnoFullDataArray ); - myElnoFullDataArray->Delete(); - - if ( anInputCellData->GetVectors() != NULL ) - myOutputPointData->SetVectors( myElnoPartialDataArray ); - else - myOutputPointData->SetScalars( myElnoPartialDataArray ); - myElnoPartialDataArray->Delete(); - - myOutputPointData->AddArray( myElnoPointCoords ); - myElnoPointCoords->Delete(); - - myOutputPointData->AddArray( myOutputPointsMapper ); - myOutputPointsMapper->Delete(); - } - - //---------------------------------------------------------------------------- - void SimpleExecute() - { - // To reserve a temproary value holder - vtkIdType aNbComp = std::max( 3, myGetElnoNodeData.getNbComp() ); - std::vector< TElnoDataType > anElnoDataValues( aNbComp ); - - std::vector< int > anPointsMapperValues( myInputPointsMapper->GetNumberOfComponents() ); - - myConnectivity->InitTraversal(); - vtkIdType aNbPts = 0, *aPts = 0; - for ( vtkIdType aCellId = 0; myConnectivity->GetNextCell( aNbPts, aPts ); aCellId++ ) { - for ( vtkIdType aPntId = 0; aPntId < aNbPts; aPntId++ ) { - TPointsDataType aCoords[ 3 ]; - vtkIdType aCurrentPntId = aPts[ aPntId ]; - myInputPointsArray->GetTupleValue( aCurrentPntId, aCoords ); - - aPts[ aPntId ] = myOutputPointsArray->InsertNextTupleValue( aCoords ); - vtkIdType aNewPntId = aPts[ aPntId ]; - - myElnoPointCoords->SetTupleValue( aNewPntId, aCoords ); - - myOutputPointData->CopyData( myInputPointData, aCurrentPntId, aNewPntId ); - - TElnoDataType* anElnoData = myGetElnoNodeData( aCellId, aPntId ); - myElnoFullDataArray->SetTupleValue( aNewPntId, anElnoData ); - - myElnoFullDataArray->GetTupleValue( aNewPntId, &anElnoDataValues[ 0 ] ); - myElnoPartialDataArray->SetTupleValue( aNewPntId, &anElnoDataValues[ 0 ] ); - - myInputPointsMapper->GetTupleValue( aCurrentPntId, &anPointsMapperValues[ 0 ] ); - myOutputPointsMapper->SetTupleValue( aNewPntId, &anPointsMapperValues[ 0 ] ); - } - } - } - - //---------------------------------------------------------------------------- - void ShrinkExecute() - { - // To reserve a temproary value holder - vtkIdType aNbComp = std::max( 3, myGetElnoNodeData.getNbComp() ); - std::vector< TElnoDataType > anElnoDataValues( aNbComp ); - - std::vector< int > anPointsMapperValues( myInputPointsMapper->GetNumberOfComponents() ); - - myConnectivity->InitTraversal(); - vtkIdType aNbPts = 0, *aPts = 0; - for ( vtkIdType aCellId = 0; myConnectivity->GetNextCell( aNbPts, aPts ); aCellId++ ) { - - TPointsDataType aCenter[ 3 ] = { TPointsDataType(), TPointsDataType(), TPointsDataType() }; - - for ( vtkIdType aPntId = 0; aPntId < aNbPts; aPntId++ ) { - TPointsDataType aCoords[ 3 ]; - myInputPointsArray->GetTupleValue( aPts[ aPntId ], aCoords ); - - aCenter[ 0 ] += aCoords[ 0 ]; - aCenter[ 1 ] += aCoords[ 1 ]; - aCenter[ 2 ] += aCoords[ 2 ]; - } - - aCenter[ 0 ] /= aNbPts; - aCenter[ 1 ] /= aNbPts; - aCenter[ 2 ] /= aNbPts; - - for ( vtkIdType aPntId = 0; aPntId < aNbPts; aPntId++ ) { - TPointsDataType aCoords[ 3 ]; - vtkIdType aCurrentPntId = aPts[ aPntId ]; - myInputPointsArray->GetTupleValue( aCurrentPntId, aCoords ); - - TPointsDataType aNewCoords[ 3 ]; - - aNewCoords[ 0 ] = aCenter[ 0 ] + - TPointsDataType( myShrinkFactor * ( aCoords[ 0 ] - aCenter[ 0 ] ) ); - aNewCoords[ 1 ] = aCenter[ 1 ] + - TPointsDataType( myShrinkFactor * ( aCoords[ 1 ] - aCenter[ 1 ] ) ); - aNewCoords[ 2 ] = aCenter[ 2 ] + - TPointsDataType( myShrinkFactor * ( aCoords[ 2 ] - aCenter[ 2 ] ) ); - - aPts[ aPntId ] = myOutputPointsArray->InsertNextTupleValue( aNewCoords ); - vtkIdType aNewPntId = aPts[ aPntId ]; - - myElnoPointCoords->SetTupleValue( aNewPntId, aCoords ); - - myOutputPointData->CopyData( myInputPointData, aCurrentPntId, aNewPntId ); - - TElnoDataType* anElnoData = myGetElnoNodeData( aCellId, aPntId ); - myElnoFullDataArray->SetTupleValue( aNewPntId, anElnoData ); - - myElnoFullDataArray->GetTupleValue( aNewPntId, &anElnoDataValues[ 0 ] ); - myElnoPartialDataArray->SetTupleValue( aNewPntId, &anElnoDataValues[ 0 ] ); - - myInputPointsMapper->GetTupleValue( aCurrentPntId, &anPointsMapperValues[ 0 ] ); - myOutputPointsMapper->SetTupleValue( aNewPntId, &anPointsMapperValues[ 0 ] ); - } - } - } - }; - - - //---------------------------------------------------------------------------- - template < int points_type, int elno_type > - int Execute2( vtkUnstructuredGrid *theInput, - vtkUnstructuredGrid *theOutput, - vtkDataArray *theElnoDataArray, - vtkDataArray *theElnoDataMapper, - vtkFloatingPointType theShrinkFactor ) - { - TExecute2< points_type, elno_type >( theInput, - theOutput, - theElnoDataArray, - theElnoDataMapper, - theShrinkFactor ); - - return 1; - } - - - //---------------------------------------------------------------------------- - template < int points_type > - int Execute( vtkUnstructuredGrid *theInput, - vtkUnstructuredGrid *theOutput, - vtkDataArray *theElnoDataArray, - vtkDataArray *theElnoDataMapper, - vtkFloatingPointType theShrinkFactor ) - { - switch( theElnoDataArray->GetDataType() ){ - case VTK_DOUBLE: - return Execute2< points_type, VTK_DOUBLE > - ( theInput, theOutput, theElnoDataArray, theElnoDataMapper, theShrinkFactor ); - case VTK_FLOAT: - return Execute2< points_type, VTK_FLOAT > - ( theInput, theOutput, theElnoDataArray, theElnoDataMapper, theShrinkFactor ); - case VTK_INT: - return Execute2< points_type, VTK_INT > - ( theInput, theOutput, theElnoDataArray, theElnoDataMapper, theShrinkFactor ); - case VTK_LONG: - return Execute2< points_type, VTK_LONG > - ( theInput, theOutput, theElnoDataArray, theElnoDataMapper, theShrinkFactor ); - default: - break; - } - - return 0; - } - - - //---------------------------------------------------------------------------- -} - - -//---------------------------------------------------------------------------- -int VISU_ElnoDisassembleFilter::RequestData( vtkInformation *vtkNotUsed(request), - vtkInformationVector **inputVector, - vtkInformationVector *outputVector ) -{ - // get the info objects - vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); - vtkInformation *outInfo = outputVector->GetInformationObject(0); - - // get the input and ouptut - vtkUnstructuredGrid *anInput = - vtkUnstructuredGrid::SafeDownCast( inInfo->Get( vtkDataObject::DATA_OBJECT() ) ); - vtkUnstructuredGrid *anOutput = - vtkUnstructuredGrid::SafeDownCast( outInfo->Get( vtkDataObject::DATA_OBJECT() ) ); - - vtkDataArray *anElnoDataArray = this->GetInputArrayToProcess( 0, inputVector ); - vtkDataArray *anElnoDataMapper = this->GetInputArrayToProcess( 1, inputVector ); - - if ( !anElnoDataArray ) { - anOutput->ShallowCopy( anInput ); - return 1; - } - - vtkPoints *aPoints = anInput->GetPoints(); - switch( aPoints->GetDataType() ){ - case VTK_DOUBLE: - return ::Execute< VTK_DOUBLE >( anInput, anOutput, anElnoDataArray, anElnoDataMapper, myShrinkFactor ); - case VTK_FLOAT: - return ::Execute< VTK_FLOAT >( anInput, anOutput, anElnoDataArray, anElnoDataMapper, myShrinkFactor ); - case VTK_INT: - return ::Execute< VTK_INT >( anInput, anOutput, anElnoDataArray, anElnoDataMapper, myShrinkFactor ); - case VTK_LONG: - return ::Execute< VTK_LONG >( anInput, anOutput, anElnoDataArray, anElnoDataMapper, myShrinkFactor ); - default: - break; - } - - return 0; -} - - -//---------------------------------------------------------------------------- diff --git a/src/PIPELINE/VISU_ElnoDisassembleFilter.hxx b/src/PIPELINE/VISU_ElnoDisassembleFilter.hxx deleted file mode 100644 index 40f41d34..00000000 --- a/src/PIPELINE/VISU_ElnoDisassembleFilter.hxx +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com - -#ifndef VISU_ElnoDisassembleFilter_H -#define VISU_ElnoDisassembleFilter_H - -#include "VISUPipeline.hxx" - -#include - -class VISU_PIPELINE_EXPORT VISU_ElnoDisassembleFilter : public vtkUnstructuredGridAlgorithm -{ -public: - typedef vtkUnstructuredGridAlgorithm Superclass; - - static VISU_ElnoDisassembleFilter *New(); - - void SetShrinkFactor( vtkFloatingPointType theValue ); - vtkFloatingPointType GetShrinkFactor(); - -protected: - VISU_ElnoDisassembleFilter(); - ~VISU_ElnoDisassembleFilter(); - - int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); - - vtkFloatingPointType myShrinkFactor; - -private: - VISU_ElnoDisassembleFilter(const VISU_ElnoDisassembleFilter&); // Not implemented. - void operator=(const VISU_ElnoDisassembleFilter&); // Not implemented. -}; - -#endif diff --git a/src/PIPELINE/VISU_GaussPointsPL.cxx b/src/PIPELINE/VISU_GaussPointsPL.cxx index c59d0d19..a0c7a8d8 100644 --- a/src/PIPELINE/VISU_GaussPointsPL.cxx +++ b/src/PIPELINE/VISU_GaussPointsPL.cxx @@ -60,6 +60,7 @@ VISU_GaussPointsPL myMergeFilter(VISU_GaussMergeFilter::New()) { SetIsShrinkable(false); + SetIsFeatureEdgesAllowed(false); myWarpVector = vtkWarpVector::New(); @@ -245,7 +246,7 @@ VISU_GaussPointsPL { Superclass::Init(); - SetExtractInside(false); + //SetExtractInside(false); vtkDataSet* aDataSet = GetParentMesh(); vtkFloatingPointType aScaleFactor = VISU_DeformedShapePL::GetScaleFactor( aDataSet ); diff --git a/src/PIPELINE/VISU_IsoSurfacesPL.cxx b/src/PIPELINE/VISU_IsoSurfacesPL.cxx index 88359963..125d5a21 100644 --- a/src/PIPELINE/VISU_IsoSurfacesPL.cxx +++ b/src/PIPELINE/VISU_IsoSurfacesPL.cxx @@ -45,6 +45,7 @@ VISU_IsoSurfacesPL ::VISU_IsoSurfacesPL() { SetIsShrinkable(false); + SetIsFeatureEdgesAllowed(false); SetElnoDisassembleState( true ); @@ -125,9 +126,9 @@ VISU_IsoSurfacesPL //---------------------------------------------------------------------------- void VISU_IsoSurfacesPL -::SetScalarRange(vtkFloatingPointType theRange[2]) +::SetScalarRange( vtkFloatingPointType theRange[2] ) { - Superclass::SetScalarRange(theRange); + Superclass::SetScalarRange( theRange ); SetRange(myRange); } diff --git a/src/PIPELINE/VISU_IsoSurfacesPL.hxx b/src/PIPELINE/VISU_IsoSurfacesPL.hxx index 73aec61e..b6cb7971 100644 --- a/src/PIPELINE/VISU_IsoSurfacesPL.hxx +++ b/src/PIPELINE/VISU_IsoSurfacesPL.hxx @@ -61,7 +61,7 @@ public: virtual void - SetScalarRange(vtkFloatingPointType theRange[2]); + SetScalarRange( vtkFloatingPointType theRange[2] ); virtual void diff --git a/src/PIPELINE/VISU_LabelPointsFilter.cxx b/src/PIPELINE/VISU_LabelPointsFilter.cxx deleted file mode 100644 index 040d6a23..00000000 --- a/src/PIPELINE/VISU_LabelPointsFilter.cxx +++ /dev/null @@ -1,296 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File: VISU_LabelPointsFilter.cxx -// Author: Vitaly Smetannikov -// Module : VISU - - - -#include "VISU_LabelPointsFilter.hxx" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - - -#define CONTAINS(SET, PT) (SET.find(PT) != SET.end()) - -struct ltIdType -{ - bool operator()(const vtkIdType a1, const vtkIdType a2) const - { - return a1 < a2; - } -}; - - - -//---------------------------------------------------------------------------- -vtkStandardNewMacro(VISU_LabelPointsFilter); - - -//---------------------------------------------------------------------------- -void VISU_LabelPointsFilter::SetPointsNb(int theNb) -{ - if (myPointsNb == theNb) return; - myPointsNb = (theNb < 1)? 1:theNb; - Modified(); -} - -//---------------------------------------------------------------------------- -VISU_LabelPointsFilter::VISU_LabelPointsFilter(): - vtkPolyDataAlgorithm(), - myPointsNb(3) -{ -} - -//---------------------------------------------------------------------------- -VISU_LabelPointsFilter::~VISU_LabelPointsFilter() -{} - - - -//---------------------------------------------------------------------------- -int VISU_LabelPointsFilter::RequestData(vtkInformation* vtkNotUsed(request), - vtkInformationVector** inputVector, - vtkInformationVector* outputVector) -{ - // get the info objects - vtkInformation* inInfo = inputVector[0]->GetInformationObject(0); - vtkInformation* outInfo = outputVector->GetInformationObject(0); - - // get the input and ouptut - vtkPolyData* input = vtkPolyData::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT())); - vtkPolyData* output = vtkPolyData::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT())); - - GetRegions(input, output); - - return 1; -} - -int VISU_LabelPointsFilter::RequestUpdateExtent(vtkInformation* vtkNotUsed(request), - vtkInformationVector** inputVector, - vtkInformationVector* outputVector) -{ - // get the info objects - vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); - vtkInformation *outInfo = outputVector->GetInformationObject(0); - - vtkPolyData* input = vtkPolyData::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT())); - vtkPolyData* output = vtkPolyData::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT())); - - GetRegions(input, output); - return 1; -} - - - -int VISU_LabelPointsFilter::GetRegions(vtkPolyData* theInput, - vtkPolyData* theOutput) -{ - vtkIdType cellId, i; - vtkIdType numPts, numCells; - vtkPoints *inPts; - - vtkPointData *aInpPD=theInput->GetPointData(), *aOutPD=theOutput->GetPointData(); - vtkCellData *aInpCD=theInput->GetCellData(), *aOutCD=theOutput->GetCellData(); - - // Check input/allocate storage - // - inPts = theInput->GetPoints(); - - if (inPts == NULL) - return 1; - - numPts = inPts->GetNumberOfPoints(); - numCells = theInput->GetNumberOfCells(); - - if ( numPts < 1 || numCells < 1 ) - return 1; - - // Build cell structure - // - vtkPolyData* aMesh = vtkPolyData::New(); - aMesh->CopyStructure(theInput); - aMesh->BuildLinks(); - - // Initialize. Keep track of points and cells visited. - // - vtkIdTypeArray* aRegionSizes = vtkIdTypeArray::New(); - int* aVisited = new int[numCells]; - for ( i=0; i < numCells; i++ ) - aVisited[i] = -1; - - vtkIdType* aPointMap = new vtkIdType[numPts]; - for ( i=0; i < numPts; i++ ) - aPointMap[i] = -1; - - vtkPoints* newPts = vtkPoints::New(); - newPts->Allocate(numPts); - - // Traverse all cells marking those visited. Each new search - // starts a new connected region. Connected region grows - // using a connected wave propagation. - // - vtkIdList* aWave = vtkIdList::New(); - aWave->Allocate(numPts/4+1,numPts); - vtkIdList* aWave2 = vtkIdList::New(); - aWave2->Allocate(numPts/4+1,numPts); - - vtkIdType aPointNumber = 0; - int aRegionNumber = 0; - - vtkIdList* aCellIds = vtkIdList::New(); - aCellIds->Allocate(8, VTK_CELL_SIZE); - vtkIdList* aPointIds = vtkIdList::New(); - aPointIds->Allocate(8, VTK_CELL_SIZE); - - // vtkIdType aNumCellsInRegion; - - aOutPD->CopyAllocate(aInpPD); - aOutCD->CopyAllocate(aInpCD); - - //visit all cells marking with region number - for (cellId=0; cellId < numCells; cellId++) { - if ( aVisited[cellId] < 0 ) { - aWave->InsertNextId(cellId); - aPointNumber = 0; - TraverseAndMark(aWave, aWave2, aVisited, aPointMap, - aRegionNumber, aPointNumber, aMesh); - - if (aPointNumber >= myPointsNb) { - std::set aIdxSet; - for (i=0; i < numPts; i++) { - if ( aPointMap[i] > -1 ) { - aIdxSet.insert(i); - aPointMap[i] = -1; - } - } - std::vector aIdx(aIdxSet.begin(), aIdxSet.end()); - int aActualPts = aIdx.size(); - int aNewId; - if (myPointsNb > 2) { - int k = aActualPts/(myPointsNb - 1); - int count; - for (i=0, count = 0; i < aActualPts; i+=k, count++) { - aNewId = newPts->InsertNextPoint(inPts->GetPoint(aIdx[i])); - aOutPD->CopyData(aInpPD, aIdx[i], aNewId); - } - if (count < myPointsNb) { - aNewId = newPts->InsertNextPoint(inPts->GetPoint(aIdx[aActualPts - 1])); - aOutPD->CopyData(aInpPD, aIdx[aActualPts - 1], aNewId); - } - } else { - aNewId = newPts->InsertNextPoint(inPts->GetPoint(aIdx[0])); - aOutPD->CopyData(aInpPD, aIdx[0], aNewId); - if (myPointsNb == 2) { - aNewId = newPts->InsertNextPoint(inPts->GetPoint(aIdx[aActualPts - 1])); - aOutPD->CopyData(aInpPD, aIdx[aActualPts - 1], aNewId); - } - } - } - aWave->Reset(); - aWave2->Reset(); - } - } - - aWave->Delete(); - aWave2->Delete(); - - theOutput->SetPoints(newPts); - newPts->Delete(); - - - delete [] aVisited; - delete [] aPointMap; - aMesh->Delete(); - theOutput->Squeeze(); - aCellIds->Delete(); - aPointIds->Delete(); - - return aRegionSizes->GetMaxId() + 1; -} - - -// Mark current cell as visited and assign region number. Note: -// traversal occurs across shared vertices. -// -void VISU_LabelPointsFilter::TraverseAndMark (vtkIdList* theWave, - vtkIdList* theWave2, - int* theVisited, - vtkIdType* thePointMap, - int& theRegionNumber, - vtkIdType& thePointNumber, - vtkPolyData* theMesh) -{ - vtkIdType cellId, ptId, numIds, i; - int j, k; - vtkIdType *pts, *cells, npts; - vtkIdList *tmpWave; - unsigned short ncells; - vtkIdList* aNeighborCellPointIds = vtkIdList::New(); - - - while ( (numIds=theWave->GetNumberOfIds()) > 0 ) { - for ( i=0; i < numIds; i++ ) { - cellId = theWave->GetId(i); - if ( theVisited[cellId] < 0 ) { - theVisited[cellId] = theRegionNumber; - theMesh->GetCellPoints(cellId, npts, pts); - - for (j=0; j < npts; j++) { - if ( thePointMap[ptId=pts[j]] < 0 ) { - thePointMap[ptId] = thePointNumber++; - } - theMesh->GetPointCells(ptId,ncells,cells); - - // check connectivity criterion (geometric + scalar) - for (k=0; k < ncells; k++) { - cellId = cells[k]; - theWave2->InsertNextId(cellId); - // } - }//for all cells using this point - }//for all points of this cell - }//if cell not yet visited - }//for all cells in this wave - - tmpWave = theWave; - theWave = theWave2; - theWave2 = tmpWave; - tmpWave->Reset(); - } //while wave is not empty -} diff --git a/src/PIPELINE/VISU_LabelPointsFilter.hxx b/src/PIPELINE/VISU_LabelPointsFilter.hxx deleted file mode 100644 index 46fa1c44..00000000 --- a/src/PIPELINE/VISU_LabelPointsFilter.hxx +++ /dev/null @@ -1,76 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File: VISU_LabelPointsFilter.hxx -// Author: Vitaly Smetannikov -// Module : VISU - -#ifndef VISU_LabelPointsFilter_HeaderFile -#define VISU_LabelPointsFilter_HeaderFile - -#include "VISUPipeline.hxx" -#include - -class vtkPolyData; - -class VISU_PIPELINE_EXPORT VISU_LabelPointsFilter : public vtkPolyDataAlgorithm -{ -public: - vtkTypeMacro(VISU_LabelPointsFilter, vtkPolyDataAlgorithm); - - static VISU_LabelPointsFilter* New(); - - void SetPointsNb(int theNb); - - int GetPointsNb() const { return myPointsNb; } - -protected: - VISU_LabelPointsFilter(); - - virtual ~VISU_LabelPointsFilter(); - - virtual int RequestData(vtkInformation* request, - vtkInformationVector** inputVector, - vtkInformationVector* outputVector); - - virtual int RequestUpdateExtent(vtkInformation*, - vtkInformationVector**, - vtkInformationVector*); - - - void TraverseAndMark (vtkIdList* theWave, - vtkIdList* theWave2, - int* theVisited, - vtkIdType* thePointMap, - int& theRegionNumber, - vtkIdType& thePointNumber, - vtkPolyData* theMesh); - - int GetRegions(vtkPolyData* theInput, - vtkPolyData* theOutput); - - int myPointsNb; - -}; - - -#endif diff --git a/src/PIPELINE/VISU_LookupTable.cxx b/src/PIPELINE/VISU_LookupTable.cxx index 8c4dfc90..c325fa06 100644 --- a/src/PIPELINE/VISU_LookupTable.cxx +++ b/src/PIPELINE/VISU_LookupTable.cxx @@ -32,8 +32,12 @@ using namespace std; + +//---------------------------------------------------------------------------- vtkStandardNewMacro(VISU_LookupTable); + +//---------------------------------------------------------------------------- VISU_LookupTable ::VISU_LookupTable(int sze, int ext): vtkLookupTable(sze, ext), @@ -41,6 +45,73 @@ VISU_LookupTable myBicolor(false) {} +//---------------------------------------------------------------------------- +namespace +{ + inline + void + CopyColor( unsigned char* theTaget, const unsigned char* theSource ) + { + theTaget[0] = theSource[0]; + theTaget[1] = theSource[1]; + theTaget[2] = theSource[2]; + } +} + + +//---------------------------------------------------------------------------- +void +VISU_LookupTable +::MarkValueByColor( vtkFloatingPointType theValue, + unsigned char* theColor ) +{ + vtkIdType anIndex = this->GetIndex( theValue ); + unsigned char *aTablePtr = this->GetPointer( anIndex ); + CopyColor( aTablePtr, theColor ); +} + + +//---------------------------------------------------------------------------- +void +VISU_LookupTable +::FillByColor( unsigned char* theColor ) +{ + vtkIdType aNbColors = this->GetNumberOfColors(); + for(int i = 0; i < aNbColors; i++){ + unsigned char *aTablePtr = this->GetPointer(i); + CopyColor( aTablePtr, theColor ); + } +} + + +//---------------------------------------------------------------------------- +void +VISU_LookupTable +::MakeBiColor() +{ + unsigned char aRedPtr[3] = {255, 0, 0}; + unsigned char aBluePtr[3] = {0, 0, 255}; + + vtkFloatingPointType aRange[2]; + this->GetTableRange(aRange); + vtkIdType aNbColors = this->GetNumberOfColors(); + + vtkFloatingPointType aDelta = (aRange[1]-aRange[0])/aNbColors; + vtkFloatingPointType aValue = aRange[0]+0.5*aDelta; + for(int i = 0; i < aNbColors; i++){ + vtkIdType anIndex = this->GetIndex(aValue); + unsigned char* aTablePtr = this->GetPointer(anIndex); + if(aValue > 0.0){ + CopyColor(aTablePtr,aRedPtr); + }else{ + CopyColor(aTablePtr,aBluePtr); + } + aValue += aDelta; + } +} + + +//---------------------------------------------------------------------------- void VISU_LookupTable ::SetMapScale(vtkFloatingPointType theScale) diff --git a/src/PIPELINE/VISU_LookupTable.hxx b/src/PIPELINE/VISU_LookupTable.hxx index 93fc7a47..c7e29c6c 100644 --- a/src/PIPELINE/VISU_LookupTable.hxx +++ b/src/PIPELINE/VISU_LookupTable.hxx @@ -24,11 +24,13 @@ #ifndef VISU_LookupTable_H #define VISU_LookupTable_H +#include "VISUPipeline.hxx" + #include #include "VTKViewer.h" -class VISU_LookupTable: public vtkLookupTable +class VISU_PIPELINE_EXPORT VISU_LookupTable: public vtkLookupTable { public: vtkTypeMacro(VISU_LookupTable,vtkLookupTable); @@ -44,8 +46,17 @@ class VISU_LookupTable: public vtkLookupTable bool GetBicolor() { return myBicolor; } void SetBicolor( bool theBicolor ); - static int ComputeLogRange(vtkFloatingPointType inRange[2], vtkFloatingPointType outRange[2]); - unsigned char *MapValue(vtkFloatingPointType v); + static int ComputeLogRange( vtkFloatingPointType inRange[2], + vtkFloatingPointType outRange[2] ); + + unsigned char *MapValue(vtkFloatingPointType v); + + void MarkValueByColor( vtkFloatingPointType theValue, + unsigned char* theColor ); + + void FillByColor( unsigned char* theColor ); + + void MakeBiColor(); protected: VISU_LookupTable(int sze=256, int ext=256); diff --git a/src/PIPELINE/VISU_MapperHolder.hxx b/src/PIPELINE/VISU_MapperHolder.hxx index 756abdee..3a87d47c 100644 --- a/src/PIPELINE/VISU_MapperHolder.hxx +++ b/src/PIPELINE/VISU_MapperHolder.hxx @@ -139,6 +139,8 @@ public: vtkPlane* GetClippingPlane(vtkIdType theID) = 0; + virtual void RemoveClippingPlane(vtkIdType theID) = 0; + //---------------------------------------------------------------------------- virtual void diff --git a/src/PIPELINE/VISU_MergedPL.cxx b/src/PIPELINE/VISU_MergedPL.cxx deleted file mode 100644 index 4aa24b88..00000000 --- a/src/PIPELINE/VISU_MergedPL.cxx +++ /dev/null @@ -1,51 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File: VISU_MergedPL.cxx -// Author: Alexey PETROV -// Module : VISU - - -#include "VISU_MergedPL.hxx" -#include "VISU_PipeLine.hxx" - - -//---------------------------------------------------------------------------- -void -VISU_MergedPL -::DoShallowCopy(VISU_PipeLine *thePipeLine, - bool theIsCopyInput) -{ - if(VISU_MergedPL *aPipeLine = dynamic_cast(thePipeLine)){ - if ( this == aPipeLine ) - return; - - if ( aPipeLine->IsExternalGeometryUsed() ) { - ClearGeometry(); - int aNbOfGeometry = aPipeLine->GetNumberOfGeometry(); - for ( int aGeomNumber = 0; aGeomNumber < aNbOfGeometry; aGeomNumber++ ) - AddGeometry( aPipeLine->GetGeometry( aGeomNumber ) ); - }else - SetSourceGeometry(); - } -} diff --git a/src/PIPELINE/VISU_MergedPL.hxx b/src/PIPELINE/VISU_MergedPL.hxx deleted file mode 100644 index 9c8e9b97..00000000 --- a/src/PIPELINE/VISU_MergedPL.hxx +++ /dev/null @@ -1,75 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File: VISU_MergedPL.hxx -// Author: Alexey PETROV -// Module : VISU - -#ifndef VISU_MergedPL_HeaderFile -#define VISU_MergedPL_HeaderFile - -#include "VISUPipeline.hxx" - -class vtkDataSet; -class vtkPointSet; -class VISU_PipeLine; - - -//---------------------------------------------------------------------------- -struct VISU_PIPELINE_EXPORT VISU_MergedPL -{ - virtual - void - SetSourceGeometry() = 0; - - virtual - int - AddGeometry( vtkDataSet* theGeometry ) = 0; - - virtual - vtkDataSet* - GetGeometry( int theGeomNumber ) = 0; - - virtual - int - GetNumberOfGeometry() = 0; - - virtual - bool - IsExternalGeometryUsed() = 0; - - virtual - void - ClearGeometry() = 0; - - virtual - vtkPointSet* - GetMergedInput() = 0; - - virtual - void - DoShallowCopy(VISU_PipeLine *thePipeLine, - bool theIsCopyInput); -}; - -#endif diff --git a/src/PIPELINE/VISU_MeshPL.cxx b/src/PIPELINE/VISU_MeshPL.cxx index 9e5dd5d7..cfcc2116 100644 --- a/src/PIPELINE/VISU_MeshPL.cxx +++ b/src/PIPELINE/VISU_MeshPL.cxx @@ -44,6 +44,7 @@ VISU_MeshPL VISU_UnstructuredGridPL(this) { SetIsShrinkable(true); + SetIsFeatureEdgesAllowed(true); } diff --git a/src/PIPELINE/VISU_OptionalDeformationPL.cxx b/src/PIPELINE/VISU_OptionalDeformationPL.cxx deleted file mode 100755 index a4bc4555..00000000 --- a/src/PIPELINE/VISU_OptionalDeformationPL.cxx +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File: VISU_ScalarMapPL.cxx -// Author: Roman NIKOLAEV -// Module : VISU - -//Salome includes -#include "VISU_OptionalDeformationPL.hxx" -#include "VISU_PipeLineUtils.hxx" - -//VTK includes -#include -#include -#include -#include -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -//---------------------------------------------------------------------------- -VISU_OptionalDeformationPL::VISU_OptionalDeformationPL(): - VISU_DeformationPL(), - myIsDeformed(true) -{ - if(MYDEBUG) MESSAGE("VISU_OptionalDeformationPL()::VISU_OptionalDeformationPL() - "<SetInput(myInputPassFilter->GetOutput()); - myWarpVector->SetInput(myCellDataToPointData->GetOutput()); - myOutputPassFiler->SetInput(myWarpVector->GetOutput()); -} - -//---------------------------------------------------------------------------- -void VISU_OptionalDeformationPL::OffDeformation(){ - myOutputPassFiler->SetInput(myInputPassFilter->GetOutput()); -} - - - -bool VISU_OptionalDeformationPL::CheckCanDeformate(vtkDataSet* theInput){ - if(theInput) { - if(VISU::IsDataOnCells(theInput)) - return theInput->GetCellData()->GetVectors() != NULL; - else if(VISU::IsDataOnPoints(theInput)) - return theInput->GetPointData()->GetVectors() != NULL; - } - return false; -} diff --git a/src/PIPELINE/VISU_OptionalDeformationPL.hxx b/src/PIPELINE/VISU_OptionalDeformationPL.hxx deleted file mode 100755 index 333da0cc..00000000 --- a/src/PIPELINE/VISU_OptionalDeformationPL.hxx +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : VISU_OptionalDeformationPL.hxx -// Author : -// Module : SALOME - -#ifndef VISU_OptionalDeformationPL_HeaderFile -#define VISU_OptionalDeformationPL_HeaderFile - -#include "VISUPipeline.hxx" -#include "VISU_DeformationPL.hxx" - -class VISU_PIPELINE_EXPORT VISU_OptionalDeformationPL: public VISU_DeformationPL -{ -public: - VISU_OptionalDeformationPL(); - virtual ~VISU_OptionalDeformationPL(); - - typedef VISU_DeformationPL Superclass; - - void UseDeformation(bool flag); - bool IsDeformed(); - - virtual - unsigned - long int - GetMTime(); - -protected: - bool CheckCanDeformate(vtkDataSet* theInput); - -private: - void OnDeformation(); - void OffDeformation(); - -private: - bool myIsDeformed; -}; - -#endif diff --git a/src/PIPELINE/VISU_PipeLine.cxx b/src/PIPELINE/VISU_PipeLine.cxx index ea165bc0..0761bbd5 100644 --- a/src/PIPELINE/VISU_PipeLine.cxx +++ b/src/PIPELINE/VISU_PipeLine.cxx @@ -47,7 +47,8 @@ static int MYDEBUG = 0; //---------------------------------------------------------------------------- VISU_PipeLine ::VISU_PipeLine(): - myIsShrinkable(true) + myIsShrinkable(true), + myIsFeatureEdgesAllowed(true) { if(MYDEBUG) MESSAGE("VISU_PipeLine::VISU_PipeLine - "<GetClippingPlane(theID); } +//---------------------------------------------------------------------------- +void VISU_PipeLine::RemoveClippingPlane(vtkIdType theID) +{ + return GetMapperHolder()->RemoveClippingPlane(theID); +} + //---------------------------------------------------------------------------- vtkDataSet* VISU_PipeLine diff --git a/src/PIPELINE/VISU_PipeLine.hxx b/src/PIPELINE/VISU_PipeLine.hxx index 53015937..72ee74d2 100644 --- a/src/PIPELINE/VISU_PipeLine.hxx +++ b/src/PIPELINE/VISU_PipeLine.hxx @@ -132,6 +132,9 @@ public: bool IsShrinkable(); + bool + IsFeatureEdgesAllowed(); + //---------------------------------------------------------------------------- void SetImplicitFunction(vtkImplicitFunction *theFunction); @@ -159,6 +162,8 @@ public: vtkPlane* GetClippingPlane(vtkIdType theID); + virtual void RemoveClippingPlane(vtkIdType theID); + virtual void SetPlaneParam(vtkFloatingPointType theDir[3], @@ -209,10 +214,14 @@ protected: void SetIsShrinkable(bool theIsShrinkable); + void + SetIsFeatureEdgesAllowed(bool theIsFeatureEdgesAllowed); + private: //---------------------------------------------------------------------------- vtkSmartPointer myMapperHolder; bool myIsShrinkable; + bool myIsFeatureEdgesAllowed; }; #endif diff --git a/src/PIPELINE/VISU_Plot3DPL.cxx b/src/PIPELINE/VISU_Plot3DPL.cxx index ed3750fc..a3465a37 100644 --- a/src/PIPELINE/VISU_Plot3DPL.cxx +++ b/src/PIPELINE/VISU_Plot3DPL.cxx @@ -60,6 +60,7 @@ VISU_Plot3DPL myMapScaleFactor(1.0) { SetIsShrinkable(false); + SetIsFeatureEdgesAllowed(false); myCellDataToPointData->Delete(); myAppendPolyData->Delete(); diff --git a/src/PIPELINE/VISU_PointSpriteMapperHolder.cxx b/src/PIPELINE/VISU_PointSpriteMapperHolder.cxx index 69c9be26..6497e489 100644 --- a/src/PIPELINE/VISU_PointSpriteMapperHolder.cxx +++ b/src/PIPELINE/VISU_PointSpriteMapperHolder.cxx @@ -30,6 +30,7 @@ #include "VISU_OpenGLPointSpriteMapper.hxx" #include "VISU_PipeLineUtils.hxx" +#include "SALOME_ExtractPolyDataGeometry.h" #ifdef _DEBUG_ static int MYDEBUG = 0; @@ -73,6 +74,7 @@ VISU_PointSpriteMapperHolder VISU::CopyPointSpriteDataMapper(GetPointSpriteMapper(), aMapperHolder->GetPointSpriteMapper(), theIsCopyInput); + myExtractPolyDataGeometry->SetImplicitFunction(aMapperHolder->GetImplicitFunction()); } } diff --git a/src/PIPELINE/VISU_PolyDataMapperHolder.cxx b/src/PIPELINE/VISU_PolyDataMapperHolder.cxx index 0b9cd227..43ece171 100644 --- a/src/PIPELINE/VISU_PolyDataMapperHolder.cxx +++ b/src/PIPELINE/VISU_PolyDataMapperHolder.cxx @@ -40,6 +40,7 @@ #include #include #include +//#include #ifdef _DEBUG_ static int MYDEBUG = 0; @@ -67,6 +68,7 @@ VISU_PolyDataMapperHolder myExtractPolyDataGeometry->SetImplicitFunction(anImplicitBoolean); anImplicitBoolean->SetOperationTypeToIntersection(); anImplicitBoolean->Delete(); + //myExtractPolyDataGeometry->ExtractInsideOn(); } @@ -92,6 +94,7 @@ VISU_PolyDataMapperHolder VISU::CopyPolyDataMapper(GetPolyDataMapper(), aMapperHolder->GetPolyDataMapper(), theIsCopyInput); + myExtractPolyDataGeometry->SetImplicitFunction(aMapperHolder->GetImplicitFunction()); } } @@ -257,6 +260,7 @@ VISU_PolyDataMapperHolder if (vtkImplicitBoolean* aBoolean = myExtractPolyDataGeometry->GetImplicitBoolean()) { vtkImplicitFunctionCollection* aFunction = aBoolean->GetFunction(); aFunction->AddItem(thePlane); + aBoolean->Modified(); // Check, that at least one cell present after clipping. // This check was introduced because of bug IPAL8849. vtkDataSet* aClippedDataSet = GetClippedInput(); @@ -286,6 +290,18 @@ VISU_PolyDataMapperHolder return aPlane; } +//---------------------------------------------------------------------------- +void VISU_PolyDataMapperHolder::RemoveClippingPlane(vtkIdType theID) +{ + if(theID >= 0 && theID < GetNumberOfClippingPlanes()){ + if(vtkImplicitBoolean* aBoolean = myExtractPolyDataGeometry->GetImplicitBoolean()){ + vtkImplicitFunctionCollection* aFunctions = aBoolean->GetFunction(); + aFunctions->RemoveItem(theID); + aBoolean->Modified(); + } + } +} + //---------------------------------------------------------------------------- void VISU_PolyDataMapperHolder diff --git a/src/PIPELINE/VISU_PolyDataMapperHolder.hxx b/src/PIPELINE/VISU_PolyDataMapperHolder.hxx index dc9848ec..ece41f4d 100644 --- a/src/PIPELINE/VISU_PolyDataMapperHolder.hxx +++ b/src/PIPELINE/VISU_PolyDataMapperHolder.hxx @@ -129,6 +129,8 @@ public: virtual vtkPlane* GetClippingPlane(vtkIdType theID); + + void RemoveClippingPlane(vtkIdType theID); protected: //---------------------------------------------------------------------------- @@ -159,6 +161,8 @@ private: //---------------------------------------------------------------------------- VISU::PPolyDataIDMapper myPolyDataIDMapper; vtkSmartPointer myPolyDataMapper; + +protected: vtkSmartPointer myExtractPolyDataGeometry; //!< Clipping }; diff --git a/src/PIPELINE/VISU_ScalarBarActor.cxx b/src/PIPELINE/VISU_ScalarBarActor.cxx index 9adbc387..08dbfdd3 100644 --- a/src/PIPELINE/VISU_ScalarBarActor.cxx +++ b/src/PIPELINE/VISU_ScalarBarActor.cxx @@ -38,6 +38,8 @@ #include #include #include +#include // RKV +#include // RKV using namespace std; @@ -103,12 +105,36 @@ VISU_ScalarBarActor::VISU_ScalarBarActor() this->LastSize[0] = 0; this->LastSize[1] = 0; - this->TitleRatioWidth = 0; + this->TitleRatioSize = 0; this->LabelRatioWidth = 0; this->BarRatioWidth = 0; - this->TitleRatioHeight = 0; - this->LabelRatioHeight = 0; this->BarRatioHeight = 0; + + // RKV : Begin + this->Distribution = vtkDoubleArray::New(); + this->DistributionObj = vtkDataObject::New(); + this->DistributionActor = VISU_XYPlotActor::New(); + this->DistributionActor->SetTitle(""); + this->DistributionActor->SetXTitle(""); + this->DistributionActor->SetYTitle(""); + this->DistributionActor->GetXAxisActor2D()->LabelVisibilityOff(); + this->DistributionActor->GetXAxisActor2D()->TitleVisibilityOff(); + this->DistributionActor->GetXAxisActor2D()->TickVisibilityOff(); +// this->DistributionActor->GetXAxisActor2D()->SetFontFactor(0.); + this->DistributionActor->SetNumberOfYLabels(1); +// this->DistributionActor->SetNumberOfXLabels(2); + this->DistributionActor->GetXAxisActor2D()->AdjustLabelsOff(); + this->DistributionActor->GetYAxisActor2D()->AdjustLabelsOff(); + this->DistributionActor->LegendOff(); + this->DistributionActor->SetLabelFormat("%4.3f"); + this->DistributionActor->SetXValuesToIndex(); +// this->DistributionActor->GetPositionCoordinate()->SetValue(0.0, 0.67, 0); +// this->DistributionActor->GetPosition2Coordinate()->SetValue(1.0, 0.33, 0); // #relative to Position + this->DistributionActor->GetPositionCoordinate()-> + SetReferenceCoordinate(this->PositionCoordinate); + this->DistributionVisibilityOff(); // Don't show the distribution curve by default + + // RKV : End } void VISU_ScalarBarActor::ReleaseGraphicsResources(vtkWindow *win) @@ -122,6 +148,7 @@ void VISU_ScalarBarActor::ReleaseGraphicsResources(vtkWindow *win) } } this->ScalarBarActor->ReleaseGraphicsResources(win); + this->DistributionActor->ReleaseGraphicsResources(win); // RKV } VISU_ScalarBarActor::~VISU_ScalarBarActor() @@ -146,10 +173,16 @@ VISU_ScalarBarActor::~VISU_ScalarBarActor() delete [] this->TextActors; } + // RKV : Begin + this->DistributionActor->Delete(); + this->DistributionObj->Delete(); + this->SetDistribution(NULL); + // RKV : End + this->ScalarBar->Delete(); this->ScalarBarMapper->Delete(); this->ScalarBarActor->Delete(); - + if (this->Title) { delete [] this->Title; @@ -172,6 +205,10 @@ int VISU_ScalarBarActor::RenderOverlay(vtkViewport *viewport) renderedSomething += this->TitleActor->RenderOverlay(viewport); } this->ScalarBarActor->RenderOverlay(viewport); + // RKV : Begin + if (this->DistributionVisibility) + this->DistributionActor->RenderOverlay(viewport); + // RKV : End if( this->TextActors == NULL) { vtkWarningMacro(<<"Need a mapper to render a scalar bar"); @@ -238,11 +275,19 @@ int VISU_ScalarBarActor::RenderOpaqueGeometry(vtkViewport *viewport) } // Check to see whether we have to rebuild everything + // RKV : Begin if (positionsHaveChanged || this->GetMTime() > this->BuildTime || this->LookupTable->GetMTime() > this->BuildTime || this->LabelTextProperty->GetMTime() > this->BuildTime || - this->TitleTextProperty->GetMTime() > this->BuildTime) + this->TitleTextProperty->GetMTime() > this->BuildTime || + this->Distribution->GetMTime() > this->BuildTime) + // RKV : End +/* RKV if (positionsHaveChanged || + this->GetMTime() > this->BuildTime || + this->LookupTable->GetMTime() > this->BuildTime || + this->LabelTextProperty->GetMTime() > this->BuildTime || + this->TitleTextProperty->GetMTime() > this->BuildTime)*/ { // Delete previously constructed objects @@ -276,6 +321,32 @@ int VISU_ScalarBarActor::RenderOpaqueGeometry(vtkViewport *viewport) colors->SetNumberOfComponents(3); colors->SetNumberOfTuples(numColors); +// RKV : Begin + // If the distribution is changed then recalculate the total + if (this->Distribution->GetMTime() > this->BuildTime) { + int aNbVals = this->Distribution->GetNumberOfTuples(); + double range[2]; + this->Distribution->GetRange(range); + this->DistributionActor->SetYRange(0, range[1]); +/* int total = 0; + for(vtkIdType aValId = 0; aValId < aNbVals; aValId++){ + total += this->Distribution->GetValue(aValId); + } + this->DistributionActor->SetYRange(0, total); +*/ + } + + this->DistributionActor->SetProperty(this->GetProperty()); + this->DistributionActor->GetProperty()->SetColor(1, 1, 1); + this->DistributionActor->GetProperty()->SetLineWidth(2); + this->DistributionActor->GetProperty()->SetDisplayLocationToForeground(); + vtkTextProperty* tprop; + tprop = this->DistributionActor->GetTitleTextProperty(); + tprop->SetColor(this->DistributionActor->GetProperty()->GetColor()); +// this->DistributionActor->SetAxisTitleTextProperty(tprop); +// this->DistributionActor->SetAxisLabelTextProperty(tprop); + +// RKV : End this->ScalarBarActor->SetProperty(this->GetProperty()); this->ScalarBar->Initialize(); this->ScalarBar->SetPoints(pts); @@ -394,6 +465,7 @@ int VISU_ScalarBarActor::RenderOpaqueGeometry(vtkViewport *viewport) this->TextActors[i]->SetPosition(barWidth+3, val - sizeTextData[1]/2); } + } else { @@ -405,7 +477,11 @@ int VISU_ScalarBarActor::RenderOpaqueGeometry(vtkViewport *viewport) val = (vtkFloatingPointType)i/(this->NumberOfLabels-1) * barWidth; this->TextActors[i]->SetPosition(val, barHeight + 0.05*size[1]); } + } + + // Compute the position of the distribution curve + this->PlaceDistribution(viewport, barWidth, barHeight); // RKV this->BuildTime.Modified(); } @@ -416,6 +492,10 @@ int VISU_ScalarBarActor::RenderOpaqueGeometry(vtkViewport *viewport) renderedSomething += this->TitleActor->RenderOpaqueGeometry(viewport); } this->ScalarBarActor->RenderOpaqueGeometry(viewport); + // RKV : Begin + if (this->DistributionVisibility) + this->DistributionActor->RenderOpaqueGeometry(viewport); + // RKV : End for (i=0; iNumberOfLabels; i++) { renderedSomething += this->TextActors[i]->RenderOpaqueGeometry(viewport); @@ -571,13 +651,10 @@ void VISU_ScalarBarActor::AllocateAndSizeLabels(int *labelSize, int *size, else targetWidth = (int)(0.01*LabelRatioWidth*size[0]); - if(LabelRatioHeight == 0) - if ( this->Orientation == VTK_ORIENT_VERTICAL ) - targetHeight = (int)(0.86*size[1]/this->NumberOfLabels); - else - targetHeight = (int)(0.25*size[1]); + if ( this->Orientation == VTK_ORIENT_VERTICAL ) + targetHeight = (int)(0.86*size[1]/this->NumberOfLabels); else - targetHeight = (int)(0.01*LabelRatioHeight*size[1]); + targetHeight = (int)(0.25*size[1]); vtkTextMapper::SetMultipleConstrainedFontSize(viewport, targetWidth, @@ -600,18 +677,15 @@ void VISU_ScalarBarActor::SizeTitle(int *titleSize, int *size, int targetWidth, targetHeight; - if(TitleRatioWidth == 0) + if(TitleRatioSize == 0) targetWidth = size[0]; else - targetWidth = (int)(0.01*TitleRatioWidth*size[0]); + targetWidth = (int)(0.01*TitleRatioSize*size[0]); - if(TitleRatioHeight == 0) - if ( this->Orientation == VTK_ORIENT_VERTICAL ) - targetHeight = (int)(0.1*size[1]); - else - targetHeight = (int)(0.25*size[1]); + if ( this->Orientation == VTK_ORIENT_VERTICAL ) + targetHeight = (int)(0.1*size[1]); else - targetHeight = (int)(0.01*TitleRatioHeight*size[1]); + targetHeight = (int)(0.25*size[1]); this->TitleMapper->SetConstrainedFontSize( viewport, targetWidth, targetHeight); @@ -619,21 +693,66 @@ void VISU_ScalarBarActor::SizeTitle(int *titleSize, int *size, this->TitleMapper->GetSize(viewport, titleSize); } -void VISU_ScalarBarActor::SetRatios(int titleRatioWidth, int titleRatioHeight, - int labelRatioWidth, int labelRatioHeight, +// RKV : Begin +void VISU_ScalarBarActor::SetDistributionVisibility(int v) +{ + this->DistributionVisibility = v; + if (v) { + this->DistributionActor->VisibilityOn(); + } else { + this->DistributionActor->VisibilityOff(); + } +} + +void VISU_ScalarBarActor::SetDistribution(vtkDoubleArray *distr) +{ + this->Distribution = distr; + if (distr == NULL) return; + + this->DistributionObj->Initialize(); + this->DistributionObj->GetFieldData()->AddArray(this->Distribution); + this->DistributionActor->AddDataObjectInput(this->DistributionObj); + // Set ranges of axes for the distribution curve + this->DistributionActor->SetXRange(0, this->Distribution->GetNumberOfTuples()-1); + double range[2]; + this->Distribution->GetRange(range); + int aNbVals = this->Distribution->GetNumberOfTuples(); +// int total = 0; + if (this->GetDebug()) { + for(vtkIdType aValId = 0; aValId < aNbVals; aValId++){ +// if (this->GetDebug()) { + if (this->Distribution->GetValue(aValId) > 0) + vtkDebugMacro(<< "D(" << aValId << ") = " << this->Distribution->GetValue(aValId)); +// } +// total += this->Distribution->GetValue(aValId); + } + } +// this->DistributionActor->SetYRange(0, total); + this->DistributionActor->SetYRange(0, range[1]); + vtkDebugMacro(<< "max X = " << this->Distribution->GetNumberOfTuples()); + vtkDebugMacro(<< "Y = (" << range[0] << ", " << range[1] << ")"); +// vtkDebugMacro(<< "total = " << total); +} + +void VISU_ScalarBarActor::DebugOn() { + this->DistributionActor->DebugOn(); + Superclass::DebugOn(); +} + +void VISU_ScalarBarActor::DebugOff() { + this->DistributionActor->DebugOff(); + Superclass::DebugOff(); +} +// RKV : End + +void VISU_ScalarBarActor::SetRatios(int titleRatioSize, int labelRatioWidth, int barRatioWidth, int barRatioHeight) { - TitleRatioWidth=titleRatioWidth; - if(TitleRatioWidth>100) - TitleRatioWidth=100; - else if(TitleRatioWidth<0) - TitleRatioWidth=0; - - TitleRatioHeight=titleRatioHeight; - if(TitleRatioHeight>100) - TitleRatioHeight=100; - else if(TitleRatioHeight<0) - TitleRatioHeight=0; + TitleRatioSize=titleRatioSize; + if(TitleRatioSize>100) + TitleRatioSize=100; + else if(TitleRatioSize<0) + TitleRatioSize=0; LabelRatioWidth=labelRatioWidth; if(LabelRatioWidth>100) @@ -641,12 +760,6 @@ void VISU_ScalarBarActor::SetRatios(int titleRatioWidth, int titleRatioHeight, else if(LabelRatioWidth<0) LabelRatioWidth=0; - LabelRatioHeight=labelRatioHeight; - if(LabelRatioHeight>100) - LabelRatioHeight=100; - else if(LabelRatioHeight<0) - LabelRatioHeight=0; - BarRatioWidth=barRatioWidth; if(BarRatioWidth>100) BarRatioWidth=100; @@ -660,14 +773,11 @@ void VISU_ScalarBarActor::SetRatios(int titleRatioWidth, int titleRatioHeight, BarRatioHeight=0; } -void VISU_ScalarBarActor::GetRatios(int& titleRatioWidth, int& titleRatioHeight, - int& labelRatioWidth, int& labelRatioHeight, - int& barRatioWidth, int& barRatioHeight) +void VISU_ScalarBarActor::GetRatios(int& titleRatioSize, int& labelRatioWidth, + int& barRatioWidth, int& barRatioHeight) { - titleRatioWidth=TitleRatioWidth; - titleRatioHeight=TitleRatioHeight; + titleRatioSize=TitleRatioSize; labelRatioWidth=LabelRatioWidth; - labelRatioHeight=LabelRatioHeight; barRatioWidth=BarRatioWidth; barRatioHeight=BarRatioHeight; } @@ -694,3 +804,91 @@ void VISU_ScalarBarActor::SizeBar(int& barSizeWidth, int& barSizeHeight, int *si else barSizeHeight = (int)(0.01*BarRatioHeight*size[1]); } +// RKV : Begin +//------------------------------------------------------------------------------ +/** Place the distribution plot actor in the viewport according to the + * scalar bar location and orientation */ +void VISU_ScalarBarActor::PlaceDistribution(vtkViewport *viewport, const int barWidth, const int barHeight) { + vtkDebugMacro(<< "barOrigin[0]=" << this->LastOrigin[0] << "; barOrigin[1]=" << this->LastOrigin[1]); + // Detect the side of the viewport where the curve should be placed by the bar origin. + double u = (double)(this->LastOrigin[0]), v = (double)(this->LastOrigin[1]), z=0; + viewport->ViewportToNormalizedViewport(u, v); + + if ( this->Orientation == VTK_ORIENT_VERTICAL ) { + // Position the distribution curve vertically + if (u > 0.5) { + // X - UP, Y - TO THE LEFT + this->DistributionActor->SetPlotLocation(VISU_XYPLOT_RIGHT); + // Curve to be placed on the left side of the bar + vtkDebugMacro(<< "Curve to be placed on the left side of the bar"); + // relative to the bar origin + u = 0; + v = 0; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro(<< "u=" << u << "; v=" << v); + this->DistributionActor->GetPositionCoordinate()->SetValue(u, v, 0); + // relative to Position + u = - barWidth; + v = barHeight; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro("u2=" << u << "; v2=" << v); + this->DistributionActor->GetPosition2Coordinate()->SetValue(u, v, 0); + } else { + // X - UP, Y - TO THE RIGHT + this->DistributionActor->SetPlotLocation(VISU_XYPLOT_LEFT); + // Curve to be placed on the right side of the bar + vtkDebugMacro(<< "Curve to be placed on the right side of the bar"); + // relative to the bar origin + u = barWidth; + v = 0; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro(<< "u=" << u << "; v=" << v); + this->DistributionActor->GetPositionCoordinate()->SetValue(u, v, 0); + // relative to Position + u = barWidth; + v = barHeight; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro("u2=" << u << "; v2=" << v); + this->DistributionActor->GetPosition2Coordinate()->SetValue(u, v, 0); + } + } else { + // Position the distribution curve horizontally + if (v > 0.5) { + // X - TO THE LEFT, Y - DOWN + this->DistributionActor->SetPlotLocation(VISU_XYPLOT_TOP); + // Curve to be placed below the bar + vtkDebugMacro(<< "Curve to be placed below the bar"); + // relative to the bar origin + u = 0; + v = 0; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro(<< "u=" << u << "; v=" << v); + this->DistributionActor->GetPositionCoordinate()->SetValue(u, v, 0); + // relative to Position + u = barWidth; + v = - barHeight; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro("u2=" << u << "; v2=" << v); + this->DistributionActor->GetPosition2Coordinate()->SetValue(u, v, 0); + } else { + // X - TO THE RIGHT, Y - UP + this->DistributionActor->SetPlotLocation(VISU_XYPLOT_BOTTOM); + // Curve to be placed on the top of the bar + vtkDebugMacro(<< "Curve to be placed on the top of the bar"); + // relative to the bar origin + u = 0; + v = barHeight; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro(<< "u=" << u << "; v=" << v); + this->DistributionActor->GetPositionCoordinate()->SetValue(u, v, 0); + // relative to Position + u = barWidth; + v = barHeight; + viewport->ViewportToNormalizedViewport(u, v); + vtkDebugMacro("u2=" << u << "; v2=" << v); + this->DistributionActor->GetPosition2Coordinate()->SetValue(u, v, 0); + } + } +} +// RKV : End + diff --git a/src/PIPELINE/VISU_ScalarBarActor.hxx b/src/PIPELINE/VISU_ScalarBarActor.hxx index 3252e6e8..24c1e862 100644 --- a/src/PIPELINE/VISU_ScalarBarActor.hxx +++ b/src/PIPELINE/VISU_ScalarBarActor.hxx @@ -29,8 +29,10 @@ #include "VISUPipeline.hxx" #include "VISU_LookupTable.hxx" +#include "VISU_XYPlotActor.hxx" #include +#include // RKV class vtkPolyData; class vtkPolyDataMapper2D; @@ -106,15 +108,31 @@ public: // Set/Get the labels text property. virtual void SetLabelTextProperty(vtkTextProperty *p); vtkGetObjectMacro(LabelTextProperty,vtkTextProperty); + +// RKV : Begin + // Description: + // Set/Get the values distribution array + virtual void SetDistribution(vtkDoubleArray *d); + vtkGetObjectMacro(Distribution,vtkDoubleArray); + + // Description: + // Set/Get the flag of distribution plot visibility + void SetDistributionVisibility(int v); + vtkGetMacro(DistributionVisibility, int); + void DistributionVisibilityOn() + {this->SetDistributionVisibility(1);}; + void DistributionVisibilityOff() {this->SetDistributionVisibility(0);}; + + void DebugOn(); + void DebugOff(); +// RKV : End // Description: // Set/Get the scalar bar dimention properties in persents. // 0 <= ration <= 100 - void SetRatios(int titleRatioWidth, int titleRatioHeight, - int labelRatioWidth, int labelRatioHeight, + void SetRatios(int titleRatioSize,int labelRatioWidth, int barRatioWidth, int barRatioHeight); - void GetRatios(int& titleRatioWidth, int& titleRatioHeight, - int& labelRatioWidth, int& labelRatioHeight, + void GetRatios(int& titleRatioSize, int& labelRatioWidth, int& barRatioWidth, int& barRatioHeight); // Description: @@ -139,6 +157,13 @@ protected: VISU_LookupTable *LookupTable; vtkTextProperty *TitleTextProperty; vtkTextProperty *LabelTextProperty; + + /** Array for keeping the distribution of colors within cells. + * For each color index the appropriate element of the array contains + * a number of cells for this color.*/ + vtkDoubleArray *Distribution; // RKV + /** Visibility flag for the distribution plot */ + int DistributionVisibility; // RKV int MaximumNumberOfColors; int NumberOfLabels; @@ -146,11 +171,9 @@ protected: int Orientation; char *Title; char *LabelFormat; - int TitleRatioWidth; + int TitleRatioSize; int LabelRatioWidth; int BarRatioWidth; - int TitleRatioHeight; - int LabelRatioHeight; int BarRatioHeight; vtkTextMapper **TextMappers; @@ -167,6 +190,9 @@ private: vtkPolyDataMapper2D *ScalarBarMapper; vtkActor2D *ScalarBarActor; + vtkDataObject *DistributionObj; // RKV + VISU_XYPlotActor *DistributionActor; // RKV + vtkTimeStamp BuildTime; int LastSize[2]; int LastOrigin[2]; @@ -175,6 +201,10 @@ private: void SizeBar(int& barSizeWidth, int& barSizeHeight, int *size, vtkViewport *viewport, vtkFloatingPointType *range); + + /** Place the distribution plot actor in the viewport according to the + * scalar bar location and orientation */ + void PlaceDistribution(vtkViewport *viewport, const int barWidth, const int barHeight); private: VISU_ScalarBarActor(const VISU_ScalarBarActor&); // Not implemented. diff --git a/src/PIPELINE/VISU_ScalarBarCtrl.cxx b/src/PIPELINE/VISU_ScalarBarCtrl.cxx index 5dbf6e47..3003295d 100644 --- a/src/PIPELINE/VISU_ScalarBarCtrl.cxx +++ b/src/PIPELINE/VISU_ScalarBarCtrl.cxx @@ -39,68 +39,6 @@ #include -//---------------------------------------------------------------------------- -namespace -{ - inline - void - MarkValueByColor(VISU_LookupTable* theTable, - vtkFloatingPointType theValue, - unsigned char* theColor) - { - vtkIdType anIndex = theTable->GetIndex(theValue); - unsigned char *aTablePtr = theTable->GetPointer(anIndex); - aTablePtr[0] = theColor[0]; - aTablePtr[1] = theColor[1]; - aTablePtr[2] = theColor[2]; - } - - inline - void - CopyColor(unsigned char* theTaget, const unsigned char* theSource) - { - theTaget[0] = theSource[0]; - theTaget[1] = theSource[1]; - theTaget[2] = theSource[2]; - } - - void - FillByColor(VISU_LookupTable* theTable, - unsigned char* theColor) - { - vtkIdType aNbColors = theTable->GetNumberOfColors(); - for(int i = 0; i < aNbColors; i++){ - unsigned char *aTablePtr = theTable->GetPointer(i); - CopyColor(aTablePtr,theColor); - } - } - - void - MakeBiColor(VISU_LookupTable* theTable) - { - unsigned char aRedPtr[3] = {255, 0, 0}; - unsigned char aBluePtr[3] = {0, 0, 255}; - - vtkFloatingPointType aRange[2]; - theTable->GetTableRange(aRange); - vtkIdType aNbColors = theTable->GetNumberOfColors(); - - vtkFloatingPointType aDelta = (aRange[1]-aRange[0])/aNbColors; - vtkFloatingPointType aValue = aRange[0]+0.5*aDelta; - for(int i = 0; i < aNbColors; i++){ - vtkIdType anIndex = theTable->GetIndex(aValue); - unsigned char* aTablePtr = theTable->GetPointer(anIndex); - if(aValue > 0.0){ - CopyColor(aTablePtr,aRedPtr); - }else{ - CopyColor(aTablePtr,aBluePtr); - } - aValue += aDelta; - } - } -} - - //---------------------------------------------------------------------------- vtkStandardNewMacro(VISU_ScalarBarCtrl); @@ -435,16 +373,16 @@ VISU_ScalarBarCtrl { if(myMarked){ if(myMode == eGlobal){ - MarkValueByColor(myGlobalLookupTable, myMarkedValue, myBlack); + myGlobalLookupTable->MarkValueByColor( myMarkedValue, myBlack ); }else{ - MarkValueByColor(myLocalLookupTable, myMarkedValue, myBlack); + myLocalLookupTable->MarkValueByColor( myMarkedValue, myBlack ); } } if(myGlobalRangeIsDefined){ vtkFloatingPointType aLocalRange[2]; myLocalLookupTable->GetTableRange(aLocalRange); - MarkValueByColor(myGlobalLookupTable, aLocalRange[0], myBlack); - MarkValueByColor(myGlobalLookupTable, aLocalRange[1], myBlack); + myGlobalLookupTable->MarkValueByColor( aLocalRange[0], myBlack ); + myGlobalLookupTable->MarkValueByColor( aLocalRange[1], myBlack ); } } @@ -490,9 +428,9 @@ VISU_ScalarBarCtrl ::UpdateForColor() { if(myMode == eGlobal){ - FillByColor(myLocalLookupTable,myGrey); + myLocalLookupTable->FillByColor( myGrey ); }else if(myMode == eLocal){ - FillByColor(myGlobalLookupTable,myGrey); + myGlobalLookupTable->FillByColor( myGrey ); } } @@ -506,15 +444,15 @@ VISU_ScalarBarCtrl myLocalLookupTable->Build(); if(myMode == eSimple){ - MakeBiColor(myLocalLookupTable); + myLocalLookupTable->MakeBiColor(); return; } if(myMode == eGlobal){ - MakeBiColor(myGlobalLookupTable); - FillByColor(myLocalLookupTable,myGrey); + myGlobalLookupTable->MakeBiColor(); + myLocalLookupTable->FillByColor( myGrey ); }else if(myMode == eLocal){ - MakeBiColor(myLocalLookupTable); - FillByColor(myGlobalLookupTable,myGrey); + myLocalLookupTable->MakeBiColor(); + myGlobalLookupTable->FillByColor( myGrey ); } } diff --git a/src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.cxx b/src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.cxx similarity index 85% rename from src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.cxx rename to src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.cxx index b807671e..54ff4f87 100644 --- a/src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.cxx +++ b/src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.cxx @@ -1,4 +1,4 @@ -// VISU DeformedShapeAndScalarMapPL +// VISU ScalarMapOnDeformedShapePL // // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -20,11 +20,11 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // -// File: VISU_DeformedShapeAndScalarMapPL.cxx +// File: VISU_ScalarMapOnDeformedShapePL.cxx // Author: Eugeny Nikolaev // Module : VISU -#include "VISU_DeformedShapeAndScalarMapPL.hxx" +#include "VISU_ScalarMapOnDeformedShapePL.hxx" #include "VISU_FieldTransform.hxx" #include "VISU_Extractor.hxx" #include "VISU_LookupTable.hxx" @@ -32,7 +32,7 @@ #include "VTKViewer_TransformFilter.h" #include "VTKViewer_Transform.h" #include "VISU_MergeFilter.hxx" -#include "VISU_ElnoDisassembleFilter.hxx" + #include "VISU_PipeLineUtils.hxx" #include @@ -42,7 +42,7 @@ //---------------------------------------------------------------------------- -vtkStandardNewMacro(VISU_DeformedShapeAndScalarMapPL) +vtkStandardNewMacro(VISU_ScalarMapOnDeformedShapePL) //---------------------------------------------------------------------------- /*! @@ -53,10 +53,9 @@ vtkStandardNewMacro(VISU_DeformedShapeAndScalarMapPL) * Merge filter which unify the deformation and scalars * \li myScalars is vtk shared pointer to vtkUnstructuredGrid - scalars data */ -VISU_DeformedShapeAndScalarMapPL -::VISU_DeformedShapeAndScalarMapPL(): - myScaleFactor(1.0), - myMapScaleFactor(1.0) +VISU_ScalarMapOnDeformedShapePL +::VISU_ScalarMapOnDeformedShapePL(): + myScaleFactor(0.0) { myWarpVector = vtkWarpVector::New(); @@ -68,7 +67,6 @@ VISU_DeformedShapeAndScalarMapPL myScalarsFieldTransform = VISU_FieldTransform::New(); myCellDataToPointData = vtkCellDataToPointData::New(); - myScalarsElnoDisassembleFilter = VISU_ElnoDisassembleFilter::New(); } //---------------------------------------------------------------------------- @@ -76,8 +74,8 @@ VISU_DeformedShapeAndScalarMapPL * Destructor. * Delete all fields. */ -VISU_DeformedShapeAndScalarMapPL -::~VISU_DeformedShapeAndScalarMapPL() +VISU_ScalarMapOnDeformedShapePL +::~VISU_ScalarMapOnDeformedShapePL() { myWarpVector->Delete(); @@ -95,7 +93,7 @@ VISU_DeformedShapeAndScalarMapPL * Initial method */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::Init() { Superclass::Init(); @@ -109,7 +107,7 @@ VISU_DeformedShapeAndScalarMapPL * Building of deformation and puts result to merge filter. */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::Build() { Superclass::Build(); @@ -118,7 +116,7 @@ VISU_DeformedShapeAndScalarMapPL //---------------------------------------------------------------------------- vtkDataSet* -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::InsertCustomPL() { GetMapper()->SetColorModeToMapScalars(); @@ -151,7 +149,7 @@ VISU_DeformedShapeAndScalarMapPL * Update method */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::Update() { Superclass::Update(); @@ -171,7 +169,7 @@ VISU_DeformedShapeAndScalarMapPL //---------------------------------------------------------------------------- unsigned long int -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::GetMemorySize() { unsigned long int aSize = Superclass::GetMemorySize(); @@ -198,14 +196,13 @@ VISU_DeformedShapeAndScalarMapPL * Put scalars to merge filter. */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::UpdateScalars() { vtkDataSet* aScalars = GetScalars(); - myScalarsElnoDisassembleFilter->SetInput(aScalars); - myScalarsExtractor->SetInput(myScalarsElnoDisassembleFilter->GetOutput()); + myScalarsExtractor->SetInput(aScalars); - if(VISU::IsDataOnCells(myScalarsElnoDisassembleFilter->GetOutput())) + if(VISU::IsDataOnCells(aScalars)) GetMapper()->SetScalarModeToUseCellData(); else GetMapper()->SetScalarModeToUsePointData(); @@ -217,13 +214,13 @@ VISU_DeformedShapeAndScalarMapPL * Copy scale and scalars. */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::DoShallowCopy(VISU_PipeLine *thePipeLine, bool theIsCopyInput) { Superclass::DoShallowCopy(thePipeLine, theIsCopyInput); - if(VISU_DeformedShapeAndScalarMapPL *aPipeLine = dynamic_cast(thePipeLine)){ + if(VISU_ScalarMapOnDeformedShapePL *aPipeLine = dynamic_cast(thePipeLine)){ SetScale(aPipeLine->GetScale()); SetScalars(aPipeLine->GetScalars()); } @@ -235,12 +232,12 @@ VISU_DeformedShapeAndScalarMapPL * Sets vtkDataSet with scalars values to VISU_Extractor filter for scalars extraction. */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::SetScalars(vtkDataSet *theScalars) { if(GetScalars() == theScalars) return; - + myScalars = theScalars; UpdateScalars(); } @@ -250,7 +247,7 @@ VISU_DeformedShapeAndScalarMapPL * Get pointer to input scalars. */ vtkDataSet* -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::GetScalars() { return myScalars.GetPointer(); @@ -261,14 +258,14 @@ VISU_DeformedShapeAndScalarMapPL * Sets scale for deformed shape */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::SetScale(vtkFloatingPointType theScale) { if(VISU::CheckIsSameValue(myScaleFactor, theScale)) return; + myWarpVector->SetScaleFactor(theScale); myScaleFactor = theScale; - myWarpVector->SetScaleFactor(theScale*myMapScaleFactor); } //---------------------------------------------------------------------------- @@ -276,10 +273,10 @@ VISU_DeformedShapeAndScalarMapPL * Gets scale of deformed shape. */ vtkFloatingPointType -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::GetScale() { - return myScaleFactor; + return myWarpVector->GetScaleFactor(); } //---------------------------------------------------------------------------- @@ -287,10 +284,9 @@ VISU_DeformedShapeAndScalarMapPL * Set scale factor of deformation. */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::SetMapScale(vtkFloatingPointType theMapScale) { - myMapScaleFactor = theMapScale; Superclass::SetMapScale(theMapScale); myWarpVector->SetScaleFactor(myScaleFactor*theMapScale); } @@ -300,7 +296,7 @@ VISU_DeformedShapeAndScalarMapPL * Gets scalar mode. */ int -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::GetScalarMode() { return myScalarsExtractor->GetScalarMode(); @@ -311,7 +307,7 @@ VISU_DeformedShapeAndScalarMapPL * Sets scalar mode. */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::SetScalarMode(int theScalarMode) { VISU_ScalarMapPL::SetScalarMode(theScalarMode, GetScalars(), myScalarsExtractor); @@ -319,7 +315,7 @@ VISU_DeformedShapeAndScalarMapPL //---------------------------------------------------------------------------- void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::SetScaling(int theScaling) { if(GetScaling() == theScaling) @@ -336,7 +332,7 @@ VISU_DeformedShapeAndScalarMapPL //---------------------------------------------------------------------------- void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::SetScalarRange(vtkFloatingPointType theRange[2]) { if(VISU::CheckIsSameRange(theRange, GetScalarRange())) @@ -349,7 +345,7 @@ VISU_DeformedShapeAndScalarMapPL //---------------------------------------------------------------------------- vtkFloatingPointType* -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::GetScalarRange() { return myScalarsFieldTransform->GetScalarRange(); @@ -364,7 +360,7 @@ VISU_DeformedShapeAndScalarMapPL * \li theRange[1] - maximum value */ void -VISU_DeformedShapeAndScalarMapPL +VISU_ScalarMapOnDeformedShapePL ::GetSourceRange(vtkFloatingPointType theRange[2]) { myScalarsExtractor->Update(); diff --git a/src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.hxx b/src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.hxx similarity index 81% rename from src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.hxx rename to src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.hxx index b3d454a2..041a37d2 100644 --- a/src/PIPELINE/VISU_DeformedShapeAndScalarMapPL.hxx +++ b/src/PIPELINE/VISU_ScalarMapOnDeformedShapePL.hxx @@ -20,12 +20,12 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // -// File: VISU_DeformedShapeAndScalarMapPL.hxx +// File: VISU_ScalarMapOnDeformedShapePL.hxx // Author: Eugeny Nikolaev // Module : VISU -#ifndef VISU_DeformedShapeAndScalarMapPL_HeaderFile -#define VISU_DeformedShapeAndScalarMapPL_HeaderFile +#ifndef VISU_ScalarMapOnDeformedShapePL_HeaderFile +#define VISU_ScalarMapOnDeformedShapePL_HeaderFile #include "VISUPipeline.hxx" #include "VISU_ScalarMapPL.hxx" @@ -35,17 +35,16 @@ class vtkWarpVector; class vtkUnstructuredGrid; class vtkCellDataToPointData; class vtkPointDataToCellData; -class VISU_ElnoDisassembleFilter; //---------------------------------------------------------------------------- -class VISU_PIPELINE_EXPORT VISU_DeformedShapeAndScalarMapPL : public VISU_ScalarMapPL +class VISU_PIPELINE_EXPORT VISU_ScalarMapOnDeformedShapePL : public VISU_ScalarMapPL { public: - vtkTypeMacro(VISU_DeformedShapeAndScalarMapPL, VISU_ScalarMapPL); + vtkTypeMacro(VISU_ScalarMapOnDeformedShapePL, VISU_ScalarMapPL); static - VISU_DeformedShapeAndScalarMapPL* + VISU_ScalarMapOnDeformedShapePL* New(); virtual @@ -118,10 +117,10 @@ public: SetMapScale(vtkFloatingPointType theMapScale = 1.0); protected: - VISU_DeformedShapeAndScalarMapPL(); + VISU_ScalarMapOnDeformedShapePL(); virtual - ~VISU_DeformedShapeAndScalarMapPL(); + ~VISU_ScalarMapOnDeformedShapePL(); virtual vtkDataSet* @@ -133,17 +132,15 @@ protected: bool theIsCopyInput); private: - VISU_DeformedShapeAndScalarMapPL(const VISU_DeformedShapeAndScalarMapPL&); + VISU_ScalarMapOnDeformedShapePL(const VISU_ScalarMapOnDeformedShapePL&); vtkFloatingPointType myScaleFactor; - vtkFloatingPointType myMapScaleFactor; vtkWarpVector *myWarpVector; VISU_MergeFilter *myScalarsMergeFilter; vtkSmartPointer myScalars; vtkCellDataToPointData* myCellDataToPointData; VISU_FieldTransform* myScalarsFieldTransform; VISU_Extractor* myScalarsExtractor; - VISU_ElnoDisassembleFilter* myScalarsElnoDisassembleFilter; }; #endif diff --git a/src/PIPELINE/VISU_ScalarMapPL.cxx b/src/PIPELINE/VISU_ScalarMapPL.cxx index ad739773..e252334b 100644 --- a/src/PIPELINE/VISU_ScalarMapPL.cxx +++ b/src/PIPELINE/VISU_ScalarMapPL.cxx @@ -56,6 +56,7 @@ VISU_ScalarMapPL myMergeFilter(VISU_MergeFilter::New()) { SetIsShrinkable(true); + SetIsFeatureEdgesAllowed(true); SetElnoDisassembleState( false ); diff --git a/src/PIPELINE/VISU_StreamLinesPL.cxx b/src/PIPELINE/VISU_StreamLinesPL.cxx index b596155e..82c05009 100644 --- a/src/PIPELINE/VISU_StreamLinesPL.cxx +++ b/src/PIPELINE/VISU_StreamLinesPL.cxx @@ -62,6 +62,7 @@ VISU_StreamLinesPL ::VISU_StreamLinesPL() { SetIsShrinkable(false); + SetIsFeatureEdgesAllowed(false); myStream = vtkStreamLine::New(); myCenters = vtkCellCenters::New(); diff --git a/src/PIPELINE/VISU_VectorsPL.cxx b/src/PIPELINE/VISU_VectorsPL.cxx index 1c3257b9..e3976494 100644 --- a/src/PIPELINE/VISU_VectorsPL.cxx +++ b/src/PIPELINE/VISU_VectorsPL.cxx @@ -63,7 +63,8 @@ void ToCellCenters( TOutputFilter *theOutputFilter, VISU_VectorsPL ::VISU_VectorsPL() { - SetIsShrinkable( false ); + SetIsShrinkable(false); + SetIsFeatureEdgesAllowed(false); myGlyph = vtkGlyph3D::New(); diff --git a/src/VISUGUI/Makefile.am b/src/VISUGUI/Makefile.am index e3a86336..959e972e 100644 --- a/src/VISUGUI/Makefile.am +++ b/src/VISUGUI/Makefile.am @@ -30,20 +30,65 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am lib_LTLIBRARIES= libVISU.la -salomeinclude_HEADERS= VisuGUI_Tools.h - # .po files to transform in .qm nodist_salomeres_DATA= \ VISU_msg_en.qm VISU_images.qm +salomeinclude_HEADERS= \ + VisuGUI_Tools.h \ + VisuGUI_Prs3dTools.h \ + VisuGUI_ActionsDef.h \ + VisuGUI.h \ + VisuGUI_Module.h \ + VisuGUI_Selection.h \ + VisuGUI_Tools.h \ + VisuGUI_ViewTools.h \ + VisuGUI_PopupTools.h \ + VisuGUI_NameDlg.h \ + VisuGUI_FileDlg.h \ + VisuGUI_CursorDlg.h \ + VisuGUI_TimeAnimation.h \ + VisuGUI_EditContainerDlg.h \ + VisuGUI_ClippingDlg.h \ + VisuGUI_DialogRunner.h \ + VisuGUI_OffsetDlg.h \ + VisuGUI_Prs3dDlg.h \ + VisuGUI_ScalarBarDlg.h \ + VisuGUI_Plot3DDlg.h \ + VisuGUI_GaussPointsDlg.h \ + VisuGUI_DeformedShapeDlg.h \ + VisuGUI_IsoSurfacesDlg.h \ + VisuGUI_CutLinesDlg.h \ + VisuGUI_CutPlanesDlg.h \ + VisuGUI_StreamLinesDlg.h \ + VisuGUI_VectorsDlg.h \ + VisuGUI_Displayer.h \ + VisuGUI_DeformedShapeAndScalarMapDlg.h \ + VisuGUI_SetupPlot2dDlg.h \ + VisuGUI_BuildProgressDlg.h \ + VisuGUI_TransparencyDlg.h \ + VisuGUI_Timer.h \ + VisuGUI_Slider.h \ + VisuGUI_InputPane.h \ + VisuGUI_CacheDlg.h \ + VisuGUI_FieldFilter.h \ + VisuGUI_ValuesLabelingDlg.h + dist_libVISU_la_SOURCES= \ VisuGUI.cxx \ VisuGUI_Factory.cxx \ VisuGUI_Module.cxx \ - VisuGUI_Selection.cxx \ + VisuGUI_InputPanel.cxx \ + VisuGUI_BasePanel.cxx \ + VisuGUI_Panel.cxx \ + VisuGUI_SelectionPanel.cxx \ + VisuGUI_SelectionPrefDlg.cxx \ + VisuGUI_GaussPointsSelectionPane.cxx \ + VisuGUI_FindPane.cxx \ + VisuGUI_FeatureEdgesPanel.cxx \ VisuGUI_Tools.cxx \ VisuGUI_ViewTools.cxx \ - VisuGUI_PopupTools.cxx \ + VisuGUI_Selection.cxx \ VisuGUI_NameDlg.cxx \ VisuGUI_FileDlg.cxx \ VisuGUI_CursorDlg.cxx \ @@ -70,15 +115,27 @@ dist_libVISU_la_SOURCES= \ VisuGUI_TransparencyDlg.cxx \ VisuGUI_Timer.cxx \ VisuGUI_Slider.cxx \ + VisuGUI_Sweep.cxx \ VisuGUI_InputPane.cxx \ VisuGUI_CacheDlg.cxx \ + VisuGUI_FileInfoDlg.cxx \ VisuGUI_FieldFilter.cxx \ - VisuGUI_FileInfoDlg.cxx + VisuGUI_ClippingPanel.cxx \ + VisuGUI_ClippingPlaneDlg.cxx \ + VisuGUI_FilterScalarsDlg.cxx \ + VisuGUI_ValuesLabelingDlg.cxx MOC_FILES= \ VisuGUI_moc.cxx \ VisuGUI_Module_moc.cxx \ - VisuGUI_Selection_moc.cxx \ + VisuGUI_InputPanel_moc.cxx \ + VisuGUI_BasePanel_moc.cxx \ + VisuGUI_Panel_moc.cxx \ + VisuGUI_SelectionPanel_moc.cxx \ + VisuGUI_SelectionPrefDlg_moc.cxx \ + VisuGUI_GaussPointsSelectionPane_moc.cxx \ + VisuGUI_FindPane_moc.cxx \ + VisuGUI_FeatureEdgesPanel_moc.cxx \ VisuGUI_NameDlg_moc.cxx \ VisuGUI_FileDlg_moc.cxx \ VisuGUI_CursorDlg_moc.cxx \ @@ -103,9 +160,15 @@ MOC_FILES= \ VisuGUI_Table3dDlg_moc.cxx \ VisuGUI_TransparencyDlg_moc.cxx \ VisuGUI_Slider_moc.cxx \ + VisuGUI_Sweep_moc.cxx \ VisuGUI_InputPane_moc.cxx \ VisuGUI_CacheDlg_moc.cxx \ - VisuGUI_FileInfoDlg_moc.cxx + VisuGUI_FileInfoDlg_moc.cxx \ + VisuGUI_ClippingPanel_moc.cxx \ + VisuGUI_ClippingPlaneDlg_moc.cxx \ + VisuGUI_FilterScalarsDlg_moc.cxx \ + VisuGUI_ValuesLabelingDlg_moc.cxx + nodist_libVISU_la_SOURCES=$(MOC_FILES) diff --git a/src/VISUGUI/VISU_images.ts b/src/VISUGUI/VISU_images.ts deleted file mode 100644 index dd7a9d46..00000000 --- a/src/VISUGUI/VISU_images.ts +++ /dev/null @@ -1,294 +0,0 @@ - - - - @default - - ICON_ADD - Visu_add.png - - - ICON_CUBE_AXES - Visu_graduated_axes.png - - - ICON_CUT_LINES - Visu_cutlines.png - - - ICON_CUT_PLANES - Visu_cutplanes.png - - - ICON_DEFORMED_SHAPE - Visu_deformed.png - - - ICON_ERASE_ALL - Visu_eraseall.png - - - ICON_GAUSS_NEW_VIEWER - Visu_points.png - - - ICON_GAUSS_POINTS - Visu_gauss_points.png - - - ICON_GLOBAL_SELECTION - Visu_selectall.png - - - ICON_HOLO_RENDER - Visu_holo_render.png - - - ICON_IMPORT_MED - Visu_import_med.png - - - ICON_ISO_SURFACES - Visu_isosurfaces.png - - - ICON_LOAD_TEXTURE - Visu_load_texture.png - - - ICON_MULTIPR_VIEW_FULL - Visu_tree_multipr_full.png - - - ICON_MULTIPR_VIEW_HIDE - Visu_tree_multipr_hide.png - - - ICON_MULTIPR_VIEW_LOW - Visu_tree_multipr_low.png - - - ICON_MULTIPR_VIEW_MEDIUM - Visu_tree_multipr_medium.png - - - ICON_OBJBROWSER_Visu - Visu_tree_visu.png - - - ICON_PARTIAL_SELECTION - Visu_selectonly.png - - - ICON_PLOT2D - Visu_plot2d.png - - - ICON_PLOT_3D - Visu_plot3d.png - - - ICON_POINTS - Visu_points.png - - - ICON_REMOVE - Visu_remove.png - - - ICON_SCALAR_MAP - Visu_scalars.png - - - ICON_SCALAR_MAP_ON_DEFORMED_SHAPE - Visu_scalarmapondeformedshape.png - - - ICON_SCALING - Visu_scaling.png - - - ICON_SLIDER_AVI - Visu_slider_avi.png - - - ICON_SLIDER_FIRST - Visu_slider_first.png - - - ICON_SLIDER_LAST - Visu_slider_last.png - - - ICON_SLIDER_MORE - Visu_slider_more.png - - - ICON_SLIDER_NEXT - Visu_slider_next.png - - - ICON_SLIDER_PAUSE - Visu_slider_pause.png - - - ICON_SLIDER_PLAY - Visu_slider_play.png - - - ICON_SLIDER_PREVIOUS - Visu_slider_previous.png - - - ICON_STREAM_LINES - Visu_streamlines.png - - - ICON_SURFACE - Visu_surface.png - - - ICON_SWEEP - Visu_scalars_anim.png - - - ICON_TIMEANIMATION - Visu_anim.png - - - ICON_TREE_CONTAINER - Visu_tree_container.png - - - ICON_TREE_CURVE - Visu_tree_curve.png - - - ICON_TREE_CUT_LINES - Visu_tree_cutlines.png - - - ICON_TREE_CUT_LINES_GROUPS - Visu_tree_cutlines_gr.png - - - ICON_TREE_CUT_PLANES - Visu_tree_cutplanes.png - - - ICON_TREE_CUT_PLANES_GROUPS - Visu_tree_cutplanes_gr.png - - - ICON_TREE_DEFORMED_SHAPE - Visu_tree_deformed.png - - - ICON_TREE_DEFORMED_SHAPE_GROUPS - Visu_tree_deformed_gr.png - - - ICON_TREE_GAUSS_POINTS - Visu_tree_gauss_points.png - - - ICON_TREE_ISO_SURFACES - Visu_tree_isosurfaces.png - - - ICON_TREE_ISO_SURFACES_GROUPS - Visu_tree_isosurfaces_gr.png - - - ICON_TREE_MESH - Visu_tree_mesh.png - - - ICON_TREE_PLOT_3D - Visu_tree_plot3d.png - - - ICON_TREE_PLOT_3D_GROUPS - Visu_tree_plot3d_gr.png - - - ICON_TREE_RESULT - Visu_tree_result.png - - - ICON_TREE_SCALAR_MAP - Visu_tree_scalars.png - - - ICON_TREE_SCALAR_MAP_GROUPS - Visu_tree_scalars_gr.png - - - ICON_TREE_SCALAR_MAP_ON_DEFORMED_SHAPE - Visu_tree_scalarmapondeformedshape.png - - - ICON_TREE_SCALAR_MAP_ON_DEFORMED_SHAPE_GROUPS - Visu_tree_scalarmapondeformedshape_gr.png - - - ICON_TREE_STREAM_LINES - Visu_tree_streamlines.png - - - ICON_TREE_STREAM_LINES_GROUPS - Visu_tree_streamlines_gr.png - - - ICON_TREE_TABLE - Visu_tree_table.png - - - ICON_TREE_VECTORS - Visu_tree_vectors.png - - - ICON_TREE_VECTORS_GROUPS - Visu_tree_vectors_gr.png - - - ICON_VECTORS - Visu_vectors.png - - - ICON_VVTK_INTERACTOR_STYLE_SWITCH - Visu_vvtk_switch.png - - - ICON_VVTK_PLANE_SEGMENTATION_SWITCH - Visu_PlaneSegmentation.png - - - ICON_VVTK_RECORDING_PAUSE - Visu_recording_pause.png - - - ICON_VVTK_RECORDING_PLAY - Visu_recording_play.png - - - ICON_VVTK_RECORDING_START - Visu_recording_start.png - - - ICON_VVTK_RECORDING_STOP - Visu_recording_stop.png - - - ICON_VVTK_SELECTION_MODE_SWITCH - Visu_points.png - - - ICON_VVTK_SPHERE_SEGMENTATION_SWITCH - Visu_SphereSegmentation.png - - - ICON_WIREFRAME - Visu_wireframe.png - - - diff --git a/src/VISUGUI/VISU_msg_en.ts b/src/VISUGUI/VISU_msg_en.ts deleted file mode 100644 index b24996d2..00000000 --- a/src/VISUGUI/VISU_msg_en.ts +++ /dev/null @@ -1,3431 +0,0 @@ - - - - @default - - ASSIGNED - Assigned - - - ATTRIBUTES_LBL - Attributes - - - AXIS_LBL - Axis - - - BTN_RESET - Reset - - - DATA_LBL - Data - - - ERR_CANT_BUILD_PRESENTATION - The object can't be built - - - ERR_CANT_CREATE_ACTOR - Can't create actor for this presentation - - - ERR_CANT_CREATE_ANIMATION - Can't create animation for these fields: -number of time stamps or number of components is not the same! - - - ERR_CANT_FIND_MED_COMPONENT - Failed to activate MED engine! - - - ERR_CANT_FIND_VISU_COMPONENT - Failed to activate VISU engine! - - - ERR_NO_MEMORY_TO_BUILD - Please, free %1 Mb to make the cache enlarging possible -(for example, try to delete some holders) - - - IMPORT_DONE - Importing is done - - - INF_DONE - done - - - INF_VISU - Post-Pro Info - - - NO_GROUPS - No groups in the mesh - - - PARALLEL_ANIMATION - Parallel Animation - - - PERIOD_2PI - From -PI to PI - - - PERIOD_PI - From 0 to PI - - - PRS_ON_GROUPS - Use Only Groups - - - SUCCESSIVE_ANIMATION - Successive Animation - - - TIT_OFFSETDLG - Translate Presentation - - - TLT_SETUP_PLOT2D - Setup Plot 2d - - - UNITS_LBL - Units - - - VISU_3DCACHE_PROPS - 3D Cache properties - - - VISU_COLORS_AND_LABELS - Colors && Labels - - - VISU_COMPONENT - Component - - - VISU_COS_SWEEP - Cosinusoidal ( (1 - cos(t))/2 ) - - - VISU_CUTLINE_PREF - CutLine preferences - - - VISU_CUT_LINES - Cut Lines - - - VISU_CUT_PLANES - Cut Planes - - - VISU_DEFORMED_SHAPE - Deformed Shape - - - VISU_DISP_ONLY - Display only on creation - - - VISU_FIELD_RANGE - Field range - - - VISU_FONT - Font - - - VISU_FONT_ARIAL - Arial - - - VISU_FONT_COURIER - Courier - - - VISU_FONT_TIMES - Times - - - VISU_HEIGHT - Height: - - - VISU_HORIZONTAL - Horizontal - - - VISU_IMPOSED_RANGE - Imposed range - - - VISU_IS2PI - Parameter varies: - - - VISU_ISO_SURFACES - Iso Surfaces - - - VISU_LABELS - Labels - - - VISU_LIMITED - Limited - - - VISU_LINEAR_SWEEP - Linear - - - VISU_LOGARITHMIC_SCALING - Logarithmic scaling - - - VISU_MAX - Max: - - - VISU_MEMORY_LIMIT - Memory limit (Mb) - - - VISU_MEMORY_MODE - Memory mode - - - VISU_MESH - Mesh - - - VISU_MIN - Min: - - - VISU_MINIMAL - Minimal - - - VISU_MINMAX_IMPOSED_RANGE - Min and max for imposed range - - - VISU_MODULUS - Modulus - - - VISU_NB_COLORS - Nb. of colors - - - VISU_NB_CYCLES - Number of cycles - - - VISU_NB_LABELS - Nb. of labels - - - VISU_NB_STEPS - Number of steps - - - VISU_ORIENTATION - Orientation - - - VISU_ORIGIN_AND_SIZE - Origin && Size - - - VISU_PLOT3D - Plot3D - - - VISU_PREF_MED_FULL_LOAD - Full MED loading - - - VISU_PREF_MED_IMPORT - MED files import - - - VISU_PREF_SECOND_TAB - Scalar range, Sweep, MED import, Shading - - - VISU_RANGE_TO_USE - Range to use - - - VISU_REPRESENT_PROPS - Representation properties - - - VISU_SCALAR_BAR - Scalar Bar - - - VISU_SCALAR_MAP - Scalar Map - - - VISU_SCALAR_MAP_ON_DEFORMED_SHAPE - Scalar Map on Def. Shape - - - VISU_SCALAR_MODE - Scalar mode - - - VISU_SCALAR_RANGE - Scalar range - - - VISU_SHRINK - Shrink - - - VISU_SIN_SWEEP - Sinusoidal ( sin( t - PI/2 ) ) - - - VISU_STREAM_LINES - Stream Lines - - - VISU_SWEEPING_MODES - Mode of the sweeping - - - VISU_SWEEPING_PREF - Sweeping preferences - - - VISU_TIME_STEP - Time step(second) - - - VISU_TITLE - Title - - - VISU_USE_SHADING - Use Shading - - - VISU_VECTORS - Vectors - - - VISU_VERTICAL - Vertical - - - VISU_WIDTH - Width: - - - VISU_X - X: - - - VISU_Y - Y: - - - WRN_EXTRA_MEMORY_REQUIRED - Cache need more memory to build the presentation (%1 Mb). -Do you want to enlarge the cache? - - - WRN_NO_AVAILABLE_DATA - No Available data in selection - - - WRN_STUDY_LOCKED - Current Study is locked - - - WRN_VISU - Post-Pro Warning - - - WRN_VISU_WARNING - Warning - - - INF_FAILED - failed! - - - VISU_IS_UNITS - Display units in title - - - VISU_LABELS_FORMAT - Labels format - - - VISU_TITLE_WIDTH - Title width (%): - - - VISU_TITLE_HEIGHT - Title height (%): - - - VISU_LABEL_WIDTH - Label width (%): - - - VISU_LABEL_HEIGHT - Label height (%): - - - VISU_BAR_WIDTH - Bar width (%): - - - VISU_BAR_HEIGHT - Bar height (%): - - - VISU_AUTOMATIC_FIT_ALL - Automatic Fit All - - - VISU_DEFORMED_SHAPE_AND_SCALAR_MAP - Def. Shape and Scalar Map - - - VISU_FLOATING_POINT_PRECISION - Floating Point Precision - - - VISU_REALLY_DELETE - Do you really want to delete this %1 object(s): %2 - - - WRN_NO_APPROPRIATE_SELECTION - No appropriate objects selected - - - - VVTK_MainWindow - - DSC_VVTK_RECORDING_PAUSE - Pause recording - - - DSC_VVTK_RECORDING_PLAY - Play recording - - - DSC_VVTK_RECORDING_START - Start recording - - - DSC_VVTK_RECORDING_STOP - Stop recording - - - LBL_TOOLBAR_RECORD_LABEL - Recording Operations - - - MNU_VVTK_RECORDING_PAUSE - Pause recording - - - MNU_VVTK_RECORDING_PLAY - Play recording - - - MNU_VVTK_RECORDING_START - Start recording - - - MNU_VVTK_RECORDING_STOP - Stop recording - - - MSG_NO_AVI_MAKER - Tool jpeg2yuv, necessary for AVI recording, is not available. -Please, refer to the documentation. - - - - VVTK_MainWindow1 - - DSC_VVTK_INTERACTOR_STYLE_SWITCH - Interaction Style Switch - - - DSC_VVTK_PLANE_SEGMENTATION_SWITCH - Plane Segmentation - - - DSC_VVTK_SELECTION_MODE_SWITCH - Selection Mode Switch - - - DSC_VVTK_SPHERE_SEGMENTATION_SWITCH - Sphere Segmentation - - - LBL_TOOLBAR_GAUSS_LABEL - Gauss Viewer Tools - - - MNU_VVTK_INTERACTOR_STYLE_SWITCH - Interaction Style Switch - - - MNU_VVTK_PLANE_SEGMENTATION_SWITCH - Plane Segmentation - - - MNU_VVTK_SELECTION_MODE_SWITCH - Selection Mode Switch - - - MNU_VVTK_SPHERE_SEGMENTATION_SWITCH - Sphere Segmentation - - - - VVTK_PickingDlg - - BELOW_POINT - Centered below the point - - - CAMERA_TITLE - Movement of the camera - - - CURSOR_SIZE - Size of the cursor : - - - CURSOR_TITLE - Cursor - - - DISPLAY_PARENT_MESH - Display parent mesh element - - - INFO_WINDOW_TITLE - Information window - - - PARENT_MESH_TITLE - Parent mesh element - - - PICKING_DLG_TITLE - Picking - - - POINT_TOLERANCE - Point tolerance : - - - POSITION - Position : - - - PYRAMID_HEIGHT - Height of the pyramids : - - - SELECTION_COLOR - Selection cursor color : - - - STEP_NUMBER - Number of steps between two positions : - - - TOLERANCE_TITLE - Tolerance - - - TOP_LEFT_CORNER - Top-left corner of the 3D view - - - TRANSPARENCY - Transparency : - - - ZOOM_FACTOR - Zoom at first selected point (ratio) : - - - DATA_POSITION - Position - - - PARENT_ELEMENT - Parent mesh element ID: - - - LOCAL_POINT - Local Gauss Point ID: - - - - VVTK_PrimitiveBox - - ALPHA_TEXTURE - Alpha Channel Texture (16x16) : - - - ALPHA_THRESHOLD - Alpha Channel Threshold : - - - CLAMP - Maximum Size (Clamp) : - - - FACE_LIMIT - Notify when number of faces exceeds : - - - FACE_NUMBER - Number of faces : - - - GEOMETRICAL_SPHERE - Geometrical Sphere - - - MAIN_TEXTURE - Main Texture (16x16) : - - - OPENGL_POINT - OpenGL Point - - - POINT_SPRITE - Point Sprite - - - PRIMITIVE_TITLE - Primitive - - - RESOLUTION - Resolution : - - - - VVTK_RecorderDlg - - ALL_DISLPAYED_FRAMES - Recording all displayed frames - - - CLOSE - Close - - - DLG_RECORDER_TITLE - Recorder - - - FILE_NAME - Save to file : - - - FLT_ALL_FILES - All Files (*.*) - - - FLT_AVI_FILES - AVI Files (*.avi) - - - FPS - FPS : - - - PROGRESSIVE - Progressive - - - QUALITY - Quality : - - - RECORDING_MODE - Mode : - - - SETTINGS - Settings - - - SKIPPED_FRAMES - Recording at a given FPS - - - START - Start - - - - VVTK_SegmentationCursorDlg - - DEPTH - Depth of the cursor: - - - DEPTH_TITLE - Depth - - - DIRECTION_DX - DX: - - - DIRECTION_DY - DY: - - - DIRECTION_DZ - DZ: - - - DIRECTION_TITLE - Direction - - - GAUSS_POINTS_TAB - Gauss Points - - - INCREMENT - +/- Ratio : - - - INSIDE_GAUSS_POINTS - Inside Cursor Gauss Points Presentation - - - MAGNIFICATION - Magnification (%) : - - - MAGNIFICATION_TITLE - Magnification - - - ORIGIN_TITLE - Origin - - - ORIGIN_X - X: - - - ORIGIN_Y - Y: - - - ORIGIN_Z - Z: - - - OUTSIDE_GAUSS_POINTS - Outside Cursor Gauss Points Presentation - - - RADIUS - Radius of the cursor : - - - RADIUS_TITLE - Radius - - - RATIO - +/- Ratio : - - - SEGMENTATION_CURSOR_DLG_TITLE - Segmentation Cursor - - - SEGMENTATION_CURSOR_TAB - Segmentation Cursor - - - - VVTK_SizeBox - - COLOR - Color : - - - COLOR_TITLE - Color - - - GEOM_SIZE - Size of points (%) : - - - INCREMENT - +/- Ratio : - - - MAGNIFICATION - Magnification (%) : - - - MAX_SIZE - max size (%) : - - - MIN_SIZE - Range values for min size (%) : - - - OUTSIDE_SIZE - Percentage of normal size(%) : - - - SIZE_TITLE - Size - - - UNIFORM_COLOR - Uniform Color - - - - VVTK_ViewManager - - VTK_VIEW_TITLE - Gauss scene:%1 - viewer:%2 - - - - VVTK_ViewWindow - - LBL_TOOLBAR_LABEL - GAUSS viewer tools - - - - VisuGUI - - DLG_LINEWIDTH_CMT1 - Set value between - - - DLG_LINEWIDTH_CMT2 - 1 (thin) and 10 (thick) - - - DLG_LINEWIDTH_TITLE - Line Width - - - DLG_OPACITY_CMT1 - Set value between - - - DLG_OPACITY_CMT2 - 0 (transparent) and 100 (opaque) - - - DLG_OPACITY_TITLE - Opacity - - - ERR_ACTIVATE_VIEW3D - Please activate 3D view before - - - ERR_ERROR_DURING_EXPORT - Error has been occured during exporting to file - - - ERR_SCALARBAR_PARAMS - Warning! The parameters is incorrect - - - FLT_ALL_FILES - All Files (*.*) - - - FLT_MED_FILES - MED Files (*.med) - - - FLT_TABLE_FILES - Tables (*.xls *.txt *.tab) - - - IMPORT_FROM_FILE - Import from File - - - MEN_ARRANGE_ACTORS - Arrange Actors - - - MEN_CACHE_PROPERTIES - Properties - - - MEN_CELL_COLOR - Cell color - - - MEN_CLEAR_CONTAINER - Clear - - - MEN_CLIPPING - Clipping planes - - - MEN_COLOR - Color... - - - MEN_COPY_PRS - Copy - - - MEN_CREATE_CURVES - Create Curves - - - MEN_CREATE_MANY_PRS - Create Presentations - - - MEN_CREATE_PLOT2D - Create Plot2d View - - - MEN_CREATE_PRS - Create Presentation - - - MEN_CREATE_TABLE - Create Table - - - MEN_CUBE_AXES - Graduated axes - - - MEN_CURVE_PROPS - Properties... - - - MEN_CUT_LINES - Cut Lines - - - MEN_CUT_PLANES - Cut Planes - - - MEN_DEFORMED_SHAPE - Deformed Shape - - - MEN_DELETE_OBJS - Delete - - - MEN_DELETE_VIEWPARAMS - Delete view parameters - - - MEN_SHOW - Show - - - MEN_DISPLAY_ONLY - Show Only - - - MEN_DISPLAY_SELECTION - Display Selection - - - MEN_EDGE_COLOR - Edge Color - - - MEN_EDIT_CONTAINER - Edit... - - - MEN_EDIT_PRS - Edit... - - - MEN_HIDE - Hide - - - MEN_ERASE_ALL - Hide All - - - MEN_EXPORT_TABLE - Export Table - - - MEN_FREE_SCALAR_BARS - Use Field Range - - - MEN_GLOBAL_SELECTION - Global Selection - - - MEN_HOLO_RENDER - Holo render - - - MEN_IMPORT - Import - - - MEN_IMPORT_FROM_FILE - MED file - - - MEN_IMPORT_MED_FIELD - Import Field - - - MEN_IMPORT_MED_STRUCTURE - Import Structure - - - MEN_IMPORT_MED_TIMESTAMP - Import TimeStamp - - - MEN_IMPORT_TABLE - Table from file - - - MEN_INSIDEFRAME - Insideframe - - - MEN_ISO_SURFACES - Iso Surfaces - - - MEN_LINE_WIDTH - Line Width - - - MEN_MERGE_SCALAR_BARS - Merge Scalar Range - - - MEN_MULTIPR_VIEW_FULL_RES - Display at full resolution - - - MEN_MULTIPR_VIEW_HIDE - Hide - - - MEN_MULTIPR_VIEW_LOW_RES - Display at low resolution - - - MEN_MULTIPR_VIEW_MEDIUM_RES - Display at medium resolution - - - MEN_NOSHADING - Shading Off - - - MEN_OPACITY - Opacity - - - MEN_PARALLEL_ANIMATION - Parallel Animation... - - - MEN_PARTIAL_SELECTION - Partial Selection - - - MEN_PLOT3D_FROM_CUTPLANE - Plot3d - - - MEN_PLOT_3D - Plot3D - - - MEN_POINTS - Points - - - MEN_PROPERTIES - Properties - - - MEN_RENAME - Rename... - - - MEN_RENAME_CONTAINER - Rename... - - - MEN_RENAME_TABLE - Rename... - - - MEN_REPRESENTATION - Representation - - - MEN_RESTORE_VIEWPARAMS - Restore view parameters - - - MEN_SAVE_VIEWPARAMS - Save view parameters - - - MEN_SCALAR_MAP - Scalar Map - - - MEN_DEFORMED_SHAPE_AND_SCALAR_MAP - Deformed Shape and Scalar Map - - - MEN_SCALING - Scaling - - - MEN_SELECTION - Selection - - - MEN_SELECTION_INFO - Selection Info... - - - MEN_SHADING - Shading On - - - MEN_SHOW_ANIMATION - Show... - - - MEN_SHOW_TABLE - Show Table - - - MEN_SHRINK - Shrink - - - MEN_STREAM_LINES - Stream Lines - - - MEN_SUCCCESSIVE_ANIMATION - Successive Animation... - - - MEN_SURFACE - Surface - - - MEN_SURFACEFRAME - Surfaceframe - - - MEN_SWEEP - Sweep - - - MEN_TRANSLATE_PRS - Translate Presentation - - - MEN_UNSHRINK - Unshrink - - - MEN_VECTORS - Vectors - - - MEN_VISUALIZATION - Visualization - - - MEN_WIREFRAME - Wireframe - - - TOOL_IMPORT - Import Toolbar - - - TOOL_REPRESENTATION - Representation Toolbar - - - TOOL_VISUALISATION - Visualization Toolbar - - - USE_BUILD_PROGRESS - Use build progress - - - MEN_LOAD_COMPONENT_DATA - Load Component Data - - - FLT_DISTRIBUTED_MED_FILES - Distributed MED Files (*_maitre.med) - - - SHOW_LEVEL_LABELS - Show level labels - - - MEN_FILE_INFO - MED File information - - - ERR_ERROR_IN_THE_FILE - Error in the file - - - ERR_FILE_NOT_EXISTS - File does not exist - - - IMPORT_ERRORS - Import operation has finished with errors: - - - TLT_IMPORT_TABLE - Import table - - - UNKNOWN_IMPORT_ERROR - Unknown error - - - - VisuGUI_AxisWg - - AXIS_NAME - Axis name - - - FONT - Font - - - IS_VISIBLE - Is visible - - - LABELS - Labels - - - LENGTH - Length - - - NAME - Name - - - NUMBER - Number - - - OFFSET - Offset - - - TICK_MARKS - Tick marks - - - - VisuGUI_BuildProgressDlg - - BUILD_ALL - Build all - - - BUILD_AT_ONCE - Build at once - - - BUILD_ENTITIES - Build entities - - - BUILD_FIELDS - Build fields - - - BUILD_GROUPS - Build groups - - - BUILD_MINMAX - Build min/max - - - CLOSE - Close - - - CLOSE_AT_FINISH - Close dialog at finish - - - DLG_BUILD_PROGRESS_TITLE - Build progress - - - ERR_ERROR_IN_THE_FILE - Error in the file - - - FILE_NAME - Import file : - - - FLT_ALL_FILES - All Files (*.*) - - - FLT_MED_FILES - MED Files (*.med) - - - HELP - Help - - - IMPORT_FROM_FILE - Import from File - - - IMPORT_PROGRESS - Import progress - - - IMPORT_SETTINGS - Settings - - - IMPORT_TIME - Time - - - START - Start - - - TIME - Elapsed time : - - - - VisuGUI_CacheDlg - - CACHE_TITLE - Cache properties - - - FREE - Free - - - LIMITED_MEMORY - Limited memory - - - MEMORY STATE - Memory state - - - MEMORY_MODE - Memory mode - - - MINIMAL_MEMORY - Minimal memory - - - USED_BY_CACHE - Used by cache - - - - VisuGUI_ClippingDlg - - AUTO_APPLY_CHK - Auto Apply - - - BUT_DELETE - Delete - - - BUT_NEW - New - - - GRP_IJK_AXIS - Axis - - - GRP_PARAMETERS - Parameters - - - GRP_PLANES - Clipping planes - - - I_RADIO_BTN - I - - - J_RADIO_BTN - J - - - K_RADIO_BTN - K - - - LBL_DISTANCE - Distance - - - LBL_IJK_INDEX - Index (from 0 to ...) - - - LBL_IJK_INDEX_TO_arg - Index (from 0 to %1) - - - LBL_ORIENTATION - Orientation - - - LBL_ROTATION_XY - Rotation around Z (X to Y): - - - LBL_ROTATION_XZ - Rotation around Y (X to Z): - - - LBL_ROTATION_YX - Rotation around Z (Y to X): - - - LBL_ROTATION_YZ - Rotation around X (Y to Z): - - - LBL_ROTATION_ZX - Rotation around Y (Z to X): - - - LBL_ROTATION_ZY - Rotation around X (Z to Y): - - - PARALLEL_XOY_COMBO_ITEM - || X-Y - - - PARALLEL_YOZ_COMBO_ITEM - || Y-Z - - - PARALLEL_ZOX_COMBO_ITEM - || Z-X - - - PLANES_COMBO_ITEM_i - Plane# %1 - - - PLANES_COMBO_ITEM_no - No planes - - - REVERSE_NORMAL_CHK - Reverse normal - - - SHOW_PREVIEW_CHK - Show preview - - - TAB_IJK_STRUCTURED - IJK (Structured) - - - TAB_NON_STRUCTURED - Non structured - - - TITLE - Change Clipping - - - WRN_EMPTY_RESULTING_PRS - Impossible to use given clipping planes because of VTK restrictions. -Please, provide non-empty resulting presentation. - - - - VisuGUI_CubeAxesDlg - - CAPTION - Graduated axes - - - IS_VISIBLE - Is visible - - - X_AXIS - X axis - - - Y_AXIS - Y axis - - - Z_AXIS - Z axis - - - - VisuGUI_CursorDlg - - &Cancel - - - - &OK - - - - TextLabel1 - Set value between - - - TextLabel2 - minimal and maximal - - - - VisuGUI_CutLinesDlg - - BASE_PLANE_POS - Base plane position - - - LBL_ABSOLUTE_LENGTH - Use absolute length - - - LBL_GENERATE_CURVES - Generate Curves - - - LBL_GENERATE_TABLE - Generate Data Table - - - LBL_INVERT_CURVES - Invert all curves - - - LBL_LINES_CUT - Cut planes - - - LBL_LINES_PLANE - Plane of lines - - - LBL_NB_PLANS - Number of planes: - - - LBL_POS - Displacement (0...1): - - - LBL_ROTATION - Rotations - - - LBL_ROT_X - Rotation around X (Y to Z): - - - LBL_ROT_Y - Rotation around Y (Z to X): - - - LBL_ROT_Z - Rotation around Z (X to Y): - - - LBL_SHOW_PREVIEW - Show preview - - - PARALLEL_XOY - || X-Y - - - PARALLEL_YOZ - || Y-Z - - - PARALLEL_ZOX - || Z-X - - - SET_DEFAULT - Set default - - - TXT_ORIENTATION - Orientation - - - - VisuGUI_CutPlanesDlg - - &Cancel - - - - &OK - - - - - VisuGUI_CutPlanesPane - - LBL_NB_PLANS - Number of planes: - - - LBL_POS - Displacement (0...1): - - - LBL_ROTATION - Rotations - - - LBL_ROT_X - Rotation around X (Y to Z): - - - LBL_ROT_Y - Rotation around Y (Z to X): - - - LBL_ROT_Z - Rotation around Z (X to Y): - - - LBL_SHOW_PREVIEW - Show preview - - - PARALLEL_XOY - // X-Y - - - PARALLEL_YOZ - // Y-Z - - - PARALLEL_ZOX - // Z-X - - - TXT_ORIENTATION - Orientation - - - LBL_DEFORMATION - Deformation - - - LBL_DEFROMATION_SCALE - Scale Factor : - - - LBL_DEFROMATION_VECT - Vectors : - - - - VisuGUI_DeformedShapeDlg - - &Cancel - - - - &OK - - - - DEFORMED_SHAPE_TAB - Deformed Shape - - - DLG_TITLE - Deformed Shape - - - INPUT_TAB - Input - - - MAGNITUDE_COLORING - Magnitude coloring - - - SCALAR_BAR_TAB - Scalar Bar - - - SCALE_FACTOR - Scale Factor: - - - - VisuGUI_EditContainerDlg - - &Cancel - - - - &OK - - - - LBL_CONTAINER - Container - - - LBL_STUDY - Study - - - TXT_CURVE - Curve - - - TXT_TABLE - Table - - - - VisuGUI_FileDlg - - FULL_LOAD - Full loading for current file - - - - VisuGUI_FontWg - - ARIAL - Arial - - - BOLD - Bold - - - COURIER - Courier - - - ITALIC - Italic - - - SHADOW - Shadow - - - TIMES - Times - - - - VisuGUI_GaussPointsDlg - - &Cancel - - - - &OK - - - - DEFORMED_SHAPE - Deformed Shape - - - DEFORMED_SHAPE_TITLE - Deformed Shape - - - DLG_PREF_TITLE - Gauss Points Preferences - - - DLG_PROP_TITLE - Gauss Points Properties - - - DLG_TITLE - Gauss Points - - - GAUSS_POINTS_TAB - Gauss Points - - - GEOMETRY - Geometry - - - INPUT_TAB - Input - - - PRS_TITLE - Presentation - - - RESULTS - Results - - - SCALAR_BAR_TAB - Scalar Bar - - - SCALE_FACTOR - Scale Factor : - - - WARNING - Warning - - - - VisuGUI_GaussScalarBarPane - - ACTIVE_BAR_GRP - Active bar - - - BICOLOR - Bicolor - - - COLORS_LABELS_GRP - Colors and labels - - - DIMENSIONS_GRP - Dimensions - - - DISPLAYED - Displayed - - - FIELD_RANGE_BTN - Use field range - - - GLOBAL - Global - - - HORIZONTAL_BTN - Horizontal - - - IMPOSED_RANGE_BTN - Use imposed range - - - LBL_HEIGHT - Height: - - - LBL_MAX - Max: - - - LBL_MIN - Min: - - - LBL_NB_COLORS - Nb. of colors: - - - LBL_NB_LABELS - Nb. of labels: - - - LBL_SPACING - Spacing: - - - LBL_WIDTH - Width: - - - LBL_X - X: - - - LBL_Y - Y: - - - LOCAL - Local - - - LOGARITHMIC_SCALING - Logarithmic scaling - - - ORIENTATION_GRP - Orientation - - - ORIGIN_GRP - Origin - - - RAINBOW - Rainbow - - - SAVE_DEFAULT_CHK - Save as default values - - - SCALAR_RANGE_GRP - Scalar range - - - VERTICAL_BTN - Vertical - - - - VisuGUI_InputPane - - ENTITY - Entity : - - - FIELD - Field : - - - MED_FILE - Source File : - - - MESH - Mesh : - - - PRS_DATA_SOUIRCE - Data Source - - - REINITIALIZE - Auto Update - - - TIME_STAMP - Time Stamp : - - - - VisuGUI_IsoSurfPane - - MAX_VALUE - Maximum value: - - - MIN_VALUE - Minimum value: - - - MSG_MINMAX_VALUES - Min value can not be higher or equal to Max value - - - NB_SURFACES - Number of surfaces: - - - MAGNITUDE_COLORING_CHK - Magnitude coloring - - - SEL_COLOR_BTN - Select Color - - - SHOW_VALUES_CHK - Show values (nb per surface) - - - - VisuGUI_IsoSurfacesDlg - - &Cancel - - - - &OK - - - - DEFINE_ISOSURFACES - Iso Surfaces Definition - - - - VisuGUI_ItemContainer - - AUTO_CHECK_LBL - Auto assign - - - CIRCLE_MARKER_LBL - Circle - - - CROSS_MARKER_LBL - Cross - - - DAHSDOTDOT_LINE_LBL - DashDotDot - - - DASHDOT_LINE_LBL - DashDot - - - DASH_LINE_LBL - Dash - - - DIAMOND_MARKER_LBL - Diamond - - - DOT_LINE_LBL - Dot - - - DTRIANGLE_MARKER_LBL - Downward triangle - - - H - H - - - LTRIANGLE_MARKER_LBL - Leftward triangle - - - NONE_LINE_LBL - None - - - NONE_MARKER_LBL - None - - - RECTANGLE_MARKER_LBL - Rectangle - - - RTRIANGLE_MARKER_LBL - Rightward triangle - - - SOLID_LINE_LBL - Solid - - - UTRIANGLE_MARKER_LBL - Upward triangle - - - V - V - - - XCROSS_MARKER_LBL - Diagonal cross - - - - VisuGUI_Module - - MEN_DESK_FILE_SAVE_GUI_STATE - Save VISU state - - - MEN_GAUSS - Gauss - - - MEN_GAUSS_CREATE_PRS - Gauss Points - - - MEN_GAUSS_NEW_VIEWER - Points view - - - MEN_OVERWRITE_CONFIGURATION - Overwrite current configuration - - - MEN_RESTORE_CONFIGURATION - Restore current configuration - - - MEN_SAVE_CONFIGURATION - Store current configuration - - - MEN_VISUALISATION - Visualization - - - PRP_DESK_FILE_SAVE_GUI_STATE - Saves current state of viewers, displayed objects, etc. - - - TOOL_IMPORT - Import Toolbar - - - TOOL_VISUALISATION - Visualization Toolbar - - - TOT_DESK_FILE_SAVE_GUI_STATE - Save VISU state - - - VISU_CAMERA_MOVE_PREF - Number of steps between two positions - - - VISU_CAMERA_PREF_GROUP_TTL - Camera movements - - - VISU_GAUSS_INSIDE_CURSOR_PREF_TAB_TTL - Inside Cursor - - - VISU_GAUSS_OUTSIDE_CURSOR_PREF_TAB_TTL - Outside Cursor - - - VISU_GAUSS_PREF_ACTIVE_BAR - Active bar - - - VISU_GAUSS_PREF_ALPHA_TEXTURE - Alpha Channel Texture (16x16) - - - VISU_GAUSS_PREF_ALPHA_THRESHOLD - Alpha Channel Threshold - - - VISU_GAUSS_PREF_BICOLOR - Bicolor - - - VISU_GAUSS_PREF_CLAMP - Maximum Size (Clamp) - - - VISU_GAUSS_PREF_COLOR - Color - - - VISU_GAUSS_PREF_COLOR_GROUP_TTL - Color - - - VISU_GAUSS_PREF_DEFORMED_SHAPE_GROUP_TTL - Deformed Shape - - - VISU_GAUSS_PREF_DISPLAY_GLOBAL - Display global bar - - - VISU_GAUSS_PREF_FACE_LIMIT - Notify when number of faces exceeds - - - VISU_GAUSS_PREF_GEOMSPHERE - Geometrical sphere - - - VISU_GAUSS_PREF_GEOM_GROUP_TTL - Geometry - - - VISU_GAUSS_PREF_GLOBAL - Global - - - VISU_GAUSS_PREF_INCREMENT - +/- Ratio - - - VISU_GAUSS_PREF_LOCAL - Local - - - VISU_GAUSS_PREF_MAGNIFICATION - Magnification (%) - - - VISU_GAUSS_PREF_MAGNIFICATION_GROUP_TTL - Magnification (Inside and Outside) - - - VISU_GAUSS_PREF_MAIN_TEXTURE - Main Texture (16x16) - - - VISU_GAUSS_PREF_MAX_SIZE - Range value for max size (%) - - - VISU_GAUSS_PREF_MIN_SIZE - Range value for min size (%) - - - VISU_GAUSS_PREF_OPENGLPOINT - OpenGL point - - - VISU_GAUSS_PREF_POINTSPRITE - Point sprite - - - VISU_GAUSS_PREF_PRIMITIVE_GROUP_TTL - Primitive - - - VISU_GAUSS_PREF_PRIMITIVE_TYPE - Primitive Type - - - VISU_GAUSS_PREF_RAINBOW - Rainbow - - - VISU_GAUSS_PREF_RESOLUTION - Geometrical sphere resolution - - - VISU_GAUSS_PREF_SCALAR_BAR_MODE - Scalar bar mode - - - VISU_GAUSS_PREF_SCALE_FACTOR - Scale factor - - - VISU_GAUSS_PREF_SIZE - Size of points (%) - - - VISU_GAUSS_PREF_SIZE_GROUP_TTL - Size - - - VISU_GAUSS_PREF_SPACING - Spacing - - - VISU_GAUSS_PREF_TAB_TTL - Gauss Points - - - VISU_GAUSS_PREF_UNIFORM_COLOR - Uniform Color - - - VISU_GAUSS_SCALAR_BAR_PREF_GROUP_TTL - Gauss Points Scalar Bar - - - VISU_GAUSS_SCALAR_BAR_PREF_TAB_TTL - Gauss Points Scalar Bar - - - VISU_KEYBOARD_PREF - [+]/[-] Speed increment - - - VISU_KEYBOARD_PREF_GROUP_TTL - Keyboard - - - VISU_MOUSE_PREF - Mouse behaviour - - - VISU_MOUSE_PREF_GROUP_TLT - Mouse - - - VISU_MOUSE_PREF_KEYBOARD_FREE - Keyboard free - - - VISU_MOUSE_PREF_STANDARD - Salome standard controls - - - VISU_MOUSE_PREF_TAB_TLT - Navigation - - - VISU_PICKING_PREF_BELOW_POINT - Centered below the point - - - VISU_PICKING_PREF_CAMERA_GROUP_TTL - Movement of the camera - - - VISU_PICKING_PREF_CURSOR_GROUP_TTL - Cursor - - - VISU_PICKING_PREF_CURSOR_SIZE - Size of the cursor - - - VISU_PICKING_PREF_DISPLAY_PARENT_MESH - Display parent mesh element - - - VISU_PICKING_PREF_INFO_WINDOW_GROUP_TTL - Information window - - - VISU_PICKING_PREF_PARENT_MESH_TTL - Parent mesh element - - - VISU_PICKING_PREF_POINT_SELECTION_TOLERANCE - Point selection tolerance - - - VISU_PICKING_PREF_POSITION - Position - - - VISU_PICKING_PREF_PYRAMID_HEIGHT - Height of the pyramids - - - VISU_PICKING_PREF_SELECTION_COLOR - Selection cursor color - - - VISU_PICKING_PREF_STEP_NUMBER - Number of steps between two positions - - - VISU_PICKING_PREF_TAB_TTL - Picking - - - VISU_PICKING_PREF_TOLERANCE_GROUP_TTL - Tolerance - - - VISU_PICKING_PREF_TOP_LEFT_CORNER - Top-left corner of the 3D view - - - VISU_PICKING_PREF_TRANSPARENCY - Transparency - - - VISU_PICKING_PREF_ZOOM_FACTOR - Zoom at first selected point (ratio) - - - VISU_RECORDER_PREF_ALL_DISLPAYED_FRAMES - Recording all displayed frames - - - VISU_RECORDER_PREF_FPS - FPS - - - VISU_RECORDER_PREF_GROUP_TTL - Settings - - - VISU_RECORDER_PREF_PROGRESSIVE - Progressive - - - VISU_RECORDER_PREF_QUALITY - Quality - - - VISU_RECORDER_PREF_RECORDING_MODE - Mode - - - VISU_RECORDER_PREF_SKIPPED_FRAMES - Recording at a given FPS - - - VISU_RECORDER_PREF_TAB_TTL - Recorder - - - VISU_SPACEMOUSE_PREF - Spacemouse - - - VISU_SPACEMOUSE_PREF_1 - Decrease speed increment - - - VISU_SPACEMOUSE_PREF_2 - Increase speed increment - - - VISU_SPACEMOUSE_PREF_3 - Decrease Gauss points magnification - - - VISU_SPACEMOUSE_PREF_4 - Increase Gauss points magnification - - - VISU_SPACEMOUSE_PREF_5 - Dominant / combined switch - - - VISU_SPACEMOUSE_PREF_BTN_* - Button * - - - VISU_SPACEMOUSE_PREF_BTN_1 - Button 1 - - - VISU_SPACEMOUSE_PREF_BTN_10 - Button 10 - - - VISU_SPACEMOUSE_PREF_BTN_11 - Button 11 - - - VISU_SPACEMOUSE_PREF_BTN_2 - Button 2 - - - VISU_SPACEMOUSE_PREF_BTN_3 - Button 3 - - - VISU_SPACEMOUSE_PREF_BTN_4 - Button 4 - - - VISU_SPACEMOUSE_PREF_BTN_5 - Button 5 - - - VISU_SPACEMOUSE_PREF_BTN_6 - Button 6 - - - VISU_SPACEMOUSE_PREF_BTN_7 - Button 7 - - - VISU_SPACEMOUSE_PREF_BTN_8 - Button 8 - - - - VisuGUI_NameDlg - - NAME_LBL - Name: - - - TLT_RENAME - Rename - - - - VisuGUI_NonIsometricDlg - - &Apply - - - - &Cancel - - - - &Reset - - - - DLG_TITLE - Scaling - - - LBL_X - X : - - - LBL_Y - Y : - - - LBL_Z - Z : - - - O&K - - - - - VisuGUI_Plot3DDlg - - INPUT_TAB_TITLE - Input - - - PLOT3D_TAB_TITLE - Plot 3D - - - SCALAR_BAR_TAB_TITLE - Scalar Bar - - - TITLE - Plot3D Definition - - - - VisuGUI_Plot3DPane - - CONTOUR - Contour - - - NUMBER_CONTOURS - Number of contours: - - - ORIENTATION - Orientation - - - POSITION - Position - - - POSITION_VALUE - Value: - - - PRESENTATION_TYPE - Presentation type - - - PREVIEW - Preview cutting plane - - - RELATIVE - Relative - - - ROTATIONS - Rotations - - - ROTATION_X - Rotation around X (Y to Z): - - - ROTATION_Y - Rotation around Y (Z to X): - - - ROTATION_Z - Rotation around Z (X to Y): - - - SCALE - Scale Factor: - - - SURFACE - Surface - - - - VisuGUI_ScalarBarDlg - - &Cancel - - - - &OK - - - - DLG_PREF_TITLE - Scalar Bar Preferences - - - DLG_PROP_TITLE - Scalar Bar Properties - - - - VisuGUI_ScalarBarPane - - COLORS_LABELS_GRP - Colors and labels - - - DIMENSIONS_GRP - Dimensions - - - FIELD_RANGE_BTN - Use field range - - - HORIZONTAL_BTN - Horizontal - - - IMPOSED_RANGE_BTN - Use imposed range - - - LBL_HEIGHT - Height: - - - LBL_MAX - Max: - - - LBL_MIN - Min: - - - LBL_NB_COLORS - Nb. of colors: - - - LBL_NB_LABELS - Nb. of labels: - - - LBL_SHOW_PREVIEW - Show preview - - - LBL_WIDTH - Width: - - - LBL_X - X: - - - LBL_Y - Y: - - - LOGARITHMIC_SCALING - Logarithmic scaling - - - MSG_MINMAX_VALUES - Min value can not be higher or equal to Max value - - - ORIENTATION_GRP - Orientation - - - ORIGIN_GRP - Origin - - - SAVE_DEFAULT_CHK - Save as default values - - - SCALAR_RANGE_GRP - Scalar range - - - VERTICAL_BTN - Vertical - - - WRN_LOGARITHMIC_FIELD_RANGE - Logarithmic scaling: field range contains negative values, use imposed range instead - - - WRN_LOGARITHMIC_RANGE - Logarithmic scaling: use imposed range values > 0 - - - - VisuGUI_DeformedShapeAndScalarMapDlg - - &Cancel - - - - &OK - - - - DLG_TITLE - Deformed Shape and Scalar Map - - - FIELD_ITEM - Scalar Field: - - - INPUT_TAB - Input - - - SCALAR_BAR_TAB - Scalar Bar - - - DEFORMED_SHAPE_AND_SCALAR_MAP_TAB - Deformed Shape and Scalar Map - - - SCALE_FACTOR - Scale Factor: - - - TIMESTAMP_ITEM - Current Time Stamp: - - - - VisuGUI_SetupPlot2dDlg - - BUT_NO - No - - - BUT_YES - Yes - - - QUE_WANT_SAME_UNITS - Do you want to choose all items with the same units for vertical axis? - - - - VisuGUI_Slider - - AVI - AVI - - - CACHE_MEMORY - Cache: - - - FREE_MEMORY - Free: - - - MORE - More... - - - SPEED - Speed: - - - TOOLBAR_TITLE - Slider - - - - VisuGUI_StreamLinesDlg - - &Cancel - - - - &OK - - - - DLG_TITLE - Stream lines Preferences - - - LBL_DIRECTION - Direction - - - LBL_INTEGRATION_STEP - Integration Step - - - LBL_PROPAGATION_TIME - Propagation Time - - - LBL_SOURCE_TYPE - Source type - - - LBL_STEP_LENGTH - Step Length - - - LBL_USED_POINTS - Used points (0..1) - - - MAGNITUDE_COLORING_CHK - Magnitude coloring - - - SOURCE_GRP - Source - - - USE_COLOR_BTN - Use Color - - - - VisuGUI_SweepPrefDlg - - &Cancel - - - - &OK - - - - DLG_TITLE - Sweeping Preferences - - - LBL_NB_CYCLES - Number of cycles: - - - LBL_NB_STEPS - Number of steps: - - - LBL_TIME_STEP - Time step (second): - - - - VisuGUI_TableDlg - - EDIT_TABLE_TLT - Edit Table - - - ERR_TABLE_NOT_AVAILABLE - Table is not available - - - TABLE_OF_INTEGER_TLT - Table of integer - - - TABLE_OF_REAL_TLT - Table of real - - - VIEW_TABLE_TLT - View Table - - - - VisuGUI_TableWidget - - ADD_COLUMN_BTN - Add Column - - - ADD_ROW_BTN - Add Row - - - ADJUST_CELLS_BTN - Adjust Cells - - - CLEAR_BTN - Clear - - - REMOVE_COLUMN_BTN - Remove Column(s) - - - REMOVE_ROW_BTN - Remove Row(s) - - - SELECT_ALL_BTN - Select All - - - SET_TITLE_TLT - Set title - - - TITLE_LBL - Title: - - - UNITS_TLT - Units - - - - VisuGUI_TextPrefDlg - - &Cancel - - - - &OK - - - - LBL_BOLD - Bold - - - LBL_ITALIC - Italic - - - LBL_LABELS - Labels - - - LBL_SHADOW - Shadow - - - LBL_TITLE - Title - - - TIT_TEXT_PREF - Text properties - - - - VisuGUI_TimeAnimationDlg - - &OK - - - - ERROR - Error - - - MSG_NO_ANIMATIONDATA - There is no data for animation - - - MSG_NO_AVI_MAKER - Tool jpeg2yuv, necessary for AVI recording, is not available. -Please, refer to the documentation. - - - - VisuGUI_TransparencyDlg - - BUT_CLOSE - Close - - - TRANSPARENCY_OPAQUE - Opaque - - - TRANSPARENCY_TITLE - Change Transparency - - - TRANSPARENCY_TRANSPARENT - Transparent - - - - VisuGUI_VectorsDlg - - &Cancel - - - - &OK - - - - ARROWS_BTN - Arrows - - - CENTER_BTN - Center - - - CONES2_BTN - Cones (2) - - - CONES6_BTN - Cones (6) - - - DLG_TITLE - Vector Field Representation - - - GLYPH_POSITION_GRP - Glyph position - - - GLYPH_TYPE_GRP - Glyph type - - - HEAD_BTN - Head - - - LBL_LINE_WIDTH - Line width: - - - LBL_SCALE_FACTOR - Scale factor: - - - MAGNITUDE_COLORING_CHK - Magnitude coloring - - - SEL_COLOR_BTN - Select Color - - - TAIL_BTN - Tail - - - USE_GLYPHS_CHK - Use glyphs - - - - VisuGUI_SelectionDlg - - WINDOW_TITLE - Data on elements - - - MODE_TITLE - Selection - - - MODE_POINT - Point - - - MODE_CELL - Cell - - - MODE_ACTOR - Actor - - - MESH_NAME_LBL - Mesh name: - - - FIELD_NAME_LBL - Field name: - - - POINT_DATA_TITLE - Data of Point - - - DATA_ID_LBL - ID: - - - DATA_SCALAR_LBL - Scalar Value: - - - DATA_VECTOR_LBL - Vector Value: - - - POINT_COORD_TITLE - Coordinates - - - CELL_DATA_TITLE - Data of Cell - - - CELL_DATA_ID_LBL - ID: - - - CELL_DATA_SCALAR_HDR - Scalar - - - CELL_DATA_VECTOR_HDR - Vector - - - ACTOR_DATA_POSITION_TITLE - Position - - - ACTOR_DATA_SIZE_TITLE - Size - - - - VisuGUI_BarPrefDlg - - &OK - - - - &Cancel - - - - TIT_BAR_PREF - Bar properties - - - LBL_TITLE_W - Title width (%) - - - LBL_TITLE_H - Title height (%) - - - LBL_LABEL_W - Label width (%) - - - LBL_LABEL_H - Label height (%) - - - LBL_BAR_W - Bar width (%) - - - LBL_BAR_H - Bar height (%) - - - LBL_SHOW_UNITS - Show units - - - LBL_UNITS_FORMAT - Format: - - - MSG_LABEL_FORMAT - Labels format is invalid. - - - MSG_BIG_SCALE - The common (Title, Label, Bar) width or height should not be greater then 100%. - - - AUTO - auto - - - - VisuGUI_Table3DDlg - - DLG_PREF_TITLE - Table 3D Bar Preferences - - - DLG_PROP_TITLE - Scalar Bar Properties - - - - VisuGUI_TableScalarBarPane - - SCALAR_RANGE_GRP - Scalar range - - - LOGARITHMIC_SCALING - Logarithmic scaling - - - FIELD_RANGE_BTN - Use field range - - - IMPOSED_RANGE_BTN - Use imposed range - - - LBL_MIN - Min: - - - LBL_MAX - Max: - - - COLORS_LABELS_GRP - Colors and labels - - - LBL_NB_COLORS - Nb. of colors: - - - LBL_NB_LABELS - Nb. of labels: - - - ORIENTATION_GRP - Orientation - - - VERTICAL_BTN - Vertical - - - HORIZONTAL_BTN - Horizontal - - - ORIGIN_GRP - Origin - - - LBL_X - X: - - - LBL_Y - Y: - - - LBL_SHOW_PREVIEW - Show preview - - - DIMENSIONS_GRP - Dimensions - - - LBL_WIDTH - Width: - - - LBL_HEIGHT - Height: - - - SAVE_DEFAULT_CHK - Save as default values - - - MSG_MINMAX_VALUES - Min value can not be higher or equal to Max value - - - WRN_LOGARITHMIC_RANGE - Logarithmic scaling: use imposed range values > 0 - - - WRN_LOGARITHMIC_FIELD_RANGE - Logarithmic scaling: field range contains negative values, use imposed range instead - - - - VisuGUI_Table3DPane - - SCALE - Scale Factor: - - - PRESENTATION_TYPE - Presentation type - - - SURFACE - Surface - - - CONTOUR - Contour - - - NUMBER_CONTOURS - Number of contours: - - - - VisuGUI_FileInfoDlg - - CAPTION - File information - - - FILE_NAME - File name - - - FILE_SIZE - File size (bytes) - - - MED_VERSION - MED version - - - diff --git a/src/VISUGUI/VisuGUI.cxx b/src/VISUGUI/VisuGUI.cxx index 3d7fcc0f..e52a0e8d 100644 --- a/src/VISUGUI/VisuGUI.cxx +++ b/src/VISUGUI/VisuGUI.cxx @@ -63,6 +63,7 @@ #include "SVTK_ViewWindow.h" #include "SVTK_ViewModel.h" #include "SVTK_Functor.h" +//#include "SVTK_MainWindow.h" #include "SPlot2d_ViewModel.h" #include "VisuGUI_SetupPlot2dDlg.h" @@ -102,7 +103,8 @@ #include "VisuGUI_Prs3dTools.h" #include "VisuGUI_Tools.h" -#include "VisuGUI_PopupTools.h" +#include "VisuGUI_SelectionPanel.h" +#include "VisuGUI_FeatureEdgesPanel.h" #include "VisuGUI_NameDlg.h" #include "VisuGUI_CursorDlg.h" #include "VisuGUI_Selection.h" @@ -116,6 +118,8 @@ #include "VisuGUI_TransparencyDlg.h" #include "VisuGUI_CacheDlg.h" #include "VisuGUI_Table3dDlg.h" +#include "VisuGUI_ClippingPanel.h" +#include "VisuGUI_FilterScalarsDlg.h" #include "VISU_ScalarMap_i.hh" #include "VisuGUI_ScalarBarDlg.h" @@ -153,7 +157,13 @@ #include "VisuGUI_Timer.h" -#include "VVTK_ViewModel.h" +//#include "VVTK_ViewModel.h" + +#include "VisuGUI_Slider.h" +#include "VisuGUI_Sweep.h" +#include +#include +#include using namespace VISU; @@ -174,11 +184,12 @@ static int MYDEBUG = 0; VisuGUI ::VisuGUI(): SalomeApp_Module( "VISU" ), - myDisplayer( 0 ) + myDisplayer( 0 ), + mySlider( NULL ), + mySweep( NULL ) { } - VisuGUI ::~VisuGUI() { @@ -189,6 +200,7 @@ VisuGUI ::OnImportFromFile() { if(MYDEBUG) MESSAGE("VisuGUI::OnImportFromFile()"); + if ( CheckLock(GetCStudy(GetAppStudy(this)),GetDesktop(this)) ) return; @@ -204,7 +216,7 @@ VisuGUI SalomeApp_CheckFileDlg fd( GetDesktop(this), true, tr("USE_BUILD_PROGRESS") ); fd.setWindowTitle( tr( "IMPORT_FROM_FILE" ) ); - fd.setFileMode( SalomeApp_CheckFileDlg::ExistingFiles ); + fd.setFileMode( SalomeApp_CheckFileDlg::ExistingFiles ); fd.setFilters( aFilter ); fd.SetChecked( toUseBuildProgress ); if ( SalomeApp_CheckFileDlg::getLastVisitedPath().isEmpty() ) @@ -225,7 +237,7 @@ VisuGUI for ( QStringList::ConstIterator it = fileNames.begin(); it != fileNames.end(); ++it ) { QFileInfo aFileInfo( *it ); - + if ( !aFileInfo.exists() ) { // file not exist errors.append( QString( "%1 :\n\t%2" ).arg( aFileInfo.filePath() ). @@ -240,12 +252,12 @@ VisuGUI bool toBuildGroups = aResourceMgr->booleanValue( "VISU", "build_groups", true ); bool toBuildAll = aResourceMgr->booleanValue( "VISU", "full_med_loading", false ); bool toBuildAtOnce = aResourceMgr->booleanValue( "VISU", "build_at_once", false ); - - QString anInfo( tr( "IMPORT_FROM_FILE" ) + " " + aFileInfo.filePath() + " ... " ); + + QString anInfo( tr( "IMPORT_FROM_FILE" ) + " " + aFileInfo.filePath() + " ... " ); application()->putInfo( anInfo ); - + VISU::Result_var aResult = GetVisuGen( this )->CreateResult( aFileInfo.filePath().toLatin1().constData() ); - + if ( CORBA::is_nil( aResult.in() ) ) { errors.append( QString( "%1 :\n\t%2" ).arg( aFileInfo.filePath() ). arg( tr( "ERR_ERROR_IN_THE_FILE" ) ) ); @@ -316,15 +328,15 @@ VisuGUI } else { try { - QString anInfo( tr("TLT_IMPORT_TABLE") + " " + aFileInfo.filePath() + " ..." ); + QString anInfo( tr("TLT_IMPORT_TABLE") + " " + aFileInfo.filePath() + " ..." ); application()->putInfo( anInfo ); - + CORBA::Object_var anObject = GetVisuGen(this)->ImportTables(aFileInfo.filePath().toLatin1().constData()); - + if (CORBA::is_nil(anObject.in())) { errors.append( QString( "%1 :\n\t%2" ).arg( aFileInfo.filePath() ). arg( tr( "ERR_ERROR_IN_THE_FILE" ) ) ); - } + } else { application()->putInfo( anInfo + tr("INF_DONE") ); } @@ -683,7 +695,9 @@ VisuGUI SVTK_ViewWindow* aViewWindow = GetViewWindow(this); // create mesh presentation and display it in aViewWindow - CreateMesh(this, anIO, aViewWindow); + VISU::Mesh_i* aPrs = CreateMesh(this, anIO, aViewWindow); + if (aPrs) + emit presentationCreated(aPrs); } void @@ -708,7 +722,9 @@ VisuGUI return; // create mesh presentation and display it in aViewWindow - CreateMesh(this, anIO, aViewWindow); + VISU::Mesh_i* aPrs = CreateMesh(this, anIO, aViewWindow); + if (aPrs) + emit presentationCreated(aPrs); } } @@ -716,7 +732,9 @@ void VisuGUI ::OnCreateScalarMap() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } @@ -724,56 +742,73 @@ void VisuGUI ::OnCreateDeformedShape() { - CreatePrs3d(this); + // CreatePrs3d(this); + Prs3d_i* aPrs = VisuGUI_DeformedShapeDlg::CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void VisuGUI ::OnCreateDeformedShapeAndScalarMap() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void VisuGUI ::OnCreateVectors() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void VisuGUI ::OnCreateIsoSurfaces() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void VisuGUI ::OnCreateCutPlanes() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void VisuGUI ::OnCreateCutLines() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void VisuGUI ::OnCreateStreamLines() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void VisuGUI ::OnCreatePlot3D() { - CreatePrs3d(this); + Prs3d_i* aPrs = CreatePrs3d(this); + if (aPrs) + emit presentationCreated(aPrs); } void @@ -1053,6 +1088,14 @@ VisuGUI ChangeRepresentation(this, VISU::SHRINK); } +//---------------------------------------------------------------------------- +void +VisuGUI +::OnMakeFeatureEdges() +{ + ChangeRepresentation(this, VISU::FEATURE_EDGES); +} + //---------------------------------------------------------------------------- void VisuGUI @@ -1070,36 +1113,6 @@ VisuGUI } -namespace -{ - //---------------------------------------------------------------------------- - bool - GetPrs3dSelectionInfo(const SalomeApp_Module* theModule, - VISU::Prs3d_i*& thePrs3d, - SVTK_ViewWindow*& theViewWindow, - VISU_Actor*& thenActor) - { - VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects(theModule); - if(aSelectionInfo.empty()) - return false; - - VISU::TSelectionItem aSelectionItem = aSelectionInfo.front(); - thePrs3d = GetPrs3dFromBase(aSelectionItem.myObjectInfo.myBase); - if(!thePrs3d) - return false; - - theViewWindow = GetActiveViewWindow(theModule); - if(!theViewWindow) - return false; - - thenActor = FindActor(theViewWindow, thePrs3d); - if(!thenActor) - return false; - - return true; - } -} - //---------------------------------------------------------------------------- void VisuGUI @@ -1288,7 +1301,7 @@ VisuGUI VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects(this); if(aSelectionInfo.empty()) return; - + VISU::TSelectionItem aSelectionItem = aSelectionInfo.front(); Handle(SALOME_InteractiveObject) anIO = aSelectionItem.myIO; VISU::Base_i* aBase = aSelectionItem.myObjectInfo.myBase; @@ -1344,11 +1357,22 @@ VisuGUI Handle(SALOME_InteractiveObject) anIO; for (SALOME_ListIteratorOfListIO it (aList); it.More(); it.Next()) { anIO = it.Value(); - aNameList.append("\n - "); - aNameList.append(anIO->getName()); if (anIO->hasEntry()) { - if (IsRemovable(anIO->getEntry(), this)) - anEntries[i++] = anIO->getEntry(); + if (IsRemovable(anIO->getEntry(), this)) { + aNameList.append("\n - "); + // Get Name Of the Main Object if it's a referenced object + VISU::TObjectInfo anObjectInfo = GetObjectByEntry(GetAppStudy(this), anIO->getEntry()); + if(_PTR(SObject) aSObject = anObjectInfo.mySObject){ + _PTR(SObject) aRefSObject; + if (aSObject->ReferencedObject(aRefSObject)) { + QString aRefName = QString::fromStdString ( aRefSObject->GetName() ); + aNameList.append( aRefName ); + } + else + aNameList.append(anIO->getName()); + } + anEntries[i++] = anIO->getEntry(); + } } } nbSelected = i; @@ -1356,6 +1380,7 @@ VisuGUI SUIT_MessageBox::warning(GetDesktop(this), QObject::tr("WRN_VISU"), QObject::tr("WRN_NO_APPROPRIATE_SELECTION")); + return; } if ( SUIT_MessageBox::question( GetDesktop(this), @@ -1371,6 +1396,7 @@ VisuGUI for (i = 0; i < nbSelected; i++) { VISU::TObjectInfo anObjectInfo = GetObjectByEntry(GetAppStudy(this), anEntries[i]); if(_PTR(SObject) aSObject = anObjectInfo.mySObject){ + emit beforeObjectDelete(QString(aSObject->GetID().c_str())); _PTR(SObject) aRefSObject; if (aSObject->ReferencedObject(aRefSObject)) { // It can be a reference on curve, published under a container. @@ -1755,7 +1781,7 @@ VisuGUI case VISU::TPOINTMAP3D: { // Table object if (VISU::PointMap3d_i* aTable3d = dynamic_cast(aBase)) { aTable3d->SetTitle(Name.toLatin1().constData()); - aTable3d->UpdateActors(); + aTable3d->UpdateActors(); } break; } @@ -1784,7 +1810,6 @@ VisuGUI } UpdateObjBrowser(this, false); - QApplication::restoreOverrideCursor(); } } @@ -1811,65 +1836,8 @@ void VisuGUI ::OnSweep() { - VISU_Actor* anActor = NULL; - VISU::Prs3d_i* aPrs3d = NULL; - SVTK_ViewWindow* aViewWindow = NULL; - if(!GetPrs3dSelectionInfo(this, aPrs3d, aViewWindow, anActor)) - return; - - VISU::ScalarMap_i* aScalarMap = dynamic_cast(aPrs3d); - if(!aScalarMap) - return; - - if(!anActor->GetVisibility()) - anActor->VisibilityOn(); - - // Get sweep parameters - SUIT_ResourceMgr* aResourceMgr = GetResourceMgr(); - - double aTempoDbl = aResourceMgr->doubleValue("VISU", "sweeping_time_step", 0.1); - int aTemp = int(1.E6 * aTempoDbl); - - int aCycles = aResourceMgr->integerValue("VISU", "sweeping_number_cycles", 1); - int aSteps = aResourceMgr->integerValue("VISU", "sweeping_number_steps", 40); - - int aMode = aResourceMgr->integerValue("VISU", "sweeping_modes", 0); - - int is2Pi = aResourceMgr->integerValue("VISU", "sweeping_is2PI", 0); - - // Sweep - QApplication::setOverrideCursor(Qt::WaitCursor); - - for (int j = 0; j < aCycles; j++) { - for (int i = 0; i <= aSteps; i++) { - try { - float aPercents; - float aT; - if( aMode >= 1 ) - aT = ( is2Pi == 1 ? -PI + 2. * PI * float(i)/aSteps : PI * float(i)/aSteps ); - if( aMode == 1 ){ //if selected Periodic cosinusoidal mode of sweeping - //This is necessary in order for animation to return to the initial picture - aPercents = (1.-cos( aT ))/2.; - } - else if( aMode == 2 ){ //if selected Periodic sinusoidal mode of sweeping - //This is necessary in order for animation to return to the initial picture - aPercents = sin( aT - PI/2 ); - } - else //if selected Linear mode of sweeping - aPercents = float(i)/aSteps; - aScalarMap->SetMapScale(aPercents); - aScalarMap->UpdateActor(anActor); - aViewWindow->getRenderWindow()->Render(); - aViewWindow->Repaint(); - usleep(aTemp); - } catch (std::exception& exc) { - INFOS("Follow exception was occured :\n" << exc.what()); - } catch (...) { - INFOS("Unknown exception was occured!"); - } - } - } - QApplication::restoreOverrideCursor(); + mySweep->toggleViewAction()->setChecked(true); + mySweep->onPlay(true); } //---------------------------------------------------------------------------- @@ -2011,16 +1979,68 @@ VisuGUI //---------------------------------------------------------------------------- void VisuGUI -::OnSelectionInfo() +::OnToggleSelectionPanel() { if (GetActiveViewWindow(this)) - (new VisuGUI_SelectionDlg(this))->show(); + { + if( myPanels.find( SelectionPanelId ) != myPanels.end() ) + { + if( VisuGUI_SelectionPanel* aSelectionPanel = + dynamic_cast( myPanels[ SelectionPanelId ] ) ) + { + if( aSelectionPanel->isVisible() ) + aSelectionPanel->hide(); + else + aSelectionPanel->show(); + } + } + } else SUIT_MessageBox::warning(GetDesktop(this), tr("WRN_VISU"), tr("ERR_ACTIVATE_VIEW3D") ); } +//---------------------------------------------------------------------------- +void +VisuGUI +::OnSwitchSelectionMode() +{ + QAction* anAction = dynamic_cast( sender() ); + if( !anAction ) + return; + + bool isAnyChecked = false; + for( int anId = VISU_ACTOR_SELECTION; anId <= VISU_GAUSS_POINT_SELECTION; anId++ ) + { + QAction* aRefAction = action( anId ); + isAnyChecked |= aRefAction->isChecked(); + if( anAction != aRefAction ) + aRefAction->setChecked( false ); + else if( myPanels.find( SelectionPanelId ) != myPanels.end() ) + { + if( VisuGUI_SelectionPanel* aSelectionPanel = + dynamic_cast( myPanels[ SelectionPanelId ] ) ) + aSelectionPanel->setSelectionMode( anId - VISU_ACTOR_SELECTION ); + } + } + // At least one action must be checked + if( !isAnyChecked ) + anAction->setChecked( true ); +} + +//---------------------------------------------------------------------------- +void +VisuGUI +::OnSwitchSelectionMode( int theId ) +{ + for( int anId = VISU_ACTOR_SELECTION; anId <= VISU_GAUSS_POINT_SELECTION; anId++ ) + { + QAction* aRefAction = action( anId ); + aRefAction->setChecked( anId == VISU_ACTOR_SELECTION + theId ); + } +} + //---------------------------------------------------------------------------- void VisuGUI @@ -2149,10 +2169,18 @@ VisuGUI { SalomeApp_Module::initialize( theApp ); + mySlider = new VisuGUI_Slider( this, getApp()->desktop(), getApp()->selectionMgr() ); + + mySweep = new VisuGUI_Sweep( this, getApp()->desktop(), getApp()->selectionMgr() ); + createActions(); createMenus(); createToolBars(); createPopupMenus(); + createPanels(); + + // tmp + action( VISU_ACTOR_SELECTION )->setChecked( true ); } void @@ -2362,6 +2390,10 @@ VisuGUI tr("MEN_UNSHRINK"), "", 0, aParent, false, this, SLOT(OnMakeShrink())); + createAction( VISU_FEATURE_EDGES, tr("MEN_FEATURE_EDGES"), QIcon(), + tr("MEN_FEATURE_EDGES"), "", 0, aParent, false, + this, SLOT(OnMakeFeatureEdges())); + createAction( VISU_SHADING, tr("MEN_SHADING"), QIcon(), tr("MEN_SHADING"), "", 0, aParent, false, this, SLOT(OnSetShadingOn())); @@ -2440,10 +2472,6 @@ VisuGUI tr("MEN_CLIPPING"), "", 0, aParent, false, this, SLOT(OnClippingPlanes())); - createAction( VISU_SELECTION_INFO, tr("MEN_SELECTION_INFO"), QIcon(), - tr("MEN_SELECTION_INFO"), "", 0, aParent, false, - this, SLOT(OnSelectionInfo())); - aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_TIMEANIMATION")); createAction( VISU_PARALLELANIMATION, tr("MEN_PARALLEL_ANIMATION"), QIcon(aPixmap), tr("MEN_PARALLEL_ANIMATION"), "", 0, aParent, false, @@ -2459,15 +2487,34 @@ VisuGUI tr("MEN_ERASE_ALL"), "", 0, aParent, false, this, SLOT(OnEraseAll())); - aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_GLOBAL_SELECTION")); - createAction( VISU_GLOBAL_SELECTION, tr("MEN_GLOBAL_SELECTION"), QIcon(aPixmap), - tr("MEN_GLOBAL_SELECTION"), "", 0, aParent, false, - this); + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_SELECTION_PANEL")); + createAction( VISU_SELECTION_PANEL, tr("MEN_SELECTION_PANEL"), QIcon(aPixmap), + tr("MEN_SELECTION_PANEL"), "", 0, aParent, false, + this, SLOT(OnToggleSelectionPanel())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_ACTOR_SELECTION")); + createAction( VISU_ACTOR_SELECTION, tr("MEN_ACTOR_SELECTION"), QIcon(aPixmap), + tr("MEN_ACTOR_SELECTION"), "", 0, aParent, true, + this, SLOT(OnSwitchSelectionMode())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_CELL_SELECTION")); + createAction( VISU_CELL_SELECTION, tr("MEN_CELL_SELECTION"), QIcon(aPixmap), + tr("MEN_CELL_SELECTION"), "", 0, aParent, true, + this, SLOT(OnSwitchSelectionMode())); + + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_POINT_SELECTION")); + createAction( VISU_POINT_SELECTION, tr("MEN_POINT_SELECTION"), QIcon(aPixmap), + tr("MEN_POINT_SELECTION"), "", 0, aParent, true, + this, SLOT(OnSwitchSelectionMode())); - aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_PARTIAL_SELECTION")); - createAction( VISU_PARTIAL_SELECTION, tr("MEN_PARTIAL_SELECTION"), QIcon(aPixmap), - tr("MEN_PARTIAL_SELECTION"), "", 0, aParent, false, - this); + aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_GAUSS_POINT_SELECTION")); + createAction( VISU_GAUSS_POINT_SELECTION, tr("MEN_GAUSS_POINT_SELECTION"), QIcon(aPixmap), + tr("MEN_GAUSS_POINT_SELECTION"), "", 0, aParent, true, + this, SLOT(OnSwitchSelectionMode())); + + // Defenition of the actions for the "Navigation" tool bar + registerAction( VISU_SLIDER_PANEL, mySlider->toggleViewAction() ); + registerAction( VISU_SWEEP_PANEL, mySweep->toggleViewAction() ); createAction( VISU_SHOW_ANIMATION, tr("MEN_SHOW_ANIMATION"), QIcon(), tr("MEN_SHOW_ANIMATION"), "", 0, aParent, false, @@ -2478,9 +2525,9 @@ VisuGUI tr("MEN_PLOT3D_FROM_CUTPLANE"), "", 0, aParent, false, this, SLOT(OnPlot3dFromCutPlane())); - createAction( VISU_CACHE_PROPERTIES, tr("MEN_CACHE_PROPERTIES"), QIcon(), - tr("MEN_CACHE_PROPERTIES"), "", 0, aParent, false, - this, SLOT(OnCacheProperties())); + createAction( VISU_MANAGE_CACHE, tr("MEN_MANAGE_CACHE"), QIcon(), + tr("MEN_MANAGE_CACHE"), "", 0, aParent, false, + this, SLOT( OnManageCache() ) ); aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_MULTIPR_VIEW_FULL")); createAction( VISU_MULTIPR_FULL_RES, tr("MEN_MULTIPR_VIEW_FULL_RES"), QIcon(aPixmap), @@ -2509,6 +2556,19 @@ VisuGUI createAction( VISU_EXPORT_MED, tr("MEN_EXPORT_MED"), QIcon(), tr("MEN_EXPORT_MED"), "", 0, aParent, false, this, SLOT(OnExportMED())); + + createAction( VISU_FILTERSCALARS, tr("MEN_FILTER_SCALARS"), QIcon(), + tr("MEN_FILTER_SCALARS"), "", 0, aParent, false, + this, SLOT(OnFilterScalars())); + + createAction( VISU_VALUES_LABELING, tr("MEN_VALUES_LABELING"), QIcon(), + tr("MEN_VALUES_LABELING"), "", 0, aParent, true, + this, SLOT(OnValuesLabeling())); + + createAction( VISU_VALUES_LABELING_PARAMS, tr("VISU_VALUES_LABELING_PARAMS"), QIcon(), + tr("VISU_VALUES_LABELING_PARAMS"), "", 0, aParent, false, + this, SLOT(OnValuesLabelingParams())); + } void @@ -2535,9 +2595,6 @@ VisuGUI createMenu( VISU_PLOT_3D, aMenuId, 10 ); // Plot3d createMenu( VISU_DEFORMED_SHAPE_AND_SCALAR_MAP, aMenuId, 10 ); // scalar map on deformed shape - aMenuId = createMenu( tr( "MEN_SELECTION" ), -1, -1, 30 ); - createMenu( VISU_SELECTION_INFO, aMenuId, 10 ); // selection info - aMenuId = createMenu( tr( "MEN_REPRESENTATION" ), -1, -1, 30 ); int parentId = createMenu( tr( "MEN_DISPLAY_SELECTION" ), aMenuId, 10 ); // display selection @@ -2545,8 +2602,6 @@ VisuGUI createMenu( VISU_WIREFRAME, parentId, 10 ); // wireframe createMenu( VISU_SURFACE, parentId, 10 ); // surface createMenu( VISU_ERASE_ALL, aMenuId, 10 ); // erase all - createMenu( VISU_GLOBAL_SELECTION, aMenuId, 10 ); // global selection - createMenu( VISU_PARTIAL_SELECTION, aMenuId, 10 ); // partial selection } void @@ -2572,8 +2627,19 @@ VisuGUI createTool( VISU_WIREFRAME, aToolId ); createTool( VISU_SURFACE, aToolId ); createTool( VISU_ERASE_ALL, aToolId ); - createTool( VISU_GLOBAL_SELECTION, aToolId ); - createTool( VISU_PARTIAL_SELECTION, aToolId ); + + aToolId = createTool(tr("TOOL_SELECTION")); + createTool( VISU_SELECTION_PANEL, aToolId ); + createTool( separator(), aToolId ); + createTool( VISU_ACTOR_SELECTION, aToolId ); + createTool( VISU_CELL_SELECTION, aToolId ); + createTool( VISU_POINT_SELECTION, aToolId ); + createTool( VISU_GAUSS_POINT_SELECTION, aToolId ); + + aToolId = createTool( tr( "TOOL_NAVIGATION" ) ); + createTool( VISU_SLIDER_PANEL, aToolId ); + createTool( separator(), aToolId ); + createTool( VISU_SWEEP_PANEL, aToolId ); } void @@ -2619,6 +2685,8 @@ VisuGUI mgr->insert( action( VISU_EDIT_CONTAINER ), -1, -1, -1 ); mgr->insert( action( VISU_EDIT_POINTMAP3D ), -1, -1, -1 ); + mgr->insert( action( VISU_FILTERSCALARS ), -1, -1, -1 ); + // rename mgr->insert( action( VISU_RENAME ), -1, -1, -1 ); @@ -2627,6 +2695,12 @@ VisuGUI // delete mgr->insert( action( VISU_CLEAR_CONTAINER ), -1, -1, -1 ); + + // labeling + mgr->insert( separator(), -1, -1, -1 ); + mgr->insert( action( VISU_VALUES_LABELING ), -1, -1, -1 ); + mgr->insert( action( VISU_VALUES_LABELING_PARAMS ), -1, -1, -1 ); + mgr->insert( separator(), -1, -1, -1 ); // table commands mgr->insert( action( VISU_SHOW_TABLE ), -1, -1, -1 ); // show table @@ -2646,6 +2720,7 @@ VisuGUI mgr->insert( action( VISU_SURFACE ) , parentId, -1, -1 ); // surface mgr->insert( action( VISU_INSIDEFRAME ) , parentId, -1, -1 ); // insideframe mgr->insert( action( VISU_SURFACEFRAME ), parentId, -1, -1 ); // surfaceframe + mgr->insert( action( VISU_FEATURE_EDGES ), parentId, -1, -1 ); // feature edges mgr->insert( action( VISU_SHRINK ) , parentId, -1, -1 ); // shrink mgr->insert( action( VISU_UNSHRINK ) , parentId, -1, -1 ); // unshrink mgr->insert( separator(), parentId, -1, -1 ); @@ -2685,8 +2760,6 @@ VisuGUI mgr->insert( action( VISU_CURVE_PROPS ), -1, -1, -1 ); // curve properties - mgr->insert( action( VISU_SELECTION_INFO ), -1, -1, -1 ); // Selection info - mgr->insert( action( VISU_MULTIPR_FULL_RES ), -1, -1, -1 ); mgr->insert( action( VISU_MULTIPR_MED_RES ), -1, -1, -1 ); mgr->insert( action( VISU_MULTIPR_LOW_RES ), -1, -1, -1 ); @@ -2700,6 +2773,9 @@ VisuGUI QString aPrsAll ("'VISU::TSCALARMAP' 'VISU::TISOSURFACES' 'VISU::TDEFORMEDSHAPE' 'VISU::TCUTPLANES' " "'VISU::TCUTLINES' 'VISU::TVECTORS' 'VISU::TSTREAMLINES' 'VISU::TPLOT3D' " "'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP' 'VISU::TCOLOREDPRS3DHOLDER'"); + QString aSimplePrsAll ("'VISU::TSCALARMAP' 'VISU::TISOSURFACES' 'VISU::TDEFORMEDSHAPE' 'VISU::TCUTPLANES' " + "'VISU::TCUTLINES' 'VISU::TVECTORS' 'VISU::TSTREAMLINES' 'VISU::TPLOT3D' " + "'VISU::TSCALARMAPONDEFORMEDSHAPE'"); // VISU root commands QString aRule = "client='ObjectBrowser' and selcount=1 and type='VISU::TVISUGEN'"; @@ -2750,6 +2826,16 @@ VisuGUI mgr->setRule( action( VISU_MERGE_SCALAR_BARS ), aRule ); mgr->setRule( action( VISU_FREE_SCALAR_BARS ), aRule ); + aRule = "selcount=1 and $type in { " + aSimplePrsAll + "}"; + mgr->setRule( action( VISU_FILTERSCALARS ), aRule ); + + // labeling + + aRule = "hasActor=1 and selcount=1 and $type in { 'VISU::TGAUSSPOINTS'" + aPrsAll + " }"; + mgr->setRule( action( VISU_VALUES_LABELING ), aRule, QtxPopupMgr::VisibleRule ); + mgr->setRule( action( VISU_VALUES_LABELING ), "{true} in $isValuesLabeled", QtxPopupMgr::ToggleRule ); + mgr->setRule( action( VISU_VALUES_LABELING_PARAMS ), aRule, QtxPopupMgr::VisibleRule ); + // view parameters aRule = "selcount=1 and type='VISU::TVIEW3D' and activeView='VTKViewer'"; mgr->setRule( action( VISU_SAVE_VIEW_PARAMS_1 ), aRule ); @@ -2757,34 +2843,41 @@ VisuGUI mgr->setRule( action( VISU_RESTORE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D' and activeView='VTKViewer'" ); //mgr->setRule( action( VISU_DELETE_VIEW_PARAMS ), "selcount=1 and type='VISU::TVIEW3D'", true ); - mgr->setRule( action( VISU_ARRANGE_ACTORS ), "$client in {'VTKViewer' 'VVTK'} and selcount=0" ); + mgr->setRule( action( VISU_ARRANGE_ACTORS ), "$client in {'VTKViewer' 'SVTK'} and selcount=0" ); // 3D presentations commands - QString aPrsType = " and $type in {'VISU::TMESH'" + aPrsAll + "}"; + QString aPrsType = " and $type in {'VISU::TMESH' 'VISU::TGAUSSPOINTS' " + aPrsAll + "}"; QString aPrsType2 = " and $type in {'VISU::TMESH' 'VISU::TPOINTMAP3D'" + aPrsAll + "}"; QString anInsideType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TDEFORMEDSHAPE' 'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP'}"; - QString aSurfFrameType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP''VISU::TDEFORMEDSHAPE' 'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP'}"; + //QString aSurfFrameType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP''VISU::TDEFORMEDSHAPE' 'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP'}"; + QString aSurfFrameType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP''VISU::TDEFORMEDSHAPE' 'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP' 'VISU::TCUTPLANES' 'VISU::TISOSURFACES' 'VISU::TPLOT3D' }"; + //QString aPrsType = " and $type in {'VISU::TMESH' " + aPrsAll + "}"; QString aSurfType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TSCALARMAP' 'VISU::TISOSURFACES' 'VISU::TDEFORMEDSHAPE' 'VISU::TCUTPLANES' " " 'VISU::TPLOT3D' 'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP' 'VISU::TPOINTMAP3D'}"; QString aShrinkType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TDEFORMEDSHAPE' 'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP' 'VISU::TPOINTMAP3D'}"; QString aLineType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP' 'VISU::TSCALARMAP' 'VISU::TISOSURFACES' 'VISU::TDEFORMEDSHAPE' " "'VISU::TCUTPLANES' 'VISU::TCUTLINES' 'VISU::TSTREAMLINES' 'VISU::TPLOT3D' 'VISU::TSCALARMAPONDEFORMEDSHAPE' 'VISU::TDEFORMEDSHAPEANDSCALARMAP' 'VISU::TPOINTMAP3D'}"; + QString aFeatureEdgesType = " and $type in {'VISU::TMESH' 'VISU::TSCALARMAP''VISU::TDEFORMEDSHAPE' 'VISU::TSCALARMAPONDEFORMEDSHAPE'}"; + aRule = "selcount=1"; mgr->setRule( action( VISU_CLIPPING ), aRule + aPrsType ); + aPrsType = " and $type in {'VISU::TMESH' " + aPrsAll + "}"; // "Representation" submenu - QString aNotPoints = " and $representation in {'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}"; - QString aNotWirefr = " and $representation in {'VISU::POINT' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}"; - QString aNotSurfac = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}"; - QString aNotInside = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::SURFACEFRAME'}"; - QString aNotSurffr = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME'}"; + QString aNotPoints = " and $representation in {'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME' 'VISU::FEATURE_EDGES'}"; + QString aNotWirefr = " and $representation in {'VISU::POINT' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME' 'VISU::FEATURE_EDGES'}"; + QString aNotSurfac = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME' 'VISU::FEATURE_EDGES'}"; + QString aNotInside = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::SURFACEFRAME' 'VISU::FEATURE_EDGES'}"; + QString aNotSurffr = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::FEATURE_EDGES'}"; + QString aNotFeatureEdges = " and $representation in {'VISU::POINT' 'VISU::WIREFRAME' 'VISU::SHADED' 'VISU::INSIDEFRAME' 'VISU::SURFACEFRAME'}"; mgr->setRule( action( VISU_POINTS ) , aRule + aPrsType + aNotPoints ); mgr->setRule( action( VISU_WIREFRAME ) , aRule + aPrsType2 + aNotWirefr ); mgr->setRule( action( VISU_SURFACE ) , aRule + aSurfType + aNotSurfac ); mgr->setRule( action( VISU_INSIDEFRAME ) , aRule + anInsideType + aNotInside ); mgr->setRule( action( VISU_SURFACEFRAME ), aRule + aSurfFrameType + aNotSurffr ); + mgr->setRule( action( VISU_FEATURE_EDGES ), aRule + aFeatureEdgesType + aNotFeatureEdges ); mgr->setRule( action( VISU_SHRINK ) , aRule + aShrinkType + " and isShrunk=0" ); mgr->setRule( action( VISU_UNSHRINK ), aRule + aShrinkType + " and isShrunk=1" ); @@ -2850,23 +2943,19 @@ VisuGUI aRule = "selcount=1 and type='VISU::TCUTLINES' and nbNamedChildren=0"; mgr->setRule( action( VISU_CREATE_TABLE ), aRule ); - aRule = "selcount=1 and ($type in {" + aPrsAll + "})"; + aRule = "client='VTKViewer' and selcount=1 and ($type in {" + aSimplePrsAll + "})"; mgr->setRule( action( VISU_SWEEP ), aRule ); - // "Selection info" popup item - aRule = "client='VTKViewer' and selcount=1" + anInsideType; - mgr->setRule( action( VISU_SELECTION_INFO ), aRule ); - aRule = "client='ObjectBrowser' and selcount>0"; aRule += " and $type in {'VISU::TFIELD'}"; aRule += " and nbTimeStamps>1"; - aRule += " and activeView in {'VTKViewer' 'VVTK'}"; + aRule += " and activeView in {'VTKViewer' 'SVTK'}"; mgr->setRule( action( VISU_PARALLELANIMATION ), aRule ); - aRule = "client='ObjectBrowser' and selcount>0"; + aRule = "client='ObjectBrowser'"; + aRule += " and (selcount=1 and nbTimeStamps>1 or selcount>1 and nbTimeStamps>0)"; aRule += " and $type in {'VISU::TFIELD'}"; - aRule += " and nbTimeStamps>0"; - aRule += " and activeView in {'VTKViewer' 'VVTK'}"; + aRule += " and activeView in {'VTKViewer' 'SVTK'}"; mgr->setRule( action( VISU_SUCCCESSIVEANIMATION ), aRule ); aRule = "client='ObjectBrowser' and $type in {'VISU::TENTITY' 'VISU::TFAMILY' 'VISU::TGROUP'}"; @@ -2900,6 +2989,23 @@ VisuGUI mgr->setRule( action( VISU_EXPORT_MED ), "selcount=1 and type in {'VISU::TRESULT'}" ); } +void VisuGUI::createPanels() +{ + myPanels.insert( SelectionPanelId, new VisuGUI_SelectionPanel( this ) ); + myPanels.insert( FeatureEdgesPanelId, new VisuGUI_FeatureEdgesPanel( this ) ); + myPanels.insert( ClippingPlanesPanelId, new VisuGUI_ClippingPanel( this ) ); + + QMap< PanelId, VisuGUI_Panel* >::iterator it = myPanels.begin(), itEnd = myPanels.end(); + for( ; it != itEnd; ++it ) + { + if( VisuGUI_Panel* aPanel = it.value() ) + { + aPanel->hide(); + GetDesktop(this)->addDockWidget( Qt::RightDockWidgetArea, aPanel ); + } + } +} + //*************************************************************************** void VisuGUI::contextMenuPopup( const QString& theClient, QMenu* theMenu, QString& theTitle ) { @@ -2998,7 +3104,7 @@ void VisuGUI::contextMenuPopup( const QString& theClient, QMenu* theMenu, QStrin if(VISU::Base_i* aBase = aSelectionItem.myObjectInfo.myBase){ if(aBase->GetType() == VISU::TCOLOREDPRS3DCACHE) - theMenu->addAction( action( VISU_CACHE_PROPERTIES ) ); + theMenu->addAction( action( VISU_MANAGE_CACHE ) ); } theMenu->addSeparator(); @@ -3078,10 +3184,10 @@ VisuGUI { theList.clear(); // append SVTK viewer only if there is no opened VVTK - SUIT_ViewManager* vm = getApp()->getViewManager( VVTK_Viewer::Type(), false ); - if( vm && vm->getViewsCount()>0 ) - theList.append( VVTK_Viewer::Type() ); - else +// SUIT_ViewManager* vm = getApp()->getViewManager( VVTK_Viewer::Type(), false ); +// if( vm && vm->getViewsCount()>0 ) +// theList.append( VVTK_Viewer::Type() ); +// else theList.append( SVTK_Viewer::Type() ); } @@ -3099,7 +3205,8 @@ bool VisuGUI ::activateModule( SUIT_Study* theStudy ) { - SalomeApp_Module::activateModule( theStudy ); + bool aResult = SalomeApp_Module::activateModule( theStudy ); + studyActivated(); setMenuShown( true ); setToolShown( true ); @@ -3112,7 +3219,11 @@ VisuGUI action(VISU_DELETE_OBJS)->setEnabled(true); // Delete: Key_Delete action(VISU_RENAME )->setEnabled(true); // Rename: Key_F2 - return true; + ((VisuGUI_ClippingPanel*) myPanels[ClippingPlanesPanelId])->init(); + + emit moduleActivated(); + + return aResult; } @@ -3123,14 +3234,24 @@ VisuGUI setMenuShown( false ); setToolShown( false ); + QMap< PanelId, VisuGUI_Panel* >::iterator it = myPanels.begin(), itEnd = myPanels.end(); + for( ; it != itEnd; ++it ) + { + if( VisuGUI_Panel* aPanel = it.value() ) + aPanel->hide(); + } + // Unset actions accelerator keys action(VISU_IMPORT_FROM_FILE)->setShortcuts(QKeySequence::UnknownKey); // Import: CTRL + Key_I action(VISU_DELETE_OBJS)->setEnabled(false); // Delete: Key_Delete action(VISU_RENAME )->setEnabled(false); // Rename: Key_F2 - SalomeApp_Module::deactivateModule( theStudy ); - return true; + bool aResult = SalomeApp_Module::deactivateModule( theStudy ); + + emit moduleDeactivated(); + + return aResult; } LightApp_Selection* @@ -3144,6 +3265,7 @@ VisuGUI void VisuGUI::studyActivated() { GetVisuGen(this)->SetCurrentStudy(GetDSStudy(GetCStudy(GetAppStudy(this)))); + } /* @@ -3222,23 +3344,11 @@ void VisuGUI::createPreferences() int fontGr = addPreference( tr( "VISU_FONT" ), sbarTab ); setPreferenceProperty( fontGr, "columns", 2 ); - int tfont = addPreference( tr( "VISU_TITLE" ), fontGr, LightApp_Preferences::Font, "VISU", "scalar_bar_title_font" ); + addVtkFontPref( tr( "VISU_TITLE" ), fontGr, "scalar_bar_title_font", false ); addPreference( tr( "VISU_TITLE" ), fontGr, LightApp_Preferences::Color, "VISU", "scalar_bar_title_color" ); - int lfont = addPreference( tr( "VISU_LABELS" ), fontGr, LightApp_Preferences::Font, "VISU", "scalar_bar_label_font" ); - addPreference( tr( "VISU_LABELS" ), fontGr, LightApp_Preferences::Color, "VISU", "scalar_bar_label_color" ); - QStringList fam; - fam.append( tr( "VISU_FONT_ARIAL" ) ); - fam.append( tr( "VISU_FONT_COURIER" ) ); - fam.append( tr( "VISU_FONT_TIMES" ) ); - int wflag = ( QtxFontEdit::All & ( ~( QtxFontEdit::Size | QtxFontEdit::UserSize ) ) ); - - setPreferenceProperty( tfont, "families", fam ); - setPreferenceProperty( tfont, "system", false ); - setPreferenceProperty( tfont, "widget_flags", wflag ); - setPreferenceProperty( lfont, "families", fam ); - setPreferenceProperty( lfont, "system", false ); - setPreferenceProperty( lfont, "widget_flags", wflag ); + addVtkFontPref( tr( "VISU_LABELS" ), fontGr, "scalar_bar_label_font", false ); + addPreference( tr( "VISU_LABELS" ), fontGr, LightApp_Preferences::Color, "VISU", "scalar_bar_label_color" ); // group: "Colors & Labels" int colorsLabelsGr = addPreference( tr( "VISU_COLORS_AND_LABELS" ), sbarTab ); @@ -3257,11 +3367,17 @@ void VisuGUI::createPreferences() setPreferenceProperty( numlab, "min", 2 ); setPreferenceProperty( numlab, "max", 65 ); - addPreference( tr( "VISU_LABELS_FORMAT" ), colorsLabelsGr, - LightApp_Preferences::String, "VISU", "scalar_bar_label_format" ); + int lPrec = addPreference( tr( "PRECISION" ), colorsLabelsGr, + LightApp_Preferences::IntSpin, "VISU", "scalar_bar_label_precision" ); + + setPreferenceProperty( lPrec, "min", 1 ); + setPreferenceProperty( lPrec, "max", 100 ); + + int frame = addPreference( "", sbarTab, LightApp_Preferences::Frame, "", "" ); + setPreferenceProperty( frame, "orientation", "horizontal" ); // group: "Orientation" - int orientGr = addPreference( tr( "VISU_ORIENTATION" ), sbarTab ); + int orientGr = addPreference( tr( "VISU_ORIENTATION" ), frame, LightApp_Preferences::GroupBox ); setPreferenceProperty( orientGr, "columns", 2 ); int orient = addPreference( tr( "VISU_ORIENTATION" ), orientGr, LightApp_Preferences::Selector, "VISU", "scalar_bar_orientation" ); @@ -3274,8 +3390,17 @@ void VisuGUI::createPreferences() setPreferenceProperty( orient, "strings", orients ); setPreferenceProperty( orient, "indexes", indices ); + // group: "Scalar bars default position" + int scalarBarGr = addPreference( tr( "Scalar bars default position" ), frame, LightApp_Preferences::GroupBox ); + addPreference( tr( "Arrange Scalar Bars" ), scalarBarGr, LightApp_Preferences::Bool, "VISU", "scalar_bars_default_position" ); + + // group: "Origin & Size Vertical" - int posVSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_VERTICAL" ), sbarTab ); + int psSzFrame = addPreference( "", sbarTab, LightApp_Preferences::Frame, "", "" ); + setPreferenceProperty( psSzFrame, "orientation", "horizontal" ); + + int posVSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_VERTICAL" ), + psSzFrame, LightApp_Preferences::GroupBox ); setPreferenceProperty( posVSizeGr, "columns", 2 ); int xv = addPreference( tr( "VISU_X" ), posVSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_x" ); @@ -3287,16 +3412,12 @@ void VisuGUI::createPreferences() int hv = addPreference( tr( "VISU_HEIGHT" ), posVSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_vertical_height" ); - int twv = addPreference( tr( "VISU_TITLE_WIDTH" ), posVSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_vertical_title_width" ); - int thv = addPreference( tr( "VISU_TITLE_HEIGHT" ), posVSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_vertical_title_height" ); - - int lwv = addPreference( tr( "VISU_LABEL_WIDTH" ), posVSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_vertical_label_width" ); - int lhv = addPreference( tr( "VISU_LABEL_HEIGHT" ), posVSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_vertical_label_height" ); - + int twv = addPreference( tr( "VISU_TITLE_SIZE" ), posVSizeGr, + LightApp_Preferences::IntSpin, "VISU", "scalar_bar_vertical_title_size" ); + + int lwv = addPreference( tr( "VISU_LABEL_SIZE" ), posVSizeGr, + LightApp_Preferences::IntSpin, "VISU", "scalar_bar_vertical_label_size" ); + int bwv = addPreference( tr( "VISU_BAR_WIDTH" ), posVSizeGr, LightApp_Preferences::IntSpin, "VISU", "scalar_bar_vertical_bar_width" ); int bhv = addPreference( tr( "VISU_BAR_HEIGHT" ), posVSizeGr, @@ -3312,12 +3433,8 @@ void VisuGUI::createPreferences() setPreferenceProperty( hv, "min", 0.0 ); setPreferenceProperty( twv, "min", 0 ); setPreferenceProperty( twv, "special", "auto" ); - setPreferenceProperty( thv, "min", 0 ); - setPreferenceProperty( thv, "special", "auto" ); setPreferenceProperty( lwv, "min", 0 ); setPreferenceProperty( lwv, "special", "auto" ); - setPreferenceProperty( lhv, "min", 0 ); - setPreferenceProperty( lhv, "special", "auto" ); setPreferenceProperty( bwv, "min", 0 ); setPreferenceProperty( bwv, "special", "auto" ); setPreferenceProperty( bhv, "min", 0 ); @@ -3327,14 +3444,13 @@ void VisuGUI::createPreferences() setPreferenceProperty( wv, "max", 1.0 ); setPreferenceProperty( hv, "max", 1.0 ); setPreferenceProperty( twv, "max", 100 ); - setPreferenceProperty( thv, "max", 100 ); setPreferenceProperty( lwv, "max", 100 ); - setPreferenceProperty( lhv, "max", 100 ); setPreferenceProperty( bwv, "max", 100 ); setPreferenceProperty( bhv, "max", 100 ); // group: "Origin & Size Horizontal" - int posHSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_HORIZONTAL" ), sbarTab ); + int posHSizeGr = addPreference( tr( "VISU_ORIGIN_AND_SIZE" ) + " " + tr( "VISU_HORIZONTAL" ), + psSzFrame, LightApp_Preferences::GroupBox ); setPreferenceProperty( posHSizeGr, "columns", 2 ); int xh = addPreference( tr( "VISU_X" ), posHSizeGr, @@ -3347,19 +3463,15 @@ void VisuGUI::createPreferences() int hh = addPreference( tr( "VISU_HEIGHT" ), posHSizeGr, LightApp_Preferences::DblSpin, "VISU", "scalar_bar_horizontal_height" ); - int twh = addPreference( tr( "Title width (%)" ), posHSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_title_width" ); - int thh = addPreference( tr( "Title height (%)" ), posHSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_title_height" ); - - int lwh = addPreference( tr( "Label width (%)" ), posHSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_label_width" ); - int lhh = addPreference( tr( "Label height (%)" ), posHSizeGr, - LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_label_height" ); - - int bwh = addPreference( tr( "Bar width (%)" ), posHSizeGr, + int twh = addPreference( tr( "VISU_TITLE_SIZE" ), posHSizeGr, + LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_title_size" ); + + int lwh = addPreference( tr( "VISU_LABEL_SIZE" ), posHSizeGr, + LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_label_size" ); + + int bwh = addPreference( tr( "VISU_BAR_WIDTH" ), posHSizeGr, LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_bar_width" ); - int bhh = addPreference( tr( "Bar height (%)" ), posHSizeGr, + int bhh = addPreference( tr( "VISU_BAR_HEIGHT" ), posHSizeGr, LightApp_Preferences::IntSpin, "VISU", "scalar_bar_horizontal_bar_height" ); setPreferenceProperty( xh, "step", 0.1 ); @@ -3372,12 +3484,8 @@ void VisuGUI::createPreferences() setPreferenceProperty( hh, "min", 0.0 ); setPreferenceProperty( twh, "min", 0 ); setPreferenceProperty( twh, "special", "auto" ); - setPreferenceProperty( thh, "min", 0 ); - setPreferenceProperty( thh, "special", "auto" ); setPreferenceProperty( lwh, "min", 0 ); setPreferenceProperty( lwh, "special", "auto" ); - setPreferenceProperty( lhh, "min", 0 ); - setPreferenceProperty( lhh, "special", "auto" ); setPreferenceProperty( bwh, "min", 0 ); setPreferenceProperty( bwh, "special", "auto" ); setPreferenceProperty( bhh, "min", 0 ); @@ -3387,16 +3495,10 @@ void VisuGUI::createPreferences() setPreferenceProperty( wh, "max", 1.0 ); setPreferenceProperty( hh, "max", 1.0 ); setPreferenceProperty( twh, "max", 100 ); - setPreferenceProperty( thh, "max", 100 ); setPreferenceProperty( lwh, "max", 100 ); - setPreferenceProperty( lhh, "max", 100 ); setPreferenceProperty( bwh, "max", 100 ); setPreferenceProperty( bhh, "max", 100 ); - // group: "Scalar bars default position" - int scalarBarGr = addPreference( tr( "Scalar bars default position" ), sbarTab ); - addPreference( tr( "Arrange Scalar Bars" ), scalarBarGr, LightApp_Preferences::Bool, "VISU", "scalar_bars_default_position" ); - // TAB: "CutLines" int cutLineTab = addPreference( tr( "CutLines" ) ); @@ -3409,58 +3511,88 @@ void VisuGUI::createPreferences() addPreference( tr( "Generate data table" ), cutLineGr, LightApp_Preferences::Bool, "VISU", "generate_data_table" ); addPreference( tr( "Generate curves" ), cutLineGr, LightApp_Preferences::Bool, "VISU", "generate_curves" ); - // TAB: "Sweep, Animation" - int srangeTab = addPreference( tr( "Sweep, Animation" ) ); - - // group: "Sweeping preferences" - int sweepGr = addPreference( tr( "VISU_SWEEPING_PREF" ), srangeTab ); - setPreferenceProperty( sweepGr, "columns", 2 ); - - int modeSw = addPreference( tr( "VISU_SWEEPING_MODES" ), sweepGr, LightApp_Preferences::Selector, "VISU", "sweeping_modes" ); - QStringList sweep_modes; - sweep_modes.append( tr( "VISU_LINEAR_SWEEP" ) ); - sweep_modes.append( tr( "VISU_COS_SWEEP" ) ); - sweep_modes.append( tr( "VISU_SIN_SWEEP" ) ); - indices.clear(); - indices.append( 0 ); - indices.append( 1 ); - indices.append( 2 ); - setPreferenceProperty( modeSw, "strings", sweep_modes ); - setPreferenceProperty( modeSw, "indexes", indices ); - - int timestep = addPreference( tr( "VISU_TIME_STEP" ), sweepGr, - LightApp_Preferences::DblSpin, "VISU", "sweeping_time_step" ); - int nbcycles = addPreference( tr( "VISU_NB_CYCLES" ), sweepGr, - LightApp_Preferences::IntSpin, "VISU", "sweeping_number_cycles" ); - int nbsteps = addPreference( tr( "VISU_NB_STEPS" ), sweepGr, - LightApp_Preferences::IntSpin, "VISU", "sweeping_number_steps" ); - int rangeSw = addPreference( tr( "VISU_IS2PI" ), sweepGr, LightApp_Preferences::Selector, "VISU", "sweeping_is2PI" ); - QStringList ranges; - ranges.append( tr( "PERIOD_PI" ) ); - ranges.append( tr( "PERIOD_2PI" ) ); - indices.clear(); - indices.append( 0 ); - indices.append( 1 ); - setPreferenceProperty( rangeSw, "strings", ranges ); - setPreferenceProperty( rangeSw, "indexes", indices ); - - setPreferenceProperty( timestep, "min", 0.1 ); - setPreferenceProperty( timestep, "step", 0.1 ); - setPreferenceProperty( timestep, "max", 1000 ); - setPreferenceProperty( nbcycles, "max", 100 ); - setPreferenceProperty( nbsteps, "max", 200 ); - - // group: "Animation preferences" - int animationGr = addPreference( tr( "Animation preferences" ), srangeTab ); - setPreferenceProperty( animationGr, "columns", 3 ); + // TAB: "Sweep, Animation, 3D Cache" + int animationTab = addPreference( tr( "Animation" ) ); + { + // group: "3D Cache System prefereces" + { + int cacheGroup = addPreference( tr( "VISU_3DCACHE_PREFERENCES" ), animationTab ); + setPreferenceProperty( cacheGroup, "columns", 2 ); + + int memory_mode = addPreference( tr( "VISU_MEMORY_MODE" ), cacheGroup, + LightApp_Preferences::Selector, "VISU", "cache_memory_mode" ); + + modes.clear(); + modes.append( tr( "VISU_MINIMAL" ) ); + modes.append( tr( "VISU_LIMITED" ) ); + setPreferenceProperty( memory_mode, "strings", modes ); + + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( memory_mode, "indexes", indices ); + + int memory_limit = addPreference( tr( "VISU_MEMORY_LIMIT" ), cacheGroup, + LightApp_Preferences::IntSpin, "VISU", "cache_memory_limit" ); + setPreferenceProperty( memory_limit, "min", 1 ); + setPreferenceProperty( memory_limit, "max", 5000 ); + setPreferenceProperty( memory_limit, "step", 10 ); + } - int speed = addPreference( tr( "Speed" ), animationGr, LightApp_Preferences::IntSpin, "VISU", "speed" ); - addPreference( tr( "Cycled animation" ), animationGr, LightApp_Preferences::Bool, "VISU", "cycled_animation" ); - addPreference( tr( "Use proportional timing" ), animationGr, LightApp_Preferences::Bool, "VISU", "use_proportional_timing" ); - addPreference( tr( "Clean memory at each frame" ), animationGr, LightApp_Preferences::Bool, "VISU", "clean_memory_at_each_frame" ); + // group: "Animation preferences" + { + int animationGroup = addPreference( tr( "VISU_ANIMATION_PREFERENCES" ), animationTab ); + setPreferenceProperty( animationGroup, "columns", 3 ); + + int speed = addPreference( tr( "Speed" ), animationGroup, LightApp_Preferences::IntSpin, "VISU", "speed" ); + addPreference( tr( "Cycled animation" ), animationGroup, LightApp_Preferences::Bool, "VISU", "cycled_animation" ); + addPreference( tr( "Use proportional timing" ), animationGroup, LightApp_Preferences::Bool, "VISU", "use_proportional_timing" ); + addPreference( tr( "Clean memory at each frame" ), animationGroup, LightApp_Preferences::Bool, "VISU", "clean_memory_at_each_frame" ); + + setPreferenceProperty( speed, "min", 1 ); + setPreferenceProperty( speed, "max", 99 ); + } - setPreferenceProperty( speed, "min", 1 ); - setPreferenceProperty( speed, "max", 99 ); + // group: "Sweeping preferences" + { + int sweepGroup = addPreference( tr( "VISU_SWEEPING_PREF" ), animationTab ); + setPreferenceProperty( sweepGroup, "columns", 2 ); + + int modeSw = addPreference( tr( "VISU_SWEEPING_MODES" ), sweepGroup, LightApp_Preferences::Selector, "VISU", "sweeping_modes" ); + QStringList sweep_modes; + sweep_modes.append( tr( "VISU_LINEAR_SWEEP" ) ); + sweep_modes.append( tr( "VISU_COS_SWEEP" ) ); + sweep_modes.append( tr( "VISU_SIN_SWEEP" ) ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + indices.append( 2 ); + setPreferenceProperty( modeSw, "strings", sweep_modes ); + setPreferenceProperty( modeSw, "indexes", indices ); + + int timestep = addPreference( tr( "VISU_TIME_STEP" ), sweepGroup, + LightApp_Preferences::DblSpin, "VISU", "sweeping_time_step" ); + int nbcycles = addPreference( tr( "VISU_NB_CYCLES" ), sweepGroup, + LightApp_Preferences::IntSpin, "VISU", "sweeping_number_cycles" ); + int nbsteps = addPreference( tr( "VISU_NB_STEPS" ), sweepGroup, + LightApp_Preferences::IntSpin, "VISU", "sweeping_number_steps" ); + int rangeSw = addPreference( tr( "VISU_IS2PI" ), sweepGroup, LightApp_Preferences::Selector, "VISU", "sweeping_is2PI" ); + QStringList ranges; + ranges.append( tr( "PERIOD_PI" ) ); + ranges.append( tr( "PERIOD_2PI" ) ); + indices.clear(); + indices.append( 0 ); + indices.append( 1 ); + setPreferenceProperty( rangeSw, "strings", ranges ); + setPreferenceProperty( rangeSw, "indexes", indices ); + + setPreferenceProperty( timestep, "min", 0.1 ); + setPreferenceProperty( timestep, "step", 0.1 ); + setPreferenceProperty( timestep, "max", 1000 ); + setPreferenceProperty( nbcycles, "max", 100 ); + setPreferenceProperty( nbsteps, "max", 200 ); + } + } // TAB: Representation ; group: "Representation properties" int representationTab = addPreference( tr( "Representation" ) ); @@ -3474,16 +3606,23 @@ void VisuGUI::createPreferences() mesh_modes.append( "Insideframe" ); mesh_modes.append( "Surfaceframe" ); mesh_modes.append( "Surface" ); + mesh_modes.append( "Feature edges" ); QList mesh_indices; mesh_indices.append( 0 ); mesh_indices.append( 1 ); mesh_indices.append( 3 ); mesh_indices.append( 4 ); mesh_indices.append( 2 ); + mesh_indices.append( 5 ); + + QStringList modes0 = mesh_modes; + modes0.removeAll( "Feature edges" ); + QList indices0 = mesh_indices; + indices0.removeAll( 5 ); - QStringList modes1 = mesh_modes; + QStringList modes1 = modes0; modes1.removeAll( "Insideframe" ); - QList indices1 = mesh_indices; + QList indices1 = indices0; indices1.removeAll( 3 ); QStringList modes2 = modes1; @@ -3503,8 +3642,8 @@ void VisuGUI::createPreferences() addPreference( tr( "VISU_SHRINK" ), representGr, LightApp_Preferences::Bool, "VISU", "mesh_shrink" ); int scalar_map_represent = addPreference( tr( "VISU_SCALAR_MAP" ), representGr, LightApp_Preferences::Selector, "VISU", "scalar_map_represent" ); - setPreferenceProperty( scalar_map_represent, "strings", mesh_modes ); - setPreferenceProperty( scalar_map_represent, "indexes", mesh_indices ); + setPreferenceProperty( scalar_map_represent, "strings", modes0 ); + setPreferenceProperty( scalar_map_represent, "indexes", indices0 ); addPreference( tr( "VISU_SHRINK" ), representGr, LightApp_Preferences::Bool, "VISU", "scalar_map_shrink" ); int iso_surfaces_represent = addPreference( tr( "VISU_ISO_SURFACES" ), representGr, LightApp_Preferences::Selector, "VISU", "iso_surfaces_represent" ); @@ -3527,8 +3666,8 @@ void VisuGUI::createPreferences() setPreferenceProperty( sp, "vstretch", 0 ); int deformed_shape_represent = addPreference( tr( "VISU_DEFORMED_SHAPE" ), representGr, LightApp_Preferences::Selector, "VISU", "deformed_shape_represent" ); - setPreferenceProperty( deformed_shape_represent, "strings", mesh_modes ); - setPreferenceProperty( deformed_shape_represent, "indexes", mesh_indices ); + setPreferenceProperty( deformed_shape_represent, "strings", modes0 ); + setPreferenceProperty( deformed_shape_represent, "indexes", indices0 ); addPreference( tr( "VISU_SHRINK" ), representGr, LightApp_Preferences::Bool, "VISU", "deformed_shape_shrink" ); int vectors_represent = addPreference( tr( "VISU_VECTORS" ), representGr, LightApp_Preferences::Selector, "VISU", "vectors_represent" ); @@ -3575,30 +3714,39 @@ void VisuGUI::createPreferences() addPreference( tr( "VISU_AUTOMATIC_FIT_ALL" ), representGr, LightApp_Preferences::Bool, "VISU", "automatic_fit_all" ); - // TAB: 3D Cache ; group: "Cache properties" - int cacheTab = addPreference( tr( "3D Cache" ) ); + // TAB: Feature edges ; group: "Feature edges properties" + int featureEdgesTab = addPreference( tr( "VISU_FEATURE_EDGES" ) ); - int cacheGr = addPreference( tr( "VISU_3DCACHE_PROPS" ), cacheTab ); - setPreferenceProperty( cacheGr, "columns", 2 ); + int featureEdgesGr = addPreference( tr( "VISU_FEATURE_EDGES_PROPS" ), featureEdgesTab ); + setPreferenceProperty( featureEdgesGr, "columns", 2 ); - int memory_mode = addPreference( tr( "VISU_MEMORY_MODE" ), cacheGr, - LightApp_Preferences::Selector, "VISU", "cache_memory_mode" ); + int featureEdgesAnglePref = addPreference( tr( "VISU_FEATURE_EDGES_ANGLE" ), featureEdgesGr, + LightApp_Preferences::DblSpin, "VISU", "feature_edges_angle" ); + setPreferenceProperty( featureEdgesAnglePref, "step", 10.0 ); + setPreferenceProperty( featureEdgesAnglePref, "min", 0.0 ); + setPreferenceProperty( featureEdgesAnglePref, "max", 90.0 ); + + addPreference( tr( "VISU_SHOW_FEATURE_EDGES" ), featureEdgesGr, LightApp_Preferences::Bool, "VISU", "show_feature_edges" ); + addPreference( tr( "VISU_SHOW_BOUNDARY_EDGES" ), featureEdgesGr, LightApp_Preferences::Bool, "VISU", "show_boundary_edges" ); + addPreference( tr( "VISU_SHOW_MANIFOLD_EDGES" ), featureEdgesGr, LightApp_Preferences::Bool, "VISU", "show_manifold_edges" ); + addPreference( tr( "VISU_SHOW_NON_MANIFOLD_EDGES" ), featureEdgesGr, LightApp_Preferences::Bool, "VISU", "show_non_manifold_edges" ); + //addPreference( tr( "VISU_FEATURE_EDGES_COLORING" ), featureEdgesGr, LightApp_Preferences::Bool, "VISU", "feature_edges_coloring" ); + + // TAB: "Values labels" + + int valLblTab = addPreference( tr( "VALUES_LABELING" ) ); - modes.clear(); - modes.append( tr( "VISU_MINIMAL" ) ); - modes.append( tr( "VISU_LIMITED" ) ); - setPreferenceProperty( memory_mode, "strings", modes ); + // "Font" group + int valLblFontGr = addPreference( tr( "VISU_FONT" ), valLblTab ); + setPreferenceProperty( valLblFontGr, "columns", 2 ); - indices.clear(); - indices.append( 0 ); - indices.append( 1 ); - setPreferenceProperty( memory_mode, "indexes", indices ); + // font + addVtkFontPref( tr( "LABELS" ), valLblFontGr, "values_labeling_font", true ); + + // color + addPreference( tr( "COLOR" ), valLblFontGr, + LightApp_Preferences::Color, "VISU", "values_labeling_color" ); - int memory_limit = addPreference( tr( "VISU_MEMORY_LIMIT" ), cacheGr, - LightApp_Preferences::IntSpin, "VISU", "cache_memory_limit" ); - setPreferenceProperty( memory_limit, "min", 1 ); - setPreferenceProperty( memory_limit, "max", 5000 ); - setPreferenceProperty( memory_limit, "step", 10 ); } void VisuGUI::preferencesChanged( const QString& a, const QString& b) @@ -3610,8 +3758,8 @@ void VisuGUI::preferencesChanged( const QString& a, const QString& b) float aTol = 1.00000009999999; QString aWarning; if(b == QString("scalar_bar_vertical_x") || b == QString("scalar_bar_vertical_width")){ - sbX1 = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_x", sbX1); - sbW = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_width", sbW); + sbX1 = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_x", 0.01); + sbW = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_width", 0.05); if(sbX1+sbW > aTol){ aWarning = "Origin and Size Vertical: X+Width > 1\n"; sbX1=0.01; @@ -3621,8 +3769,8 @@ void VisuGUI::preferencesChanged( const QString& a, const QString& b) } } else if(b == QString("scalar_bar_vertical_y") || b == QString("scalar_bar_vertical_height")){ - sbY1 = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_y", sbY1); - sbH = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_height",sbH); + sbY1 = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_y", 0.01); + sbH = aResourceMgr->doubleValue("VISU", "scalar_bar_vertical_height",0.5); if(sbY1+sbH > aTol){ aWarning = "Origin and Size Vertical: Y+Height > 1\n"; sbY1=0.01; @@ -3632,8 +3780,8 @@ void VisuGUI::preferencesChanged( const QString& a, const QString& b) } } else if(b == QString("scalar_bar_horizontal_x") || b == QString("scalar_bar_horizontal_width")){ - sbX1 = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_x", sbX1); - sbW = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_width", sbW); + sbX1 = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_x", 0.2); + sbW = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_width", 0.6); if(sbX1+sbW > aTol){ aWarning = "Origin and Size Horizontal: X+Width > 1\n"; sbX1=0.2; @@ -3643,8 +3791,8 @@ void VisuGUI::preferencesChanged( const QString& a, const QString& b) } } else if(b == QString("scalar_bar_horizontal_y") || b == QString("scalar_bar_horizontal_height")){ - sbY1 = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_y", sbY1); - sbH = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_height",sbH); + sbY1 = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_y", 0.01); + sbH = aResourceMgr->doubleValue("VISU", "scalar_bar_horizontal_height",0.12); if(sbY1+sbH > aTol){ aWarning = "Origin and Size Horizontal: Y+Height > 1\n"; sbY1=0.01; @@ -3652,17 +3800,8 @@ void VisuGUI::preferencesChanged( const QString& a, const QString& b) aResourceMgr->setValue("VISU", "scalar_bar_horizontal_y", sbY1); aResourceMgr->setValue("VISU", "scalar_bar_horizontal_height",sbH); } - } else if(b == QString("scalar_bar_label_format")) { - QString dVal; - dVal.sprintf(aResourceMgr->stringValue("VISU", "scalar_bar_label_format",dVal).toLatin1().data(), 1.1); - if(dVal.toDouble() == 0.) { - aWarning = "Label format is incorrect "; - aWarning += dVal; - aWarning += "\n"; - dVal="%-#6.3g"; - aResourceMgr->setValue("VISU", "scalar_bar_label_format", dVal); - } - } + } + if ( !aWarning.isEmpty() ){ aWarning += "The default values are applied instead."; SUIT_MessageBox::warning(GetDesktop(this), @@ -3734,7 +3873,7 @@ void VisuGUI::OnPlot3dFromCutPlane() _PTR(SObject) aTimeStampSObj = aSObject->GetFather(); if (SUIT_ViewManager* aViewManager = getApp()->activeViewManager()) { QString aViewType = aViewManager->getType(); - bool anIsVVTK = (aViewType == VVTK_Viewer::Type()); + //bool anIsVVTK = (aViewType == VVTK_Viewer::Type()); Storable::TRestoringMap aRestoringMap = Storable::GetStorableMap(aTimeStampSObj); VISU::VISUType aType = VISU::Storable::RestoringMap2Type( aRestoringMap ); @@ -3748,13 +3887,13 @@ void VisuGUI::OnPlot3dFromCutPlane() int aPos; SUIT_ViewWindow* aViewWindow = 0; - if (anIsVVTK) { - aViewWindow = GetViewWindow(this); - aPos = GetFreePositionOfDefaultScalarBar(this, dynamic_cast(aViewWindow)); - } else { +// if (anIsVVTK) { +// aViewWindow = GetViewWindow(this); +// aPos = GetFreePositionOfDefaultScalarBar(this, dynamic_cast(aViewWindow)); +// } else { aViewWindow = GetViewWindow(this); aPos = GetFreePositionOfDefaultScalarBar(this, dynamic_cast(GetViewWindow(this))); - } + // } GetResourceMgr()->setValue("VISU", "scalar_bar_position_num", aPos); VISU::Plot3D_i* aPrs3d = @@ -3792,31 +3931,17 @@ void VisuGUI::OnPlot3dFromCutPlane() AddScalarBarPosition(this, aSVtkWindow, aPrs3d, aPos); } + if (aPrs3d) + emit presentationCreated(aPrs3d); } } application()->putInfo(QObject::tr("INF_DONE")); } } -void VisuGUI::OnCacheProperties() +void VisuGUI::OnManageCache() { - VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects(this); - if(aSelectionInfo.empty()) - return; - - VISU::TSelectionItem aSelectionItem = aSelectionInfo.front(); - _PTR(SObject) aSObject = aSelectionItem.myObjectInfo.mySObject; - - CORBA::Object_var anObject = VISU::ClientSObjectToObject(aSObject); - if( CORBA::is_nil( anObject ) ) - return; - - VISU::ColoredPrs3dCache_var aCache = VISU::GetInterface(anObject); - if( CORBA::is_nil( aCache ) ) - return; - - VisuGUI_CacheDlg* aDlg = new VisuGUI_CacheDlg( aCache, this ); - aDlg->exec(); + mySlider->show(); } @@ -3936,7 +4061,7 @@ void VisuGUI::OnExportMED() SUIT_ResourceMgr* aResourceMgr = GetResourceMgr(); QString aDir = aResourceMgr->stringValue("VISU","OutputDir",""); - + // get name for the file QStringList aFilter; aFilter.append("MED Files (*.med)"); @@ -3946,7 +4071,7 @@ void VisuGUI::OnExportMED() QString aBaseName = anInitFileInfo.fileName(); QString aPath = Qtx::addSlash(aDir) + aBaseName; - + QFileInfo aFileInfo = SUIT_FileDlg::getFileName(GetDesktop(this), aPath, @@ -3959,3 +4084,107 @@ void VisuGUI::OnExportMED() aResult->ExportMED((const char*)aFile.toLatin1()); } } + +void VisuGUI::OnFilterScalars() +{ + VisuGUI_FilterScalarsDlg* aDlg = new VisuGUI_FilterScalarsDlg( this ); + aDlg->show(); +} + +/*! + \brief SLOT called when "Labeling" popup menu item of presentation is clicked + activates/deactivates labeling of results of the screen. This functionality works + to numbering in SMESH module but is intended for showing results on the screen + instead of elements numbers + \sa OnValuesLabelingParams() +*/ +void VisuGUI::OnValuesLabeling() +{ + // to do: rewrite for several actors if necessary + + VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects( this ); + if ( aSelectionInfo.empty() ) + return; + + TSelectionItem aSelectionItem = GetSelectedObjects(this).front(); + VISU::Prs3d_i* aPrs3d = GetPrs3dFromBase(aSelectionItem.myObjectInfo.myBase); + if(!aPrs3d) + return; + + SVTK_ViewWindow* aViewWindow = GetActiveViewWindow(this); + if(!aViewWindow) + return; + + VISU_Actor* anActor = FindActor(aViewWindow, aPrs3d); + if(!anActor) + return; + + if( VISU_ScalarMapAct* aScalarMapActor = dynamic_cast(anActor) ) + { + aScalarMapActor->SetValuesLabeled( !aScalarMapActor->GetValuesLabeled() ); + aViewWindow->Repaint(); + } + else if( VISU_GaussPtsAct* aGaussPtsAct = dynamic_cast(anActor) ) + { + aGaussPtsAct->SetValuesLabeled( !aGaussPtsAct->GetValuesLabeled() ); + aViewWindow->Repaint(); + } +} + +/*! + \brief SLOT called when "Labeling parameters" popup menu item of presentation + is clicked launch dialog box for changing parameters of labeling + \sa OnValuesLabeling() +*/ +void VisuGUI::OnValuesLabelingParams() +{ + Handle(SALOME_InteractiveObject) anIO; + if ( VISU::Prs3d_i* aPrs3d = GetPrsToModify( this, anIO ) ) + EditPrs3d(this, anIO, aPrs3d); +} +/*! + \brief Adds preferences for dfont of VTK viewer + \param label label + \param pIf group identifier + \param param parameter + \return identifier of preferences +*/ +int VisuGUI::addVtkFontPref( + const QString& label, + const int pId, + const QString& param, + const bool useSize ) +{ + int tfont = addPreference( label, pId, LightApp_Preferences::Font, "VISU", param ); + + setPreferenceProperty( tfont, "mode", QtxFontEdit::Custom ); + + QStringList fam; + fam.append( tr( "VISU_FONT_ARIAL" ) ); + fam.append( tr( "VISU_FONT_COURIER" ) ); + fam.append( tr( "VISU_FONT_TIMES" ) ); + + setPreferenceProperty( tfont, "fonts", fam ); + + int f = QtxFontEdit::Family | QtxFontEdit::Bold | QtxFontEdit::Italic | QtxFontEdit::Shadow; + if ( useSize ) + f |= QtxFontEdit::UserSize | QtxFontEdit::Size; + + setPreferenceProperty( tfont, "features", f ); + + return tfont; +} + + + + + + + + + + + + + + diff --git a/src/VISUGUI/VisuGUI.h b/src/VISUGUI/VisuGUI.h index 2325ddc1..6ca1a8a2 100644 --- a/src/VISUGUI/VisuGUI.h +++ b/src/VISUGUI/VisuGUI.h @@ -29,23 +29,23 @@ #ifndef VisuGUI_HeaderFile #define VisuGUI_HeaderFile -#include -#include +#include -#include "SalomeApp_Module.h" - -#include "SALOME_ListIO.hxx" -#include "VISU_Prs3d_i.hh" -#include "SVTK_ViewWindow.h" +#include +#include +#include "VisuGUI_Panel.h" +#include +#include class SUIT_ViewManager; -class SVTK_ViewWindow; -class Prs3d_i; +class VisuGUI_Slider; +class VisuGUI_Sweep; namespace VISU { + class Prs3d_i; typedef std::pair TPrs3dToInd; // prs pointer and default index of scalar bar placement typedef std::set TSetPrs3d; typedef std::map TViewToPrs3d; @@ -56,7 +56,11 @@ class VisuGUI: public SalomeApp_Module Q_OBJECT; public: + enum PanelId { SelectionPanelId = 0, + FeatureEdgesPanelId, + ClippingPlanesPanelId }; +public: VisuGUI(); virtual ~VisuGUI(); @@ -81,7 +85,13 @@ public: VISU::TViewToPrs3d& getScalarBarsMap(); - + +signals: + void moduleDeactivated(); + void moduleActivated(); + void presentationCreated(VISU::Prs3d_i* thePrs); + void beforeObjectDelete(QString theEntry); + public slots: virtual bool deactivateModule( SUIT_Study* ); virtual bool activateModule( SUIT_Study* ); @@ -123,6 +133,10 @@ protected slots: virtual void OnErasePrs(); // virtual void OnEraseAll(); + void OnToggleSelectionPanel(); + void OnSwitchSelectionMode(); + void OnSwitchSelectionMode( int ); + void OnMakeSurfaceframe(); void OnMakeInsideframe(); void OnMakeWireframe(); @@ -130,6 +144,8 @@ protected slots: void OnMakePoints(); void OnMakeShrink(); + void OnMakeFeatureEdges(); + void OnSetShadingOn(); void OnSetShadingOff(); @@ -162,13 +178,16 @@ protected slots: void OnCopyPresentation(); - void OnSelectionInfo(); - void OnTranslatePrs(); void OnArrangeActors(); void OnPlot3dFromCutPlane(); - void OnCacheProperties(); + void OnManageCache(); + + void OnFilterScalars(); + + void OnValuesLabeling(); + void OnValuesLabelingParams(); // MULTIPR void OnMultiprViewFullRes(); @@ -190,10 +209,16 @@ private: void createMenus(); void createToolBars(); void createPopupMenus(); + void createPanels(); + int addVtkFontPref( const QString& label, const int pId, const QString& param, const bool useSize ); private: - LightApp_Displayer* myDisplayer; - VISU::TViewToPrs3d myScalarBarsMap; + QMap< PanelId, VisuGUI_Panel* > myPanels; + VisuGUI_Slider* mySlider; + VisuGUI_Sweep* mySweep; + + LightApp_Displayer* myDisplayer; + VISU::TViewToPrs3d myScalarBarsMap; }; #endif diff --git a/src/VISUGUI/VisuGUI_ActionsDef.h b/src/VISUGUI/VisuGUI_ActionsDef.h index 13cb18db..0abafd3f 100644 --- a/src/VISUGUI/VisuGUI_ActionsDef.h +++ b/src/VISUGUI/VisuGUI_ActionsDef.h @@ -75,6 +75,9 @@ #define VISU_SHRINK 4055 #define VISU_UNSHRINK 4056 +#define VISU_FEATURE_EDGES 4091 +#define VISU_FEATURE_EDGES_DISABLE 4092 + #define VISU_SHADING 4083 #define VISU_NOSHADING 4084 @@ -117,7 +120,7 @@ #define VISU_PLOT3D_FROM_CUTPLANE 4085 -#define VISU_CACHE_PROPERTIES 4090 +#define VISU_MANAGE_CACHE 4090 // MULTIPR #define VISU_MULTIPR_FULL_RES 4095 @@ -128,4 +131,18 @@ #define VISU_FILE_INFO 4100 #define VISU_EXPORT_MED 4101 +#define VISU_SELECTION_PANEL 4102 +#define VISU_ACTOR_SELECTION 4103 +#define VISU_CELL_SELECTION 4104 +#define VISU_POINT_SELECTION 4105 +#define VISU_GAUSS_POINT_SELECTION 4106 + +#define VISU_SLIDER_PANEL 4200 +#define VISU_SWEEP_PANEL 4300 +#define VISU_FILTERSCALARS 4301 + +#define VISU_VALUES_LABELING 4302 +#define VISU_VALUES_LABELING_PARAMS 4303 + + #endif diff --git a/src/VISUGUI/VisuGUI_ClippingDlg.cxx b/src/VISUGUI/VisuGUI_ClippingDlg.cxx index 7dc9d39b..1a9dd664 100644 --- a/src/VISUGUI/VisuGUI_ClippingDlg.cxx +++ b/src/VISUGUI/VisuGUI_ClippingDlg.cxx @@ -28,11 +28,13 @@ #include "VISU_Result_i.hh" #include "VISU_PipeLine.hxx" +#include "VISU_DataSetActor.h" #include "LightApp_SelectionMgr.h" #include "LightApp_Application.h" #include "SVTK_ViewWindow.h" +#include #include "SUIT_Session.h" #include "SUIT_Desktop.h" @@ -41,6 +43,7 @@ #include "SUIT_OverrideCursor.h" #include "SALOME_Actor.h" +#include "VISU_ViewManager_i.hh" // QT Includes #include @@ -55,6 +58,10 @@ #include #include #include +#include +#include +#include +#include // VTK Includes #include @@ -67,6 +74,7 @@ #include #include #include +#include // OCCT Includes #include @@ -244,25 +252,31 @@ VisuGUI_ClippingDlg::VisuGUI_ClippingDlg (VisuGUI* theModule, mySelectionMgr(VISU::GetSelectionMgr(theModule)), myVisuGUI(theModule), myPrs3d(0), - myIsSelectPlane(false) + myIsSelectPlane(false), + myDSActor(0) { setWindowTitle(tr("TITLE")); setSizeGripEnabled(TRUE); setAttribute( Qt::WA_DeleteOnClose, true ); - QGridLayout* VisuGUI_ClippingDlgLayout = new QGridLayout(this); + QVBoxLayout* VisuGUI_ClippingDlgLayout = new QVBoxLayout(this); VisuGUI_ClippingDlgLayout->setSpacing(6); VisuGUI_ClippingDlgLayout->setMargin(11); + + QStackedWidget* aStackWidget = new QStackedWidget(this); + VisuGUI_ClippingDlgLayout->addWidget(aStackWidget); + // Local planes + QWidget* aLocalPlanes = new QWidget(aStackWidget); + QVBoxLayout* aLocalLayout = new QVBoxLayout(aLocalPlanes); + aStackWidget->addWidget(aLocalPlanes); // Controls for selecting, creating, deleting planes - QGroupBox* GroupPlanes = new QGroupBox (tr("GRP_PLANES"), this); - //GroupPlanes->setColumnLayout(0, Qt::Vertical); - //GroupPlanes->layout()->setSpacing(0); - //GroupPlanes->layout()->setMargin(0); + QGroupBox* GroupPlanes = new QGroupBox (tr("GRP_PLANES"), aLocalPlanes); QGridLayout* GroupPlanesLayout = new QGridLayout (GroupPlanes); GroupPlanesLayout->setAlignment(Qt::AlignTop); GroupPlanesLayout->setSpacing(6); GroupPlanesLayout->setMargin(11); + aLocalLayout->addWidget(GroupPlanes); ComboBoxPlanes = new QComboBox (GroupPlanes); GroupPlanesLayout->addWidget(ComboBoxPlanes, 0, 0); @@ -281,30 +295,38 @@ VisuGUI_ClippingDlg::VisuGUI_ClippingDlg (VisuGUI* theModule, // Controls for defining plane parameters // Tab pane - QGroupBox* GroupParameters = new QGroupBox(tr("GRP_PARAMETERS"), this); - //GroupParameters->setColumnLayout(0, Qt::Vertical); - //GroupParameters->layout()->setSpacing(0); - //GroupParameters->layout()->setMargin(0); + QGroupBox* GroupParameters = new QGroupBox(tr("GRP_PARAMETERS"), aLocalPlanes); QGridLayout* GroupParametersLayout = new QGridLayout (GroupParameters); GroupParametersLayout->setAlignment(Qt::AlignTop); GroupParametersLayout->setSpacing(6); GroupParametersLayout->setMargin(11); + aLocalLayout->addWidget(GroupParameters); TabPane = new QTabWidget (GroupParameters); TabPane->addTab(createParamsTab() , tr("TAB_NON_STRUCTURED")); TabPane->addTab(createIJKParamsTab(), tr("TAB_IJK_STRUCTURED")); GroupParametersLayout->addWidget(TabPane, 0, 0); + + + + // "Show preview" and "Auto Apply" check boxes + QHBoxLayout* aCheckBoxLayout = new QHBoxLayout(this); + VisuGUI_ClippingDlgLayout->addLayout(aCheckBoxLayout); PreviewCheckBox = new QCheckBox (tr("SHOW_PREVIEW_CHK"), this); PreviewCheckBox->setChecked(true); + aCheckBoxLayout->addWidget(PreviewCheckBox); + aCheckBoxLayout->addStretch(); AutoApplyCheckBox = new QCheckBox (tr("AUTO_APPLY_CHK"), this); AutoApplyCheckBox->setChecked(false); + aCheckBoxLayout->addWidget(AutoApplyCheckBox); // Controls for "Ok", "Apply" and "Close" button QGroupBox* GroupButtons = new QGroupBox (this); + VisuGUI_ClippingDlgLayout->addWidget(GroupButtons); QSizePolicy aSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed ); aSizePolicy.setHeightForWidth( GroupButtons->sizePolicy().hasHeightForWidth() ); @@ -312,9 +334,6 @@ VisuGUI_ClippingDlg::VisuGUI_ClippingDlg (VisuGUI* theModule, aSizePolicy.setVerticalStretch( 0 ); GroupButtons->setSizePolicy( aSizePolicy ); GroupButtons->setGeometry(QRect(10, 10, 281, 48)); - //GroupButtons->setColumnLayout(0, Qt::Vertical); - //GroupButtons->layout()->setSpacing(0); - //GroupButtons->layout()->setMargin(0); QGridLayout* GroupButtonsLayout = new QGridLayout (GroupButtons); GroupButtons->setLayout(GroupButtonsLayout); GroupButtonsLayout->setAlignment(Qt::AlignTop); @@ -340,12 +359,6 @@ VisuGUI_ClippingDlg::VisuGUI_ClippingDlg (VisuGUI* theModule, buttonOk->setDefault(TRUE); GroupButtonsLayout->addWidget(buttonOk, 0, 0); - VisuGUI_ClippingDlgLayout->addWidget(GroupPlanes, 0, 0, 1, 2); - VisuGUI_ClippingDlgLayout->addWidget(GroupParameters, 1, 0, 1, 2); - VisuGUI_ClippingDlgLayout->addWidget(PreviewCheckBox, 2, 0); - VisuGUI_ClippingDlgLayout->addWidget(AutoApplyCheckBox, 2, 1); - VisuGUI_ClippingDlgLayout->addWidget(GroupButtons, 3, 0, 3, 2); - // Initial state VISU::RangeStepAndValidator(SpinBoxDistance, 0.0, 1.0, 0.01, 3); VISU::RangeStepAndValidator(SpinBoxRot1, -180.0, 180.0, 1, 3); @@ -488,6 +501,16 @@ QWidget* VisuGUI_ClippingDlg::createIJKParamsTab() // purpose : //================================================================================= void VisuGUI_ClippingDlg::ClickOnApply() +{ + applyLocalPlanes(); +} + + +//================================================================================= +// function : applyLocalPlanes() +// purpose : +//================================================================================= +void VisuGUI_ClippingDlg::applyLocalPlanes() { if (!myPrs3d) return; @@ -512,7 +535,8 @@ void VisuGUI_ClippingDlg::ClickOnApply() } // Try to apply new clipping - myPrs3d->RemoveAllClippingPlanes(); + //myPrs3d->RemoveAllClippingPlanes(); + removeAllClippingPlanes(myPrs3d); VISU::TPlanes::iterator anIter = myPlanes.begin(); for (; anIter != myPlanes.end(); anIter++) { @@ -537,7 +561,8 @@ void VisuGUI_ClippingDlg::ClickOnApply() if (isFailed) { // Restore previous clipping state because of failure. - myPrs3d->RemoveAllClippingPlanes(); + //myPrs3d->RemoveAllClippingPlanes(); + removeAllClippingPlanes(myPrs3d); TPlns::iterator anOldIter = anOldPlanes.begin(); for (; anOldIter != anOldPlanes.end(); anOldIter++) { @@ -555,6 +580,9 @@ void VisuGUI_ClippingDlg::ClickOnApply() } } + + + //================================================================================= // function : ClickOnOk() // purpose : @@ -804,9 +832,9 @@ void VisuGUI_ClippingDlg::Sinchronize() } buttonDelete ->setEnabled(anIsControlsEnable); - buttonApply ->setEnabled(anIsControlsEnable); - PreviewCheckBox ->setEnabled(anIsControlsEnable); - AutoApplyCheckBox ->setEnabled(anIsControlsEnable); + //buttonApply ->setEnabled(anIsControlsEnable); + // PreviewCheckBox ->setEnabled(anIsControlsEnable); + // AutoApplyCheckBox ->setEnabled(anIsControlsEnable); ComboBoxOrientation ->setEnabled(anIsControlsEnable); SpinBoxDistance ->setEnabled(anIsControlsEnable); @@ -1210,3 +1238,15 @@ void VisuGUI_ClippingDlg::SetPrs3d(VISU::Prs3d_i* thePrs) } else return; } + + +void VisuGUI_ClippingDlg::removeAllClippingPlanes(VISU::Prs3d_i* thePrs) +{ + for (int i = thePrs->GetNumberOfClippingPlanes() - 1; i >= 0 ; i--) { + OrientedPlane* aPlane = dynamic_cast(thePrs->GetClippingPlane(i)); + if (aPlane) + thePrs->RemoveClippingPlane(i); + } +} + + diff --git a/src/VISUGUI/VisuGUI_ClippingDlg.h b/src/VISUGUI/VisuGUI_ClippingDlg.h index f14ac095..c35e1b93 100644 --- a/src/VISUGUI/VisuGUI_ClippingDlg.h +++ b/src/VISUGUI/VisuGUI_ClippingDlg.h @@ -44,6 +44,7 @@ class QComboBox; class QButtonGroup; class QSpinBox; class QTabWidget; +class QListWidget; class SALOME_Actor; @@ -54,11 +55,11 @@ class SVTK_ViewWindow; class LightApp_SelectionMgr; class VisuGUI; - class vtkPlaneSource; class vtkDataSetMapper; - class OrientedPlane; +class VISU_Actor; +class PreviewPlane; namespace VISU { class Prs3d_i; @@ -136,6 +137,11 @@ private: void SetPrs3d(VISU::Prs3d_i* thePrs); + VISU_Actor* getSelectedActor(); + + void applyLocalPlanes(); + + void removeAllClippingPlanes(VISU::Prs3d_i* thePrs); private: @@ -179,6 +185,9 @@ private: bool myIsSelectPlane; + VISU_Actor* myDSActor; + QList myPreviewList; + protected: QWidget* createParamsTab(); QWidget* createIJKParamsTab(); @@ -204,3 +213,5 @@ public slots: }; #endif // DIALOGBOX_TRANSPARENCYDLG_H + + diff --git a/src/VISUGUI/VisuGUI_CutPlanesDlg.cxx b/src/VISUGUI/VisuGUI_CutPlanesDlg.cxx index d16325ac..7cdb29cb 100644 --- a/src/VISUGUI/VisuGUI_CutPlanesDlg.cxx +++ b/src/VISUGUI/VisuGUI_CutPlanesDlg.cxx @@ -183,19 +183,16 @@ VisuGUI_CutPlanesPane::VisuGUI_CutPlanesPane (QWidget* theParent) myVectorialFieldCombo = new QComboBox (GDeformation); GDeformationLayout->addWidget( myVectorialFieldCombo, 0, 1 ); + SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); + int aPrecision = aResourceMgr->integerValue( "VISU", "floating_point_precision", 0 ); + QLabel* LabelDeformation2 = new QLabel (tr("LBL_DEFROMATION_SCALE"), GDeformation); GDeformationLayout->addWidget( LabelDeformation2, 1, 0 ); - myScaleSpn = new QtxDoubleSpinBox (0.0, 1.0E+38, 0.1, GDeformation); + myScaleSpn = new QtxDoubleSpinBox (0, 1.0E+38, 0.1, aPrecision*(-1), 38, GDeformation); myScaleSpn->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); GDeformationLayout->addWidget( myScaleSpn, 1, 1 ); connect(myVectorialFieldCombo, SIGNAL(activated(int)), this, SLOT(onVectorialFieldChanged(int))); connect(myScaleSpn, SIGNAL(valueChanged(double)), this, SLOT(onScaleFactorChanged(double))); - - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - int aPrecision = aResourceMgr->integerValue( "VISU", "floating_point_precision", 0 ); - - myScaleSpn->setPrecision( aPrecision*(-1) ); - myScaleSpn->setDecimals(38); myScaleSpn->setValue(0.1); myPreviewCheck = new QCheckBox(tr("LBL_SHOW_PREVIEW"), this); @@ -315,17 +312,17 @@ double VisuGUI_CutPlanesPane::getScaleFactor(){ void VisuGUI_CutPlanesPane::setScaleFactor(double theFactor){ double i=0.1; - while (1) { // Calculate Step & Precission - if ( int (theFactor/i) >= 0) - break; - else { - i = i*0.1; + if (theFactor > 0) { + while (1) { // Calculate Step & Precission + if ( int (theFactor/i) >= 0) + break; + else + i = i*0.1; } } myScaleSpn->setSingleStep(i); myScaleSpn->setValue(theFactor); - } void VisuGUI_CutPlanesPane::createPlanes() diff --git a/src/VISUGUI/VisuGUI_DeformedShapeDlg.cxx b/src/VISUGUI/VisuGUI_DeformedShapeDlg.cxx index 6f6aa2b4..9f4de1b4 100644 --- a/src/VISUGUI/VisuGUI_DeformedShapeDlg.cxx +++ b/src/VISUGUI/VisuGUI_DeformedShapeDlg.cxx @@ -89,14 +89,11 @@ VisuGUI_DeformedShapeDlg::VisuGUI_DeformedShapeDlg (SalomeApp_Module* theModule) QLabel* ScaleLabel = new QLabel (tr("SCALE_FACTOR"), TopGroup ); TopGroupLayout->addWidget(ScaleLabel, 0, 0); - ScalFact = new QtxDoubleSpinBox (0.0, 1.0E+38, 0.1, TopGroup); - ScalFact->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); int aPrecision = aResourceMgr->integerValue( "VISU", "floating_point_precision", 0 ); - ScalFact->setPrecision( aPrecision*(-1) ); - ScalFact->setDecimals(38); + ScalFact = new QtxDoubleSpinBox (0, 1.0E+38, 0.1, aPrecision*(-1), 38, TopGroup); + ScalFact->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); ScalFact->setValue(0.1); TopGroupLayout->addWidget(ScalFact, 0, 1); @@ -176,16 +173,16 @@ void VisuGUI_DeformedShapeDlg::initFromPrsObject (VISU::ColoredPrs3d_i* thePrs, void VisuGUI_DeformedShapeDlg::setFactor(double theFactor) { double i=0.1; - while (1) { // Calculate Step & Precission - if ( int (theFactor/i) > 0) - break; - else { - i = i*0.1; + if (theFactor > 0) { + while (1) { // Calculate Step & Precission + if ( int (theFactor/i) > 0) + break; + else + i = i*0.1; } } ScalFact->setSingleStep(i); - ScalFact->setValue(theFactor); } @@ -263,8 +260,9 @@ bool VisuGUI_DeformedShapeDlg::onApply() // Create and Edit //////////////////////////////////////////////////////////////////////////////// -void VisuGUI_DeformedShapeDlg::CreatePrs3d(VisuGUI* theModule) +VISU::Prs3d_i* VisuGUI_DeformedShapeDlg::CreatePrs3d(VisuGUI* theModule) { + VISU::DeformedShape_i* aPrs3d = NULL; _PTR(SObject) aTimeStamp; Handle(SALOME_InteractiveObject) anIO; VISU::ColoredPrs3d_i::EPublishInStudyMode aPublishInStudyMode; @@ -281,10 +279,10 @@ void VisuGUI_DeformedShapeDlg::CreatePrs3d(VisuGUI* theModule) QString aFieldName = aRestoringMap["myFieldName"]; QString aTimeStampId = aRestoringMap["myTimeStampId"]; - typedef VISU::DeformedShape_i TPrs3d_i; + //typedef VISU::DeformedShape_i TPrs3d_i; - TPrs3d_i* aPrs3d = - VISU::CreatePrs3dFromFactory(theModule, + aPrs3d = + VISU::CreatePrs3dFromFactory(theModule, aTimeStamp, aMeshName.toLatin1().data(), (VISU::Entity)anEntity.toInt(), @@ -316,6 +314,7 @@ void VisuGUI_DeformedShapeDlg::CreatePrs3d(VisuGUI* theModule) } } } + return aPrs3d; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/VISUGUI/VisuGUI_DeformedShapeDlg.h b/src/VISUGUI/VisuGUI_DeformedShapeDlg.h index 1449af50..d8ed8e7a 100644 --- a/src/VISUGUI/VisuGUI_DeformedShapeDlg.h +++ b/src/VISUGUI/VisuGUI_DeformedShapeDlg.h @@ -70,7 +70,7 @@ public: virtual int storeToPrsObject(VISU::ColoredPrs3d_i* thePrs); - static void CreatePrs3d(VisuGUI* theModule); + static VISU::Prs3d_i* CreatePrs3d(VisuGUI* theModule); static void EditPrs3d(VisuGUI* theModule, VISU::Prs3d_i* thePrs3d, Handle(SALOME_InteractiveObject)& theIO); void updatePrsCopy(); diff --git a/src/VISUGUI/VisuGUI_Displayer.cxx b/src/VISUGUI/VisuGUI_Displayer.cxx index 9cf7e830..df6fbc23 100644 --- a/src/VISUGUI/VisuGUI_Displayer.cxx +++ b/src/VISUGUI/VisuGUI_Displayer.cxx @@ -33,7 +33,7 @@ #include "VISU_ViewManager_i.hh" #include "VISU_Actor.h" -#include "VVTK_ViewModel.h" +//#include "VVTK_ViewModel.h" #include #include @@ -80,10 +80,10 @@ SALOME_Prs* VisuGUI_Displayer::buildPresentation( const QString& theEntry, SALOM SALOME_View* aView = theView ? theView : GetActiveView(); VISU::VISUType aType = aBase->GetType(); VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aBase); - if( aView && (!CORBA::is_nil(aPrs3d) || aType == VISU::TCOLOREDPRS3DHOLDER) ){ - SVTK_Viewer* aViewer = dynamic_cast( aView ); - if (!aViewer) - aViewer = dynamic_cast( aView ); + if(!CORBA::is_nil(aPrs3d) || aType == VISU::TCOLOREDPRS3DHOLDER){ + SVTK_Viewer* aViewer = dynamic_cast( aView ); + //if (!aViewer) + //aViewer = dynamic_cast( aView ); if( aViewer ){ SUIT_ViewManager* aViewManager = aViewer->getViewManager(); SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); @@ -294,7 +294,7 @@ bool VisuGUI_Displayer::canBeDisplayed( const QString& entry, const QString& vie dynamic_cast( VISU::GetServant( anObj ).in() ) ) return true; - if( viewer_type==SVTK_Viewer::Type() || viewer_type==VVTK_Viewer::Type()) + if( viewer_type==SVTK_Viewer::Type() /*|| viewer_type==VVTK_Viewer::Type()*/) { VISU::Base_i* aBase = dynamic_cast(VISU::GetServant(anObj).in()); diff --git a/src/VISUGUI/VisuGUI_FileInfoDlg.cxx b/src/VISUGUI/VisuGUI_FileInfoDlg.cxx deleted file mode 100644 index 78d8c090..00000000 --- a/src/VISUGUI/VisuGUI_FileInfoDlg.cxx +++ /dev/null @@ -1,78 +0,0 @@ -// VISU VISUGUI : GUI of VISU component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File : VisuGUI_FileInfoDlg.cxx -// Author : Alexandre SOLOVYOV, Open CASCADE S.A.S. ( alexander.solovyov@opencascade.com) -// Module : VISU -// - -#include - -#include - -#include -#include -#include - -VisuGUI_FileInfoDlg::VisuGUI_FileInfoDlg( QWidget* parent, SALOME_MED::MedFileInfo* inf ) - : QtxDialog( parent, true, true, QtxDialog::OK ) -{ - setWindowTitle( tr( "CAPTION" ) ); - setSizeGripEnabled( true ); - - QLineEdit* fname = new QLineEdit( mainFrame() ); - fname->setReadOnly( true ); - QLineEdit* fsize = new QLineEdit( mainFrame() ); - fsize->setReadOnly( true ); - QLineEdit* medversion = new QLineEdit( mainFrame() ); - medversion->setReadOnly( true ); - fname->setMinimumWidth( 300 ); - - QGridLayout* lay = new QGridLayout( mainFrame() ); - lay->setMargin( 5 ); lay->setSpacing( 5 ); - lay->addWidget( new QLabel( tr( "FILE_NAME" ), mainFrame() ), 0, 0 ); - lay->addWidget( fname, 0, 1 ); - lay->addWidget( new QLabel( tr( "FILE_SIZE" ), mainFrame() ), 1, 0 ); - lay->addWidget( fsize, 1, 1 ); - lay->addWidget( new QLabel( tr( "MED_VERSION" ), mainFrame() ), 2, 0 ); - lay->addWidget( medversion, 2, 1 ); - - fname->setText( (char*)inf->fileName ); - fname->home( false ); - fsize->setText( QString::number( inf->fileSize ) ); - - QString version; - if( inf->major>=0 ) - { - version = QString::number( inf->major ); - if( inf->minor>=0 ) - { - version += "." + QString::number( inf->minor ); - if( inf->release>=0 ) - version += "." + QString::number( inf->release ); - } - } - medversion->setText( version ); -} - -VisuGUI_FileInfoDlg::~VisuGUI_FileInfoDlg() -{ -} diff --git a/src/VISUGUI/VisuGUI_FileInfoDlg.h b/src/VISUGUI/VisuGUI_FileInfoDlg.h deleted file mode 100644 index c755474b..00000000 --- a/src/VISUGUI/VisuGUI_FileInfoDlg.h +++ /dev/null @@ -1,41 +0,0 @@ -// VISU VISUGUI : GUI of VISU component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File : VisuGUI_FileInfoDlg.h -// Author : Alexandre SOLOVYOV, Open CASCADE S.A.S. ( alexander.solovyov@opencascade.com) -// - -#ifndef VISUGUI_FILEINFODLG_H -#define VISUGUI_FILEINFODLG_H - -#include -#include - -class VisuGUI_FileInfoDlg : public QtxDialog -{ - Q_OBJECT - -public: - VisuGUI_FileInfoDlg( QWidget*, SALOME_MED::MedFileInfo* ); - virtual ~VisuGUI_FileInfoDlg(); -}; - -#endif // VISUGUI_FILEINFODLG_H diff --git a/src/VISUGUI/VisuGUI_GaussPointsDlg.cxx b/src/VISUGUI/VisuGUI_GaussPointsDlg.cxx index 14826a2f..bcc76d29 100644 --- a/src/VISUGUI/VisuGUI_GaussPointsDlg.cxx +++ b/src/VISUGUI/VisuGUI_GaussPointsDlg.cxx @@ -34,6 +34,7 @@ #include "VISU_ColoredPrs3dFactory.hh" #include "VISU_GaussPoints_i.hh" +#include "VISU_Prs3dUtils.hh" #include "VISU_GaussPointsPL.hxx" #include "VISU_OpenGLPointSpriteMapper.hxx" #include "VISU_Convertor.hxx" @@ -79,10 +80,10 @@ using namespace std; VisuGUI_GaussScalarBarPane::VisuGUI_GaussScalarBarPane (QWidget * parent): QWidget(parent) { - myVerX = 0.01; myVerY = 0.10; myVerW = 0.10; myVerH = 0.80; - myHorX = 0.20; myHorY = 0.01; myHorW = 0.60; myHorH = 0.12; - myVerTW = myVerTH = myVerLW = myVerLH = myVerBW = myVerBH = 0; - myHorTW = myHorTH = myHorLW = myHorLH = myHorBW = myHorBH = 0; + myVerX = 0.01; myVerY = 0.10; myVerW = 0.08; myVerH = 0.80; + myHorX = 0.10; myHorY = 0.01; myHorW = 0.80; myHorH = 0.08; + myVerTS = myVerLS = myVerBW = myVerBH = 0; + myHorTS = myHorLS = myHorBW = myHorBH = 0; Imin = 0.0; Imax = 0.0; myRangeMode = -1; @@ -476,22 +477,18 @@ void VisuGUI_GaussScalarBarPane::initFromPrsObject(VISU::GaussPoints_i* thePrs, thePrs->GetBarOrientation()); if(RBvert->isChecked()) { - myVerTW = thePrs->GetTitleWidth(); - myVerTH = thePrs->GetTitleHeight(); - myVerLW = thePrs->GetLabelWidth(); - myVerLH = thePrs->GetLabelHeight(); + myVerTS = thePrs->GetTitleSize(); + myVerLS = thePrs->GetLabelSize(); myVerBW = thePrs->GetBarWidth(); myVerBH = thePrs->GetBarHeight(); } else { - myHorTW = thePrs->GetTitleWidth(); - myHorTH = thePrs->GetTitleHeight(); - myHorLW = thePrs->GetLabelWidth(); - myHorLH = thePrs->GetLabelHeight(); + myHorTS = thePrs->GetTitleSize(); + myHorLS = thePrs->GetLabelSize(); myHorBW = thePrs->GetBarWidth(); myHorBH = thePrs->GetBarHeight(); } - myBarDlg->setLabelsFormat(thePrs->GetLabelsFormat()); + myBarDlg->setLabelsPrecision( VISU::ToPrecision( thePrs->GetLabelsFormat() ) ); myBarDlg->setUnitsVisible(thePrs->IsUnitsVisible()); SpacingSpin->setValue(thePrs->GetSpacing()); @@ -554,7 +551,8 @@ void VisuGUI_GaussScalarBarPane::initFromPrsObject(VISU::GaussPoints_i* thePrs, vtkFloatingPointType R, G, B; thePrs->GetTitleColor(R, G, B); - myBarDlg->setLabelsFormat(thePrs->GetLabelsFormat()); + int lp = VISU::ToPrecision( thePrs->GetLabelsFormat() ); + myBarDlg->setLabelsPrecision( lp ); myBarDlg->setUnitsVisible(thePrs->IsUnitsVisible()); myTextDlg->myTitleFont->SetData(QColor((int)(R*255.), (int)(G*255.), (int)(B*255.)), @@ -597,12 +595,13 @@ int VisuGUI_GaussScalarBarPane::storeToPrsObject(VISU::GaussPoints_i* thePrs) { thePrs->SetLabels(LabelSpin->value()); if(RBvert->isChecked()) { - thePrs->SetRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + thePrs->SetRatios(myVerTS, myVerLS, myVerBW, myVerBH); } else { - thePrs->SetRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + thePrs->SetRatios(myHorTS, myHorLS, myHorBW, myHorBH); } - thePrs->SetLabelsFormat(myBarDlg->getLabelsFormat().toLatin1().data()); + std::string f = VISU::ToFormat( myBarDlg->getLabelsPrecision() ); + thePrs->SetLabelsFormat( f.c_str() ); thePrs->SetUnitsVisible(myBarDlg->isUnitsVisible()); if (myIsStoreTextProp) { @@ -758,14 +757,14 @@ void VisuGUI_GaussScalarBarPane::onTextPref() void VisuGUI_GaussScalarBarPane::onBarPref() { if(RBvert->isChecked()) - myBarDlg->setRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + myBarDlg->setRatios(myVerTS, myVerLS, myVerBW, myVerBH); else - myBarDlg->setRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + myBarDlg->setRatios(myHorTS, myHorLS, myHorBW, myHorBH); if(myBarDlg->exec()) { if(RBvert->isChecked()) - myBarDlg->getRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + myBarDlg->getRatios(myVerTS, myVerLS, myVerBW, myVerBH); else - myBarDlg->getRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + myBarDlg->getRatios(myHorTS, myHorLS, myHorBW, myHorBH); } } diff --git a/src/VISUGUI/VisuGUI_GaussPointsDlg.h b/src/VISUGUI/VisuGUI_GaussPointsDlg.h index e23b9a1e..92210cce 100644 --- a/src/VISUGUI/VisuGUI_GaussPointsDlg.h +++ b/src/VISUGUI/VisuGUI_GaussPointsDlg.h @@ -101,8 +101,8 @@ class VisuGUI_GaussScalarBarPane : public QWidget//QVBox double Imin, Imax; double myHorX, myHorY, myHorW, myHorH; double myVerX, myVerY, myVerW, myVerH; - int myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH; - int myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH; + int myHorTS, myHorLS, myHorBW, myHorBH; + int myVerTS, myVerLS, myVerBW, myVerBH; int myRangeMode; bool myIsStoreTextProp; diff --git a/src/VISUGUI/VisuGUI_Module.cxx b/src/VISUGUI/VisuGUI_Module.cxx index 4dd635c7..5466db2a 100644 --- a/src/VISUGUI/VisuGUI_Module.cxx +++ b/src/VISUGUI/VisuGUI_Module.cxx @@ -48,13 +48,13 @@ #include "SALOMEDSClient_ClientFactory.hxx" #include "SALOMEDSClient_IParameters.hxx" -#include "VVTK_ViewManager.h" -#include "VVTK_ViewWindow.h" -#include "VVTK_ViewModel.h" +//#include "VVTK_ViewManager.h" +//#include "VVTK_ViewWindow.h" +//#include "VVTK_ViewModel.h" #include "SVTK_ViewModel.h" #include "SVTK_ViewManager.h" -#include "SVTK_MainWindow.h" +#include "SVTK_ViewWindow.h" #include "SVTK_RenderWindowInteractor.h" #include "VISU_Event.h" @@ -65,8 +65,6 @@ #include "VISU_GaussPtsAct.h" #include "VisuGUI_GaussPointsDlg.h" -#include "VisuGUI_Slider.h" - #include "VISU_Gen_i.hh" #include "VISU_Result_i.hh" #include "VISU_CutLines_i.hh" @@ -81,7 +79,7 @@ #include "VISU_SphereWidget.hxx" #include "SalomeApp_Study.h" -#include "VVTK_MainWindow.h" +//#include "VVTK_MainWindow.h" #include "VISU_View_i.hh" #ifndef DISABLE_VTKVIEWER @@ -125,6 +123,7 @@ #include + #ifdef _DEBUG_ static int MYDEBUG = 0; #else @@ -147,6 +146,8 @@ static int MYDEBUG = 0; #define GAUSS_RESTORE_CONFIGURATION 5702 #define GAUSS_RENAME_CONFIGURATION 5703 +using namespace std; + void CreateCurves( SalomeApp_Module* theModule, VISU::CutLines_i* thePrs, @@ -159,12 +160,12 @@ namespace VISU { //--------------------------------------------------------------- typedef void (SUIT_ViewWindow::* TViewVisibility)(); - void - SetViewVisibility(SalomeApp_Application* app, - TViewVisibility theViewVisibility) + void SetViewVisibility(SalomeApp_Application* app, + TViewVisibility theViewVisibility) { ViewManagerList l; - app->viewManagers( VVTK_Viewer::Type(), l ); + //app->viewManagers( VVTK_Viewer::Type(), l ); + app->viewManagers( SVTK_Viewer::Type(), l ); ViewManagerList::const_iterator anIt = l.begin(), aLast = l.end(); for( ; anIt!=aLast; anIt++ ) if( SUIT_ViewManager* aViewManager = *anIt ) @@ -181,24 +182,20 @@ namespace VISU } //--------------------------------------------------------------- -VisuGUI_Module:: -VisuGUI_Module() : +VisuGUI_Module::VisuGUI_Module() : VisuGUI() { } //--------------------------------------------------------------- -VisuGUI_Module:: -~VisuGUI_Module() +VisuGUI_Module::~VisuGUI_Module() { } //--------------------------------------------------------------- -void -VisuGUI_Module:: -initialize( CAM_Application* theApp ) +void VisuGUI_Module::initialize( CAM_Application* theApp ) { VisuGUI::initialize( theApp ); @@ -212,9 +209,9 @@ initialize( CAM_Application* theApp ) createMenu( SAVE_VISU_STATE, fileMenu, 9, -1 ); QPixmap aPixmap; - aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_GAUSS_NEW_VIEWER")); - createAction( GAUSS_NEW_VIEWER, - tr("MEN_GAUSS_NEW_VIEWER"), + /* aPixmap = aResourceMgr->loadPixmap("VISU",tr("ICON_GAUSS_NEW_VIEWER")); + createAction( GAUSS_NEW_VIEWER, + tr("MEN_GAUSS_NEW_VIEWER"), aPixmap, tr("MEN_GAUSS_NEW_VIEWER"), tr("MEN_GAUSS_NEW_VIEWER"), @@ -226,12 +223,12 @@ initialize( CAM_Application* theApp ) int windowMenu = createMenu( tr( "MEN_DESK_WINDOW" ), -1, 100 ); int newWinMenu = createMenu( tr( "MEN_DESK_NEWWINDOW" ), windowMenu, -1, 0 ); createMenu( action( GAUSS_NEW_VIEWER ), newWinMenu, -1 ); - + */ // Add actions to menus createMenu( tr( "MEN_GAUSS" ), -1, -1, 30 ); //createMenu( GAUSS_CREATE_PRS, aMenuId, 10 ); - QString aViewerType = VVTK_Viewer::Type(); + QString aViewerType = SVTK_Viewer::Type(); SUIT_Accel* accel = getApp()->accel(); accel->setActionKey( SUIT_Accel::PanLeft, Qt::Key_Left, aViewerType ); accel->setActionKey( SUIT_Accel::PanRight, Qt::Key_Right, aViewerType ); @@ -245,10 +242,10 @@ initialize( CAM_Application* theApp ) accel->setActionKey( SUIT_Accel::RotateDown, Qt::CTRL+Qt::Key_Down, aViewerType ); accel->setActionKey( SVTK::PlusSpeedIncrementEvent, Qt::Key_Plus, aViewerType ); accel->setActionKey( SVTK::MinusSpeedIncrementEvent, Qt::Key_Minus, aViewerType ); - + connect( getApp(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ), this, SLOT( OnViewManagerAdded (SUIT_ViewManager*) ) ); - + // Prepare popup menus QtxPopupMgr* mgr = popupMgr(); QString aRule; @@ -302,7 +299,7 @@ initialize( CAM_Application* theApp ) #ifndef DISABLE_VTKVIEWER #ifndef DISABLE_SALOMEOBJECT viewers.append( SVTK_Viewer::Type() ); - viewers.append( VVTK_Viewer::Type() ); + //viewers.append( VVTK_Viewer::Type() ); #else viewers.append( VTKViewer_Viewer::Type() ); #endif @@ -359,14 +356,14 @@ initialize( CAM_Application* theApp ) this, SLOT(OnSaveConfiguration())); mgr->insert( action( GAUSS_SAVE_CONFIGURATION ), -1, -1, -1 ); mgr->setRule( action( GAUSS_SAVE_CONFIGURATION ), - "selcount>=0 and client='VVTK' and activeView='VVTK'" ); + "selcount>=0 and client='SVTK' and activeView='SVTK'" ); createAction( GAUSS_OVERWRITE_CONFIGURATION, tr("MEN_OVERWRITE_CONFIGURATION"), QIcon(), tr("MEN_OVERWRITE_CONFIGURATION"), "", 0, this, false, this, SLOT(OnOverwriteConfiguration())); mgr->insert( action( GAUSS_OVERWRITE_CONFIGURATION ), -1, -1, -1 ); mgr->setRule( action( GAUSS_OVERWRITE_CONFIGURATION ), - "selcount>0 and type='VISU::TGAUSSVIEW' and activeView='VVTK'" ); + "selcount>0 and type='VISU::TGAUSSVIEW' and activeView='SVTK'" ); createAction( GAUSS_RESTORE_CONFIGURATION, tr("MEN_RESTORE_CONFIGURATION"), QIcon(), tr("MEN_RESTORE_CONFIGURATION"), "", 0, this, false, @@ -376,61 +373,55 @@ initialize( CAM_Application* theApp ) "selcount=1 and type='VISU::TGAUSSVIEW'" ); } -//--------------------------------------------------------------- -bool -VisuGUI_Module:: -activateModule( SUIT_Study* theStudy ) -{ - VisuGUI::activateModule( theStudy ); +// //--------------------------------------------------------------- +// bool VisuGUI_Module::activateModule( SUIT_Study* theStudy ) +// { +// VisuGUI::activateModule( theStudy ); - SetViewVisibility(getApp(),&SUIT_ViewWindow::show); - - return true; -} +// //SetViewVisibility(getApp(),&SUIT_ViewWindow::show); +// return true; +// } //--------------------------------------------------------------- -bool -VisuGUI_Module:: -deactivateModule( SUIT_Study* theStudy ) -{ - VisuGUI::deactivateModule( theStudy ); +// bool VisuGUI_Module::deactivateModule( SUIT_Study* theStudy ) +// { +// return VisuGUI::deactivateModule( theStudy ); - SetViewVisibility(getApp(),&SUIT_ViewWindow::hide); +// //SetViewVisibility(getApp(),&SUIT_ViewWindow::hide); - return true; -} +// //return true; +// } //--------------------------------------------------------------- -SUIT_ViewManager* -VisuGUI_Module:: -onCreateViewManager() -{ - SalomeApp_Application* anApp = getApp(); - SUIT_ResourceMgr* aResourceMgr = anApp->resourceMgr(); - VVTK_ViewManager* aViewManager = new VVTK_ViewManager( anApp->activeStudy(), anApp->desktop() ); - VVTK_Viewer* aViewer = (VVTK_Viewer*)aViewManager->getViewModel(); - aViewer->setBackgroundColor( aResourceMgr->colorValue( "VTKViewer", "background", aViewer->backgroundColor() ) ); - aViewer->setTrihedronSize( aResourceMgr->integerValue( "VTKViewer", "trihedron_size", aViewer->trihedronSize() ), - aResourceMgr->booleanValue( "VTKViewer", "relative_size", aViewer->trihedronRelative() ) ); - new LightApp_VTKSelector( aViewer, anApp->selectionMgr() ); - anApp->addViewManager( aViewManager ); - - VVTK_ViewWindow* aViewWindow = ( VVTK_ViewWindow* )aViewManager->createViewWindow(); - if( aViewWindow ) - { - new VisuGUI_Slider( this, aViewWindow, anApp->selectionMgr() ); - } - - return aViewer->getViewManager(); -} +// SUIT_ViewManager* VisuGUI_Module::onCreateViewManager() +// { +// SalomeApp_Application* anApp = getApp(); +// SUIT_ResourceMgr* aResourceMgr = anApp->resourceMgr(); +// VVTK_ViewManager* aViewManager = new VVTK_ViewManager( anApp->activeStudy(), anApp->desktop() ); +// VVTK_Viewer* aViewer = (VVTK_Viewer*)aViewManager->getViewModel(); +// aViewer->setBackgroundColor( aResourceMgr->colorValue( "VTKViewer", "background", aViewer->backgroundColor() ) ); +// aViewer->setProjectionMode( aResourceMgr->integerValue( "VTKViewer", "projection_mode", aViewer->projectionMode() ) ); +// aViewer->setTrihedronSize( aResourceMgr->integerValue( "VTKViewer", "trihedron_size", aViewer->trihedronSize() ), +// aResourceMgr->booleanValue( "VTKViewer", "relative_size", aViewer->trihedronRelative() ) ); +// aViewer->setIncrementalSpeed( aResourceMgr->integerValue( "VTKViewer", "speed_value", aViewer->incrementalSpeed() ), +// aResourceMgr->integerValue( "VTKViewer", "speed_mode", aViewer->incrementalSpeedMode() ) ); +// aViewer->setInteractionStyle( aResourceMgr->integerValue( "VTKViewer", "navigation_mode", aViewer->interactionStyle() ) ); +// aViewer->setSpacemouseButtons( aResourceMgr->integerValue( "VTKViewer", "spacemouse_func1_btn", aViewer->spacemouseBtn(1) ), +// aResourceMgr->integerValue( "VTKViewer", "spacemouse_func2_btn", aViewer->spacemouseBtn(1) ), +// aResourceMgr->integerValue( "VTKViewer", "spacemouse_func5_btn", aViewer->spacemouseBtn(1) ) ); + +// new LightApp_VTKSelector( aViewer, anApp->selectionMgr() ); + +// anApp->addViewManager( aViewManager ); + +// return aViewer->getViewManager(); +// } //--------------------------------------------------------------- -void -VisuGUI_Module:: -createPreferences() +void VisuGUI_Module::createPreferences() { VisuGUI::createPreferences(); @@ -438,15 +429,13 @@ createPreferences() createInsideCursorPreferences(); createOutsideCursorPreferences(); createPickingPreferences(); - createSpaceMousePreferences(); - createRecorderPreferences(); + // createSpaceMousePreferences(); + //createRecorderPreferences(); } //--------------------------------------------------------------- -void -VisuGUI_Module:: -createGaussPointsPreferences() +void VisuGUI_Module::createGaussPointsPreferences() { int gaussTab = addPreference( tr( "VISU_GAUSS_PREF_TAB_TTL" ) ); int primitiveGr = addPreference( tr( "VISU_GAUSS_PREF_PRIMITIVE_GROUP_TTL" ), gaussTab ); @@ -567,13 +556,49 @@ createGaussPointsPreferences() setPreferenceProperty( spacingPref, "min", 0.01 ); setPreferenceProperty( spacingPref, "max", 1.0 ); setPreferenceProperty( spacingPref, "step", 0.01 ); + + // spacemouse + int spacemouseGr = addPreference( tr( "VISU_SPACEMOUSE_PREF" ), gaussTab ); + setPreferenceProperty( spacemouseGr, "columns", 2 ); + int spacemousePref3 = addPreference( tr( "VISU_SPACEMOUSE_PREF_3" ), spacemouseGr, + LightApp_Preferences::Selector, "VISU", + "spacemouse_func3_btn" ); //decrease_gauss_point_magnification + int spacemousePref4 = addPreference( tr( "VISU_SPACEMOUSE_PREF_4" ), spacemouseGr, + LightApp_Preferences::Selector, "VISU", + "spacemouse_func4_btn" ); //increase_gauss_point_magnification + values.clear(); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_1" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_2" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_3" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_4" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_5" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_6" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_7" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_8" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_*" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_10" ) ); + values.append( tr( "VISU_SPACEMOUSE_PREF_BTN_11" ) ); + indices.clear(); + indices.append( 1 ); + indices.append( 2 ); + indices.append( 3 ); + indices.append( 4 ); + indices.append( 5 ); + indices.append( 6 ); + indices.append( 7 ); + indices.append( 8 ); + indices.append( 9 ); // == button_* + indices.append( 10 ); + indices.append( 11 ); + setPreferenceProperty( spacemousePref3, "strings", values ); + setPreferenceProperty( spacemousePref3, "indexes", indices ); + setPreferenceProperty( spacemousePref4, "strings", values ); + setPreferenceProperty( spacemousePref4, "indexes", indices ); } //--------------------------------------------------------------- -void -VisuGUI_Module:: -createInsideCursorPreferences() +void VisuGUI_Module::createInsideCursorPreferences() { int insideCursorTab = addPreference( tr( "VISU_GAUSS_INSIDE_CURSOR_PREF_TAB_TTL" ) ); @@ -659,9 +684,7 @@ createInsideCursorPreferences() //--------------------------------------------------------------- -void -VisuGUI_Module:: -createOutsideCursorPreferences() +void VisuGUI_Module::createOutsideCursorPreferences() { int outsideCursorTab = addPreference( tr( "VISU_GAUSS_OUTSIDE_CURSOR_PREF_TAB_TTL" ) ); @@ -733,9 +756,7 @@ createOutsideCursorPreferences() //--------------------------------------------------------------- -void -VisuGUI_Module:: -createPickingPreferences() +void VisuGUI_Module::createPickingPreferences() { int pickingTab = addPreference( tr( "VISU_PICKING_PREF_TAB_TTL" ) ); @@ -772,6 +793,10 @@ createPickingPreferences() int infoWindowGr = addPreference( tr( "VISU_PICKING_PREF_INFO_WINDOW_GROUP_TTL" ), pickingTab ); setPreferenceProperty( infoWindowGr, "columns", 2 ); + int infoWindowPref = addPreference( tr( "VISU_PICKING_PREF_INFO_WINDOW" ), infoWindowGr, + LightApp_Preferences::Bool, "VISU", "picking_info_window" ); + setPreferenceProperty( infoWindowPref, "columns", 2 ); + int transparencyPref = addPreference( tr( "VISU_PICKING_PREF_TRANSPARENCY" ), infoWindowGr, LightApp_Preferences::IntSpin, "VISU", "picking_transparency" ); setPreferenceProperty( transparencyPref, "min", 0 ); @@ -793,6 +818,10 @@ createPickingPreferences() int cameraGr = addPreference( tr( "VISU_PICKING_PREF_CAMERA_GROUP_TTL" ), pickingTab ); setPreferenceProperty( cameraGr, "columns", 2 ); + int cameraPref = addPreference( tr( "VISU_PICKING_PREF_CAMERA_MOVEMENT" ), cameraGr, + LightApp_Preferences::Bool, "VISU", "picking_camera_movement" ); + setPreferenceProperty( cameraPref, "columns", 2 ); + int zoomFactorPref = addPreference( tr( "VISU_PICKING_PREF_ZOOM_FACTOR" ), cameraGr, LightApp_Preferences::DblSpin, "VISU", "picking_zoom_factor" ); setPreferenceProperty( zoomFactorPref, "min", 0.1 ); @@ -814,9 +843,7 @@ createPickingPreferences() //--------------------------------------------------------------- -void -VisuGUI_Module:: -createSpaceMousePreferences() +void VisuGUI_Module::createSpaceMousePreferences() { int mouseTab = addPreference( tr( "VISU_MOUSE_PREF_TAB_TLT" ) ); @@ -894,9 +921,7 @@ createSpaceMousePreferences() //--------------------------------------------------------------- -void -VisuGUI_Module:: -createRecorderPreferences() +void VisuGUI_Module::createRecorderPreferences() { int recorderTab = addPreference( tr( "VISU_RECORDER_PREF_TAB_TTL" ) ); @@ -930,29 +955,26 @@ createRecorderPreferences() //--------------------------------------------------------------- -void -VisuGUI_Module:: -OnCreateGaussPoints() +void VisuGUI_Module::OnCreateGaussPoints() { double initialTime = vtkTimerLog::GetCPUTime(); - CreatePrs3d(this, VVTK_Viewer::Type()); + //CreatePrs3d(this, VVTK_Viewer::Type()); + Prs3d_i* aPrs = CreatePrs3d(this, SVTK_Viewer::Type()); + if (aPrs) + emit presentationCreated(aPrs); INFOS( "VisuGUI_Module::OnCreateGaussPoints() : Gauss Points created in " << vtkTimerLog::GetCPUTime() - initialTime << " seconds" ); } -void -VisuGUI_Module:: -OnViewManagerAdded(SUIT_ViewManager* viewMgr) -{ - QString type = viewMgr->getViewModel()->getType(); - if ( type == VVTK_Viewer::Type() ) - connect( viewMgr, SIGNAL( viewCreated( SUIT_ViewWindow* ) ), - this, SLOT( OnViewCreated( SUIT_ViewWindow* ) ) ); -} +// void VisuGUI_Module::OnViewManagerAdded(SUIT_ViewManager* viewMgr) +// { +// QString type = viewMgr->getViewModel()->getType(); +// if ( type == VVTK_Viewer::Type() ) +// connect( viewMgr, SIGNAL( viewCreated( SUIT_ViewWindow* ) ), +// this, SLOT( OnViewCreated( SUIT_ViewWindow* ) ) ); +// } -void -VisuGUI_Module:: -OnViewCreated(SUIT_ViewWindow* view) +void VisuGUI_Module::OnViewCreated(SUIT_ViewWindow* view) { SVTK_ViewWindow* viewWindow = dynamic_cast( view ); if ( viewWindow ) { @@ -965,45 +987,41 @@ OnViewCreated(SUIT_ViewWindow* view) } } -void -VisuGUI_Module:: -setProperty( SVTK_ViewWindow* viewWindow, const QString& pref ) +void VisuGUI_Module::setProperty( SVTK_ViewWindow* viewWindow, const QString& pref ) { if ( !viewWindow ) return; SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - SVTK_MainWindow* aMainWindow = viewWindow->getMainWindow(); + //SVTK_MainWindow* aMainWindow = viewWindow->getMainWindow(); int val; if ( pref == "speed_increment" ) { - val = resMgr->integerValue( "VISU", pref, 10 ); - aMainWindow->InvokeEvent( SVTK::SetSpeedIncrementEvent, &val ); + val = resMgr->integerValue( "VTKViewer", pref, 10 ); + viewWindow->InvokeEvent( SVTK::SetSpeedIncrementEvent, &val ); } else if ( pref == "spacemouse_func1_btn" ) { - val = resMgr->integerValue( "VISU", pref, 1 ); - aMainWindow->InvokeEvent( SVTK::SetSMDecreaseSpeedEvent, &val ); + val = resMgr->integerValue( "VTKViewer", pref, 1 ); + viewWindow->InvokeEvent( SVTK::SetSMDecreaseSpeedEvent, &val ); } else if ( pref == "spacemouse_func2_btn" ) { - val = resMgr->integerValue( "VISU", pref, 2 ); - aMainWindow->InvokeEvent( SVTK::SetSMIncreaseSpeedEvent, &val ); + val = resMgr->integerValue( "VTKViewer", pref, 2 ); + viewWindow->InvokeEvent( SVTK::SetSMIncreaseSpeedEvent, &val ); } else if ( pref == "spacemouse_func3_btn" ) { val = resMgr->integerValue( "VISU", pref, 10 ); - aMainWindow->InvokeEvent( VISU::SetSMDecreaseMagnificationEvent, &val ); + viewWindow->InvokeEvent( VISU::SetSMDecreaseMagnificationEvent, &val ); } else if ( pref == "spacemouse_func4_btn" ) { val = resMgr->integerValue( "VISU", pref, 11 ); - aMainWindow->InvokeEvent( VISU::SetSMIncreaseMagnificationEvent, &val ); + viewWindow->InvokeEvent( VISU::SetSMIncreaseMagnificationEvent, &val ); } else if ( pref == "spacemouse_func5_btn" ) { - val = resMgr->integerValue( "VISU", pref, 9 ); - aMainWindow->InvokeEvent( SVTK::SetSMDominantCombinedSwitchEvent, &val ); + val = resMgr->integerValue( "VTKViewer", pref, 9 ); + viewWindow->InvokeEvent( SVTK::SetSMDominantCombinedSwitchEvent, &val ); } } -void -VisuGUI_Module:: -setProperty( SVTK_ViewManager* vm, const QString& prop ) +void VisuGUI_Module::setProperty( SVTK_ViewManager* vm, const QString& prop ) { if ( !vm ) return; @@ -1013,43 +1031,37 @@ setProperty( SVTK_ViewManager* vm, const QString& prop ) setProperty( dynamic_cast( windows[i] ), prop ); } -void -VisuGUI_Module:: -preferencesChanged( const QString& group, const QString& pref ) +void VisuGUI_Module::preferencesChanged( const QString& group, const QString& pref ) { VisuGUI::preferencesChanged(group,pref); - if ( group == "VISU" && ( pref == "speed_increment" || pref == "spacemouse_func1_btn" || - pref == "spacemouse_func2_btn" || pref == "spacemouse_func3_btn" || - pref == "spacemouse_func4_btn" || pref == "spacemouse_func5_btn" ) ) { +// if ( group == "VISU" && ( pref == "speed_increment" || pref == "spacemouse_func1_btn" || +// pref == "spacemouse_func2_btn" || pref == "spacemouse_func3_btn" || +// pref == "spacemouse_func4_btn" || pref == "spacemouse_func5_btn" ) ) { - // update properties of VVTK view windows - SUIT_ViewManager* vm = getApp()->getViewManager( VVTK_Viewer::Type(), false ); - if ( vm ) - setProperty( dynamic_cast( vm ), pref ); - } +// // update properties of VVTK view windows +// SUIT_ViewManager* vm = getApp()->getViewManager( VVTK_Viewer::Type(), false ); +// if ( vm ) +// setProperty( dynamic_cast( vm ), pref ); +// } } //--------------------------------------------------------------- -SUIT_ViewManager* -VisuGUI_Module:: -getViewManager(const QString& theType, +SUIT_ViewManager* VisuGUI_Module::getViewManager(const QString& theType, const bool theIsCreate) { if (SUIT_ViewManager* aViewManager = VisuGUI::getViewManager(theType,theIsCreate)) return aViewManager; - if (theIsCreate && theType == VVTK_Viewer::Type()) - return onCreateViewManager(); +// if (theIsCreate && theType == VVTK_Viewer::Type()) +// return onCreateViewManager(); return NULL; } //--------------------------------------------------------------- -void -VisuGUI_Module:: -OnEditGaussPoints() +void VisuGUI_Module::OnEditGaussPoints() { VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects(this); if(aSelectionInfo.empty()) @@ -1059,10 +1071,13 @@ OnEditGaussPoints() Handle(SALOME_InteractiveObject) anIO = aSelectionItem.myIO; if(VISU::Prs3d_i* aPrs3d = VISU::GetPrs3dToModify(this, aSelectionItem.myObjectInfo.myBase)){ - // Create VVTK_ViewWindow, if it does not exist - if (VVTK_ViewWindow* aViewWindow = GetViewWindow(this)) { + if (SVTK_ViewWindow* aViewWindow = GetViewWindow(this)) { EditPrs3d(this, anIO, aPrs3d, aViewWindow); } + // Create VVTK_ViewWindow, if it does not exist +// if (VVTK_ViewWindow* aViewWindow = GetViewWindow(this)) { +// EditPrs3d(this, anIO, aPrs3d, aViewWindow); +// } } } @@ -1070,10 +1085,9 @@ OnEditGaussPoints() //--------------------------------------------------------------- namespace { - void - GetViewParams(VVTK_MainWindow* theViewWindow, - const char* theSuffix, - std::ostringstream& theStr) + /* void GetViewParams(VVTK_MainWindow* theViewWindow, + const char* theSuffix, + std::ostringstream& theStr) { vtkFloatingPointType aColor[3]; vtkRenderer* aRenderer = theViewWindow->getRenderer(); @@ -1110,12 +1124,11 @@ namespace Storable::DataToStream(theStr,(std::string("myScaleFactor") + theSuffix + "[1]").c_str(),aScaleFactor[1]); Storable::DataToStream(theStr,(std::string("myScaleFactor") + theSuffix + "[2]").c_str(),aScaleFactor[2]); } - + */ //--------------------------------------------------------------- - void - SetViewParams(VVTK_MainWindow* theViewWindow, - const char* theSuffix, - const Storable::TRestoringMap& theMap) + /* void SetViewParams(VVTK_MainWindow* theViewWindow, + const char* theSuffix, + const Storable::TRestoringMap& theMap) { vtkFloatingPointType aColor[3]; aColor[0] = Storable::FindValue(theMap,std::string("myColor") + theSuffix + ".R").toDouble(); @@ -1152,11 +1165,10 @@ namespace aScaleFactor[2] = Storable::FindValue(theMap,std::string("myScaleFactor") + theSuffix + "[2]").toDouble(); theViewWindow->SetScale(aScaleFactor); } - + */ //--------------------------------------------------------------- - void - GetViewParams(VVTK_MainWindow1* theViewWindow, - std::ostringstream& theStr) + /* void GetViewParams(VVTK_MainWindow1* theViewWindow, + std::ostringstream& theStr) { GetViewParams(theViewWindow,"1",theStr); @@ -1198,35 +1210,31 @@ namespace Storable::DataToStream(theStr,"mySegmentationMode",aSegmentationMode.c_str()); } } - + */ //--------------------------------------------------------------- - void - SetViewParams(VVTK_MainWindow1* theViewWindow, - const Storable::TRestoringMap& theMap) + /*void SetViewParams(VVTK_MainWindow1* theViewWindow, + const Storable::TRestoringMap& theMap) { SetViewParams(theViewWindow,"1",theMap); } - + */ //--------------------------------------------------------------- - void - GetViewParams(VVTK_MainWindow2* theViewWindow, - std::ostringstream& theStr) + /*void GetViewParams(VVTK_MainWindow2* theViewWindow, + std::ostringstream& theStr) { GetViewParams(theViewWindow,"2",theStr); } - void - SetViewParams(VVTK_MainWindow2* theViewWindow, - const Storable::TRestoringMap& theMap) + void SetViewParams(VVTK_MainWindow2* theViewWindow, + const Storable::TRestoringMap& theMap) { SetViewParams(theViewWindow,"2",theMap); } - + */ //--------------------------------------------------------------- - std::string - GetViewParams(VVTK_ViewWindow* theViewWindow) + /*std::string GetViewParams(VVTK_ViewWindow* theViewWindow) { std::ostringstream aStream; @@ -1241,7 +1249,7 @@ namespace return aStream.str(); } - + */ //--------------------------------------------------------------- struct TSelection { @@ -1266,8 +1274,7 @@ namespace myVisibleEntries(theVisibleEntries) {} - void - operator()(VISU_GaussPtsAct* theActor) + void operator()(VISU_GaussPtsAct* theActor) { if(theActor->GetVisibility()){ const Handle(SALOME_InteractiveObject)& anIO = theActor->getIO(); @@ -1276,9 +1283,8 @@ namespace } }; - void - GetGaussPointsSelection(VVTK_ViewWindow* theViewWindow, - TVisibleEntries& theVisibleEntries) + /*void GetGaussPointsSelection(SVTK_ViewWindow* theViewWindow, + TVisibleEntries& theVisibleEntries) { // First find all visible Gauss Points presentations vtkRenderer* aRenderer = theViewWindow->getRenderer(); @@ -1307,16 +1313,14 @@ namespace } } } - + */ //--------------------------------------------------------------- - inline - void - CreateReference(_PTR(Study) theStudyDocument, - _PTR(StudyBuilder) theStudyBuilder, - _PTR(SObject) theFatherSObject, - const string& theRefEntry, - const TSelection& theSelection) + inline void CreateReference(_PTR(Study) theStudyDocument, + _PTR(StudyBuilder) theStudyBuilder, + _PTR(SObject) theFatherSObject, + const string& theRefEntry, + const TSelection& theSelection) { _PTR(SObject) aNewObj = theStudyBuilder->NewObject(theFatherSObject); _PTR(SObject) aRefSObj = theStudyDocument->FindObjectID(theRefEntry); @@ -1335,11 +1339,10 @@ namespace //--------------------------------------------------------------- - void - SetGaussPointsSelection(VisuGUI* theModule, - VVTK_ViewWindow* theViewWindow, - _PTR(Study) theCStudy, - _PTR(SObject) theSObject) + /*void SetGaussPointsSelection(VisuGUI* theModule, + SVTK_ViewWindow* theViewWindow, + _PTR(Study) theCStudy, + _PTR(SObject) theSObject) { SVTK_Selector* aSelector = theViewWindow->GetSelector(); aSelector->ClearIObjects(); @@ -1354,7 +1357,7 @@ namespace PortableServer::ServantBase_var aServant = VISU::GetServant(anObject); if(VISU::Prs3d_i* aPrs3d = dynamic_cast(aServant.in())){ // To set visiblity - VISU::UpdateViewer(theModule, aPrs3d, /*disp_only = */anIsFirst, /*highlight = */false); + VISU::UpdateViewer(theModule, aPrs3d, anIsFirst, false); anIsFirst = false; // To update selection @@ -1378,12 +1381,11 @@ namespace aSelector->EndPickCallback(); // To invoke selection changed signal } - + */ //--------------------------------------------------------------- - void - OnStoreConfiguration(SalomeApp_Module* theModule, - bool theIsNew) + /*void OnStoreConfiguration(SalomeApp_Module* theModule, + bool theIsNew) { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(theModule)); if (CheckLock(aCStudy,GetDesktop(theModule))) @@ -1392,7 +1394,7 @@ namespace LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(theModule); SUIT_ViewManager* aViewManager = theModule->getApp()->activeViewManager(); - if(aViewManager->getType() == VVTK_Viewer::Type()){ + if(aViewManager->getType() == VVTK_Viewer::Type()){ SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); VVTK_ViewWindow* aViewWindow = dynamic_cast(aWindow); @@ -1466,49 +1468,42 @@ namespace //UpdateObjBrowser(theModule,true,aSObject); UpdateObjBrowser(theModule,true); } - } - } + } + }*/ //--------------------------------------------------------------- - template - void - SetMainWindowParams(VisuGUI* theModule, - _PTR(SObject) theSObject, - VVTK_ViewWindow* theViewWindow, - TMainWindow* theMainWindow) +/* template + void SetMainWindowParams(VisuGUI* theModule, + _PTR(SObject) theSObject, + VVTK_ViewWindow* theViewWindow, + TMainWindow* theMainWindow) { _PTR(Study) aCStudy = GetCStudy(GetAppStudy(theModule)); Storable::TRestoringMap aMap = Storable::GetStorableMap(theSObject); if(!aMap.empty()) SetViewParams(theMainWindow, aMap); - } + }*/ } //--------------------------------------------------------------- -void -VisuGUI_Module:: -OnSaveConfiguration() -{ - ::OnStoreConfiguration(this,true); -} +// void VisuGUI_Module::OnSaveConfiguration() +// { +// ::OnStoreConfiguration(this,true); +// } //--------------------------------------------------------------- -void -VisuGUI_Module:: -OnOverwriteConfiguration() -{ - ::OnStoreConfiguration(this,false); -} +// void VisuGUI_Module::OnOverwriteConfiguration() +// { +// ::OnStoreConfiguration(this,false); +// } //--------------------------------------------------------------- -void -VisuGUI_Module:: -OnRestoreConfiguration() +/*void VisuGUI_Module::OnRestoreConfiguration() { LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this); @@ -1524,9 +1519,8 @@ OnRestoreConfiguration() myConfigSObject = aSObject; Storable::TRestoringMap aMap = Storable::GetStorableMap(aSObject); if(!aMap.empty()){ - SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); - VVTK_ViewWindow* aViewWindow = dynamic_cast(aWindow); - + SUIT_ViewWindow* aViewWindow = aViewManager->getActiveView(); + Selection_Mode aSelectionMode = Storable::FindValue(aMap,"mySelectionMode").toInt(); SVTK_Selector* aSelector = aViewWindow->GetSelector(); aSelector->SetSelectionMode(aSelectionMode); @@ -1594,37 +1588,35 @@ OnRestoreConfiguration() SetGaussPointsSelection(this,aViewWindow,aCStudy,aSObject); } } -} +}*/ //--------------------------------------------------------------- -bool -VisuGUI_Module:: -eventFilter( QObject * theWatched, QEvent * theEvent ) -{ - bool aRet = VisuGUI::eventFilter(theWatched,theEvent); - if(theEvent->type() == QEvent::Show){ - if(SUIT_ViewManager* aViewManager = getViewManager(VVTK_Viewer::Type(),false)){ - SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); - VVTK_ViewWindow* aViewWindow = dynamic_cast(aWindow); - if(VVTK_MainWindow1* aMainWindow = aViewWindow->getMainWindow1()){ - SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); - if(theWatched == anInteractor){ - SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); - anInteractor->removeEventFilter(this); - } - } - if(VVTK_MainWindow2* aMainWindow = aViewWindow->getMainWindow2()){ - SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); - if(theWatched == aMainWindow->GetInteractor()){ - SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); - anInteractor->removeEventFilter(this); - } - } - } - } - return aRet; -} +//bool VisuGUI_Module::eventFilter( QObject * theWatched, QEvent * theEvent ) +//{ +// bool aRet = VisuGUI::eventFilter(theWatched,theEvent); +// if(theEvent->type() == QEvent::Show){ +// if(SUIT_ViewManager* aViewManager = getViewManager(VVTK_Viewer::Type(),false)){ +// SUIT_ViewWindow* aWindow = aViewManager->getActiveView(); +// VVTK_ViewWindow* aViewWindow = dynamic_cast(aWindow); +// if(VVTK_MainWindow1* aMainWindow = aViewWindow->getMainWindow1()){ +// SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); +// if(theWatched == anInteractor){ +// SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); +// anInteractor->removeEventFilter(this); +// } +// } +// if(VVTK_MainWindow2* aMainWindow = aViewWindow->getMainWindow2()){ +// SVTK_RenderWindowInteractor* anInteractor = aMainWindow->GetInteractor(); +// if(theWatched == aMainWindow->GetInteractor()){ +// SetMainWindowParams(this,myConfigSObject,aViewWindow,aMainWindow); +// anInteractor->removeEventFilter(this); +// } +// } +// } +// } +// return aRet; +//} const char gSeparator = '_'; // character used to separate parameter names @@ -1645,7 +1637,7 @@ void VisuGUI_Module::storeVisualParameters(int savePoint) _PTR(IParameters) ip = ClientFactory::getIParameters(ap); // viewers counters are used for storing view_numbers in IParameters - int svtkViewers( 0 ), vvtkViewers( 0 ), plotViewers( 0 ); + int svtkViewers( 0 ), /*vvtkViewers( 0 ),*/ plotViewers( 0 ); // componentName is used for encoding of entries when storing them in IParameters _PTR(SComponent) visuEng = ClientFindOrCreateVisuComponent( studyDS ); @@ -1657,7 +1649,7 @@ void VisuGUI_Module::storeVisualParameters(int savePoint) // saving VVTK viewer parameters. VVTK (Gauss Viewers) are NOT created by SalomeApp since // VVTK is declared in VISU, so here we store VVTK view window parameters. // VisuGUI_Module::restoreVisualParameters() creates VVTK_Views and restores its parameters. - ip->setProperty( "ActiveGaussViewer", "-1" ); + /* ip->setProperty( "ActiveGaussViewer", "-1" ); getApp()->viewManagers( VVTK_Viewer::Type(), lst ); for ( it = lst.begin(); it != lst.end(); it++ ) { if ( SUIT_ViewWindow* vwin = (*it)->getActiveView() ) { @@ -1674,7 +1666,7 @@ void VisuGUI_Module::storeVisualParameters(int savePoint) vvtkViewers++; } } - + */ // VISU module opens one SVTK viewer in activateModule(). This causes a bug in save-restore visual // parameters: it no SVTK view was saved, we need NOT any SVTK on restore. Here we store if any is open.. /* @@ -1686,17 +1678,17 @@ void VisuGUI_Module::storeVisualParameters(int savePoint) // main cycle to store parameters of displayed objects lst.clear(); getApp()->viewManagers( lst ); - vvtkViewers = svtkViewers = plotViewers = 0; + /*vvtkViewers = */svtkViewers = plotViewers = 0; for ( it = lst.begin(); it != lst.end(); it++ ) { SUIT_ViewManager* vman = *it; QString vType = vman->getType(); int* viewsCounter = vType == SVTK_Viewer::Type() ? &svtkViewers : - vType == VVTK_Viewer::Type() ? &vvtkViewers : + //vType == VVTK_Viewer::Type() ? &vvtkViewers : vType == SPlot2d_Viewer::Type() ? &plotViewers : 0; // saving VTK actors' properties - if ( vType == SVTK_Viewer::Type() || // processing SVTK and VVTK viewers in the same - vType == VVTK_Viewer::Type() ) { // way (VVTK_ViewWindow inherits SVTK_ViewWindow) + if ( vType == SVTK_Viewer::Type() /*|| // processing SVTK and VVTK viewers in the same + vType == VVTK_Viewer::Type()*/ ) { // way (VVTK_ViewWindow inherits SVTK_ViewWindow) QVector views = vman->getViews(); for ( int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++ ) { @@ -1783,8 +1775,8 @@ void VisuGUI_Module::storeVisualParameters(int savePoint) QList curves; QList::Iterator itCurve; plotVF->getCurves( curves ); - - Plot2d_Curve* curve; + + //Plot2d_Curve* curve; for ( itCurve = curves.begin(); itCurve != curves.end(); itCurve++ ) { if ( SPlot2d_Curve* sCurve = dynamic_cast( *itCurve ) ) { if ( sCurve->hasIO() ) { @@ -1853,24 +1845,24 @@ void VisuGUI_Module::restoreVisualParameters(int savePoint) std::vector paramValues = ip->getAllParameterValues( *entIt ); std::vector::iterator namesIt = paramNames.begin(); std::vector::iterator valuesIt = paramValues.begin(); - - if ( *entIt == "GaussViewer" ) { - // parameter names are view window's captions, values - visual parameters. - for ( ; namesIt != paramNames.end(); ++namesIt, ++valuesIt ) { - SUIT_ViewManager* vman = onCreateViewManager(); - SUIT_ViewWindow* vwin = vman->getActiveView(); - vwin->setWindowTitle( (*namesIt).c_str() ); - - // wait untill the window is really shown. This step fixes MANY bugs.. - while ( !vwin->isVisible() ) - qApp->processEvents(); - - vwin->setVisualParameters( (*valuesIt).c_str() ); - } - continue; // skip to next entry - } - - // entry is a normal entry - it should be "decoded" (setting base adress of component) + +// if ( *entIt == "GaussViewer" ) { +// // parameter names are view window's captions, values - visual parameters. +// for ( ; namesIt != paramNames.end(); ++namesIt, ++valuesIt ) { +// SUIT_ViewManager* vman = onCreateViewManager(); +// SUIT_ViewWindow* vwin = vman->getActiveView(); +// vwin->setWindowTitle( (*namesIt).c_str() ); + +// // wait untill the window is really shown. This step fixes MANY bugs.. +// while ( !vwin->isVisible() ) +// qApp->processEvents(); + +// vwin->setVisualParameters( (*valuesIt).c_str() ); +// } +// continue; // skip to next entry +// } + + // entry is a normal entry - it should be "decoded" (setting base adress of component) QString entry( ip->decodeEntry( *entIt ).c_str() ); //SRN: Added a check that the entry corresponds to Standard_Real object in the Study @@ -1890,8 +1882,8 @@ void VisuGUI_Module::restoreVisualParameters(int savePoint) // cout << " -- " << viewerType << ": entry = " << entry.latin1() << ", paramName = " << paramName << endl; - if ( viewerType == SVTK_Viewer::Type().toLatin1().data() || - viewerType == VVTK_Viewer::Type().toLatin1().data() ) { + if ( viewerType == SVTK_Viewer::Type().toLatin1().data() /*|| + viewerType == VVTK_Viewer::Type().toLatin1().data()*/ ) { // used as inner map key for locating the actor. QString viewerTypeIndex = QString( viewerType.c_str() ) + QString::number( viewIndex ); @@ -1966,7 +1958,12 @@ void VisuGUI_Module::restoreVisualParameters(int savePoint) if ( !prs ) continue; - prs->RemoveAllClippingPlanes(); + //prs->RemoveAllClippingPlanes(); + for (int i = prs->GetNumberOfClippingPlanes() - 1; i >= 0 ; i--) { + OrientedPlane* aPlane = dynamic_cast(prs->GetClippingPlane(i)); + if (aPlane) + prs->RemoveClippingPlane(i); + } if ( val != "Off" ) { QStringList vals = val.split( gDigitsSep, QString::SkipEmptyParts ); if ( vals.count() == 6 ) { // format check: 6 float values @@ -2012,8 +2009,8 @@ void VisuGUI_Module::restoreVisualParameters(int savePoint) SUIT_ViewModel* vmodel = (*it)->getViewModel(); if ( !vmodel ) continue; - if ( vmodel->getType() == SVTK_Viewer::Type() || // processing SVTK and VVTK viewers - vmodel->getType() == VVTK_Viewer::Type() ) { // in the same way + if ( vmodel->getType() == SVTK_Viewer::Type() /*|| // processing SVTK and VVTK viewers + vmodel->getType() == VVTK_Viewer::Type()*/ ) { // in the same way SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView(); vtkView->getRenderer()->ResetCameraClippingRange(); vtkView->Repaint(); @@ -2039,19 +2036,19 @@ void VisuGUI_Module::restoreVisualParameters(int savePoint) */ // if active Gauss Viewer is set ( != -1) then raise the gauss view window. - bool ok; - QString activeGaussViewerStr = ip->getProperty( "ActiveGaussViewer" ).c_str(); - int activeGaussViewer = activeGaussViewerStr.toInt( &ok ); - if ( ok && activeGaussViewer != -1 ) { - lst.clear(); - getApp()->viewManagers( VVTK_Viewer::Type(), lst ); - if ( activeGaussViewer >= 0 && activeGaussViewer < lst.count() ) { - SUIT_ViewWindow* activeView = lst.at( activeGaussViewer )->getActiveView(); - if ( activeView ) { - activeView->activateWindow(); - //activeView->setFocus(); - } - } - } +// bool ok; +// QString activeGaussViewerStr = ip->getProperty( "ActiveGaussViewer" ).c_str(); +// int activeGaussViewer = activeGaussViewerStr.toInt( &ok ); +// if ( ok && activeGaussViewer != -1 ) { +// lst.clear(); +// getApp()->viewManagers( VVTK_Viewer::Type(), lst ); +// if ( activeGaussViewer >= 0 && activeGaussViewer < lst.count() ) { +// SUIT_ViewWindow* activeView = lst.at( activeGaussViewer )->getActiveView(); +// if ( activeView ) { +// activeView->activateWindow(); +// //activeView->setFocus(); +// } +// } +// } } diff --git a/src/VISUGUI/VisuGUI_Module.h b/src/VISUGUI/VisuGUI_Module.h index 02abf76e..606ff7d4 100644 --- a/src/VISUGUI/VisuGUI_Module.h +++ b/src/VISUGUI/VisuGUI_Module.h @@ -50,9 +50,9 @@ public: virtual ~VisuGUI_Module(); - virtual - bool - eventFilter( QObject * theWatched, QEvent * theEvent ); + // virtual + // bool + // eventFilter( QObject * theWatched, QEvent * theEvent ); //! Redifined method of the module initializing. virtual @@ -81,16 +81,12 @@ public: void restoreVisualParameters(int savePoint); -public slots: + //public slots: //! Reimplemented method of the module deactivation. - virtual - bool - deactivateModule( SUIT_Study* ); + // virtual bool deactivateModule( SUIT_Study* ); //! Reimplemented method of the module activation. - virtual - bool - activateModule( SUIT_Study* ); + // virtual bool activateModule( SUIT_Study* ); protected: //! Create preferences for Gauss Points presentation. @@ -123,8 +119,8 @@ protected: createRecorderPreferences(); protected slots: - SUIT_ViewManager* - onCreateViewManager(); + // SUIT_ViewManager* + // onCreateViewManager(); void OnCreateGaussPoints(); @@ -132,8 +128,8 @@ protected slots: void OnViewCreated(SUIT_ViewWindow*); - void - OnViewManagerAdded(SUIT_ViewManager*); + // void + //OnViewManagerAdded(SUIT_ViewManager*); //! Reimplemented method of the Gauss Points edition. virtual @@ -141,25 +137,26 @@ protected slots: OnEditGaussPoints(); //! Virtual method of saving configuration. - virtual - void - OnSaveConfiguration(); + // virtual + // void + // OnSaveConfiguration(); //! Virtual method of overwriting configuration. - virtual - void - OnOverwriteConfiguration(); + // virtual + // void + // OnOverwriteConfiguration(); //! Virtual method of restoring configuration. - virtual - void - OnRestoreConfiguration(); + // virtual + // void + // OnRestoreConfiguration(); protected: _PTR(SObject) myConfigSObject; void setProperty( SVTK_ViewWindow*, const QString& ); // set a property (speed_increment, etc ) for SVTK ViewWindow void setProperty( SVTK_ViewManager*, const QString& ); // set a property for SVTK ViewWindow // set only 1 property for all ViewWindows of given view manager + }; #endif diff --git a/src/VISUGUI/VisuGUI_Prs3dDlg.cxx b/src/VISUGUI/VisuGUI_Prs3dDlg.cxx index d8110578..54053865 100644 --- a/src/VISUGUI/VisuGUI_Prs3dDlg.cxx +++ b/src/VISUGUI/VisuGUI_Prs3dDlg.cxx @@ -42,6 +42,7 @@ #include "VISU_ScalarMapAct.h" #include "VISU_ScalarMap_i.hh" #include "VISU_Result_i.hh" +#include "VISU_Prs3dUtils.hh" #include "LightApp_Application.h" @@ -87,9 +88,9 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent) setWindowTitle(tr("TIT_TEXT_PREF")); setSizeGripEnabled(TRUE); - QVBoxLayout* TopLayout = new QVBoxLayout(this); - TopLayout->setSpacing(6); - TopLayout->setMargin(11); + QVBoxLayout* aMainLay = new QVBoxLayout(this); + aMainLay->setSpacing(6); + aMainLay->setMargin(11); // "Title" grp QGroupBox* aTitleGrp = new QGroupBox ( tr("LBL_TITLE"), this); @@ -109,7 +110,7 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent) myTitleFont = new SVTK_FontWidget (aHBox); aHBLay->addWidget( myTitleFont ); - TopLayout->addWidget(aTitleGrp); + aMainLay->addWidget(aTitleGrp); // "Labels" grp QGroupBox* aLabelsGrp = new QGroupBox (tr("LBL_LABELS"), this); @@ -125,7 +126,7 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent) myLabelFont = new SVTK_FontWidget (aHBox); aHBLay->addWidget( myLabelFont ); - TopLayout->addWidget(aLabelsGrp); + aMainLay->addWidget(aLabelsGrp); // Common buttons =========================================================== QGroupBox* GroupButtons = new QGroupBox( this ); @@ -151,7 +152,7 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent) buttonHelp->setAutoDefault( TRUE ); GroupButtonsLayout->addWidget( buttonHelp, 0, 3 ); - TopLayout->addWidget( GroupButtons ); + aMainLay->addWidget( GroupButtons ); connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept())); connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); @@ -260,7 +261,8 @@ void VisuGUI_TextPrefDlg::keyPressEvent( QKeyEvent* e ) Constructor */ VisuGUI_BarPrefDlg::VisuGUI_BarPrefDlg( QWidget* parent ) - : QDialog( parent ) + : QDialog( parent ), + myOrientation( 1 ) { setModal( true ); setWindowTitle( tr( "TIT_BAR_PREF" ) ); @@ -268,109 +270,79 @@ VisuGUI_BarPrefDlg::VisuGUI_BarPrefDlg( QWidget* parent ) QString propertyName = QString( "scalar_bar_vertical_" ); - myTitleWidth = myTitleHeight = myLabelWidth = myLabelHeight = myBarWidth = myBarHeight = 0; + myTitleSize = myLabelSize = myBarWidth = myBarHeight = 0; myUnits = true; - myUnitsFormat = "%-#6.3g"; + myPrecision = 3; - QVBoxLayout* TopLayout = new QVBoxLayout( this ); - TopLayout->setSpacing( 6 ); - TopLayout->setMargin( 11 ); + QVBoxLayout* aMainLay = new QVBoxLayout( this ); + aMainLay->setSpacing( 5 ); + aMainLay->setMargin( 5 ); + + // dimensions + + QGroupBox* aDimGrp = new QGroupBox( this ); + QGridLayout* aDimGrpLay = new QGridLayout( aDimGrp ); + aDimGrpLay->setSpacing( 5 ); + aDimGrpLay->setMargin( 5 ); + + myTitleSizeSpin = new QSpinBox( aDimGrp ); + myTitleSizeSpin->setRange( 0, 100 ); + myTitleSizeSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myTitleSizeSpin->setMinimumWidth( 70 ); + myTitleSizeSpin->setValue( 0 ); + myTitleSizeSpin->setSpecialValueText( tr( "AUTO" ) ); + QLabel* aTitleSizeLbl = new QLabel( tr( "LBL_TITLE_W" ), aDimGrp ); + + myLabelSizeSpin = new QSpinBox( aDimGrp ); + myLabelSizeSpin->setRange( 0, 100 ); + myLabelSizeSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myLabelSizeSpin->setMinimumWidth( 70 ); + myLabelSizeSpin->setValue( 0 ); + myLabelSizeSpin->setSpecialValueText( tr( "AUTO" ) ); + QLabel* aLabelSizeLbl = new QLabel( tr( "LBL_LABEL_W" ), aDimGrp ); + + myBarWidthSpin = new QSpinBox( aDimGrp ); + myBarWidthSpin->setRange( 0, 100 ); + myBarWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myBarWidthSpin->setMinimumWidth( 70 ); + myBarWidthSpin->setValue( 0 ); + myBarWidthSpin->setSpecialValueText( tr( "AUTO" ) ); + QLabel* aBarWidthLbl = new QLabel( tr( "LBL_BAR_W" ), aDimGrp ); + + myBarHeightSpin = new QSpinBox( aDimGrp ); + myBarHeightSpin->setRange( 0, 100 ); + myBarHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myBarHeightSpin->setMinimumWidth( 70 ); + myBarHeightSpin->setValue( 0 ); + myBarHeightSpin->setSpecialValueText( tr( "AUTO" ) ); + QLabel* aBarHeightLbl = new QLabel( tr( "LBL_BAR_H" ), aDimGrp ); + + // format and units + + QLabel* aPrecLbl = new QLabel( tr( "PRECISION" ), aDimGrp ); + myPrecisionSpin = new QSpinBox( aDimGrp ); + myPrecisionSpin->setRange( 1, 100 ); + + myUnitsChk = new QCheckBox( tr( "LBL_SHOW_UNITS" ), aDimGrp ); + + // layout + + aDimGrpLay->addWidget( aTitleSizeLbl, 0, 0 ); + aDimGrpLay->addWidget( myTitleSizeSpin, 0, 1 ); + aDimGrpLay->addWidget( aLabelSizeLbl, 0, 2 ); + aDimGrpLay->addWidget( myLabelSizeSpin, 0, 3 ); + aDimGrpLay->addWidget( aBarWidthLbl, 1, 0 ); + aDimGrpLay->addWidget( myBarWidthSpin, 1, 1 ); + aDimGrpLay->addWidget( aBarHeightLbl, 1, 2 ); + aDimGrpLay->addWidget( myBarHeightSpin, 1, 3 ); + aDimGrpLay->addWidget( aPrecLbl, 2, 0 ); + aDimGrpLay->addWidget( myPrecisionSpin, 2, 1 ); + aDimGrpLay->addWidget( myUnitsChk, 2, 2, 1, 2 ); - QGroupBox* WidthHeightGroup = new QGroupBox ( this ); - QGridLayout* WidthHeightGroupLayout = new QGridLayout( WidthHeightGroup ); - WidthHeightGroupLayout->setAlignment( Qt::AlignTop ); - WidthHeightGroupLayout->setSpacing( 6 ); - WidthHeightGroupLayout->setMargin( 11 ); - - TitleWidthSpin = new QSpinBox( WidthHeightGroup ); - TitleWidthSpin->setRange( 0, 100 ); - TitleWidthSpin->setSingleStep( 1 ); - TitleWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - TitleWidthSpin->setMinimumWidth( 70 ); - TitleWidthSpin->setValue( 0 ); - TitleWidthSpin->setSpecialValueText( tr( "AUTO" ) ); - QLabel* LabelTitleWidth = new QLabel( tr( "LBL_TITLE_W" ), WidthHeightGroup ); - LabelTitleWidth->setBuddy( TitleWidthSpin ); - - TitleHeightSpin = new QSpinBox( WidthHeightGroup ); - TitleHeightSpin->setRange( 0, 100 ); - TitleHeightSpin->setSingleStep( 1 ); - TitleHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - TitleHeightSpin->setMinimumWidth( 70 ); - TitleHeightSpin->setValue( 0 ); - TitleHeightSpin->setSpecialValueText( tr( "AUTO" ) ); - QLabel* LabelTitleHeight = new QLabel( tr( "LBL_TITLE_H" ), WidthHeightGroup ); - LabelTitleHeight->setBuddy( TitleHeightSpin ); - - CBUnits = new QCheckBox( tr( "LBL_SHOW_UNITS" ), WidthHeightGroup ); - CBUnits->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - - LabelWidthSpin = new QSpinBox( WidthHeightGroup ); - LabelWidthSpin->setRange( 0, 100 ); - LabelWidthSpin->setSingleStep( 1 ); - LabelWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - LabelWidthSpin->setMinimumWidth( 70 ); - LabelWidthSpin->setValue( 0 ); - LabelWidthSpin->setSpecialValueText( tr( "AUTO" ) ); - QLabel* LabelLabelWidth = new QLabel( tr( "LBL_LABEL_W" ), WidthHeightGroup ); - LabelLabelWidth->setBuddy( LabelWidthSpin ); - - LabelHeightSpin = new QSpinBox( WidthHeightGroup ); - LabelHeightSpin->setRange( 0, 100 ); - LabelHeightSpin->setSingleStep( 1 ); - LabelHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - LabelHeightSpin->setMinimumWidth( 70 ); - LabelHeightSpin->setValue( 0 ); - LabelHeightSpin->setSpecialValueText( tr( "AUTO" ) ); - QLabel* LabelLabelHeight = new QLabel( tr( "LBL_LABEL_H" ), WidthHeightGroup ); - LabelLabelHeight->setBuddy( LabelHeightSpin ); - - UnitsEdit = new QLineEdit( WidthHeightGroup ); - UnitsEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - UnitsEdit->setMinimumWidth( 35 ); - UnitsEdit->setText( myUnitsFormat ); - QLabel* UnitsLabel = new QLabel( tr( "LBL_UNITS_FORMAT" ), WidthHeightGroup ); - UnitsLabel->setBuddy( UnitsEdit ); - - BarWidthSpin = new QSpinBox( WidthHeightGroup ); - BarWidthSpin->setRange( 0, 100 ); - BarWidthSpin->setSingleStep( 1 ); - BarWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - BarWidthSpin->setMinimumWidth( 70 ); - BarWidthSpin->setValue( 0 ); - BarWidthSpin->setSpecialValueText( tr( "AUTO" ) ); - QLabel* LabelBarWidth = new QLabel( tr( "LBL_BAR_W" ), WidthHeightGroup ); - LabelBarWidth->setBuddy( BarWidthSpin ); - - BarHeightSpin = new QSpinBox( WidthHeightGroup ); - BarHeightSpin->setRange( 0, 100 ); - BarHeightSpin->setSingleStep( 1 ); - BarHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - BarHeightSpin->setMinimumWidth( 70 ); - BarHeightSpin->setValue( 0 ); - BarHeightSpin->setSpecialValueText( tr( "AUTO" ) ); - QLabel* LabelBarHeight = new QLabel( tr( "LBL_BAR_H" ), WidthHeightGroup ); - LabelBarHeight->setBuddy( BarHeightSpin ); - - WidthHeightGroupLayout->addWidget( LabelTitleWidth, 0, 0 ); - WidthHeightGroupLayout->addWidget( TitleWidthSpin, 0, 1 ); - WidthHeightGroupLayout->addWidget( LabelTitleHeight, 0, 2 ); - WidthHeightGroupLayout->addWidget( TitleHeightSpin, 0, 3 ); - WidthHeightGroupLayout->addWidget( CBUnits, 0, 4, 1, 2 ); - WidthHeightGroupLayout->addWidget( LabelLabelWidth, 1, 0 ); - WidthHeightGroupLayout->addWidget( LabelWidthSpin, 1, 1 ); - WidthHeightGroupLayout->addWidget( LabelLabelHeight, 1, 2 ); - WidthHeightGroupLayout->addWidget( LabelHeightSpin, 1, 3 ); - WidthHeightGroupLayout->addWidget( UnitsLabel, 1, 4 ); - WidthHeightGroupLayout->addWidget( UnitsEdit, 1, 5 ); - WidthHeightGroupLayout->addWidget( LabelBarWidth, 2, 0 ); - WidthHeightGroupLayout->addWidget( BarWidthSpin, 2, 1 ); - WidthHeightGroupLayout->addWidget( LabelBarHeight, 2, 2 ); - WidthHeightGroupLayout->addWidget( BarHeightSpin, 2, 3 ); - - TopLayout->addWidget( WidthHeightGroup ); + aMainLay->addWidget( aDimGrp ); // Common buttons =========================================================== + QGroupBox* GroupButtons = new QGroupBox( this ); QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons ); GroupButtonsLayout->setAlignment( Qt::AlignTop ); @@ -393,63 +365,66 @@ VisuGUI_BarPrefDlg::VisuGUI_BarPrefDlg( QWidget* parent ) GroupButtonsLayout->addWidget( buttonCancel ); GroupButtonsLayout->addWidget( buttonHelp ); - TopLayout->addWidget( GroupButtons ); + aMainLay->addWidget( GroupButtons ); connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) ); connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( onHelp() ) ); - connect( TitleWidthSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); - connect( TitleHeightSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); - connect( LabelWidthSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); - connect( LabelHeightSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); - connect( BarWidthSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); - connect( BarHeightSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); - connect( CBUnits, SIGNAL( toggled( bool ) ), this, SIGNAL( updatePreview() ) ); - connect( UnitsEdit, SIGNAL( editingFinished() ), this, SIGNAL( updatePreview() ) ); + connect( myTitleSizeSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); + connect( myLabelSizeSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); + connect( myBarWidthSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); + connect( myBarHeightSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); + connect( myUnitsChk, SIGNAL( toggled( bool ) ), this, SIGNAL( updatePreview() ) ); + connect( myPrecisionSpin, SIGNAL( valueChanged( int ) ), this, SIGNAL( updatePreview() ) ); } //---------------------------------------------------------------------------- -void VisuGUI_BarPrefDlg::setRatios( int titleRatioWidth, int titleRatioHeight, - int labelRatioWidth, int labelRatioHeight, - int barRatioWidth, int barRatioHeight ) +void VisuGUI_BarPrefDlg::setRatios( int titleRatioSize, int labelRatioWidth, + int barRatioWidth, int barRatioHeight ) { - TitleWidthSpin->setValue( myTitleWidth = titleRatioWidth ); - TitleHeightSpin->setValue( myTitleHeight = titleRatioHeight ); - LabelWidthSpin->setValue( myLabelWidth = labelRatioWidth ); - LabelHeightSpin->setValue( myLabelHeight = labelRatioHeight ); - BarWidthSpin->setValue( myBarWidth = barRatioWidth ); - BarHeightSpin->setValue( myBarHeight = barRatioHeight ); + myTitleSizeSpin->setValue( myTitleSize = titleRatioSize ); + myLabelSizeSpin->setValue( myLabelSize = labelRatioWidth ); + myBarWidthSpin->setValue( myBarWidth = barRatioWidth ); + myBarHeightSpin->setValue( myBarHeight = barRatioHeight ); } //---------------------------------------------------------------------------- -void VisuGUI_BarPrefDlg::getRatios( int& titleRatioWidth, int& titleRatioHeight, - int& labelRatioWidth, int& labelRatioHeight, - int& barRatioWidth, int& barRatioHeight ) +void VisuGUI_BarPrefDlg::getRatios( int& titleRatioSize, int& labelRatioWidth, + int& barRatioWidth, int& barRatioHeight ) { - titleRatioWidth = TitleWidthSpin->value(); - titleRatioHeight = TitleHeightSpin->value(); - labelRatioWidth = LabelWidthSpin->value(); - labelRatioHeight = LabelHeightSpin->value(); - barRatioWidth = BarWidthSpin->value(); - barRatioHeight = BarHeightSpin->value(); + titleRatioSize = myTitleSizeSpin->value(); + labelRatioWidth = myLabelSizeSpin->value(); + barRatioWidth = myBarWidthSpin->value(); + barRatioHeight = myBarHeightSpin->value(); } //---------------------------------------------------------------------------- -void VisuGUI_BarPrefDlg::setLabelsFormat( const QString& format ) +void VisuGUI_BarPrefDlg::setLabelsPrecision( const int p ) { - UnitsEdit->setText( myUnitsFormat = format ); + myPrecisionSpin->setValue( p ); } +//---------------------------------------------------------------------------- +int VisuGUI_BarPrefDlg::getLabelsPrecision() const +{ + return myPrecisionSpin->value(); +} //---------------------------------------------------------------------------- -QString VisuGUI_BarPrefDlg::getLabelsFormat() +void VisuGUI_BarPrefDlg::setOrientation( const int ori ) { - return UnitsEdit->text(); + myOrientation = ori; } +//---------------------------------------------------------------------------- + +int VisuGUI_BarPrefDlg::getOrientation() const +{ + return myOrientation; +} //---------------------------------------------------------------------------- void VisuGUI_BarPrefDlg::onHelp() @@ -473,14 +448,14 @@ void VisuGUI_BarPrefDlg::onHelp() //---------------------------------------------------------------------------- void VisuGUI_BarPrefDlg::setUnitsVisible(bool isVisible) { - CBUnits->setChecked( myUnits = isVisible ); + myUnitsChk->setChecked( myUnits = isVisible ); } //---------------------------------------------------------------------------- bool VisuGUI_BarPrefDlg::isUnitsVisible() { - return CBUnits->isChecked(); + return myUnitsChk->isChecked(); } @@ -490,14 +465,12 @@ bool VisuGUI_BarPrefDlg::isUnitsVisible() */ void VisuGUI_BarPrefDlg::reject() { - TitleWidthSpin->setValue( myTitleWidth ); - TitleHeightSpin->setValue( myTitleHeight ); - LabelWidthSpin->setValue( myLabelWidth ); - LabelHeightSpin->setValue( myLabelHeight ); - BarWidthSpin->setValue( myBarWidth ); - BarHeightSpin->setValue( myBarHeight ); - CBUnits->setChecked( myUnits ); - UnitsEdit->setText( myUnitsFormat ); + myTitleSizeSpin->setValue( myTitleSize ); + myLabelSizeSpin->setValue( myLabelSize ); + myBarWidthSpin->setValue( myBarWidth ); + myBarHeightSpin->setValue( myBarHeight ); + myUnitsChk->setChecked( myUnits ); + myPrecisionSpin->setValue( myPrecision ); QDialog::reject(); } @@ -509,39 +482,26 @@ void VisuGUI_BarPrefDlg::reject() void VisuGUI_BarPrefDlg::accept() { QString dVal; - dVal.sprintf( UnitsEdit->text().toLatin1().data(), 1.1 ); - if ( dVal.toDouble() == 0. ) { - SUIT_MessageBox::warning( this, tr( "WRN_VISU" ), tr ( "MSG_LABEL_FORMAT" ) ); + int aBWH = myOrientation == 1 ? myBarWidthSpin->value() : myBarHeightSpin->value(); + if( ( myLabelSizeSpin->value()+ aBWH ) > 100 ) + { + SUIT_MessageBox::warning( this, tr( "WRN_VISU" ), tr( "MSG_BIG_SCALE" ) ); + return; } - else { - if( - ( - TitleWidthSpin->value()+ - LabelWidthSpin->value()+ - BarWidthSpin->value() - > 100 - ) || - ( - TitleHeightSpin->value()+ - LabelHeightSpin->value()+ - BarHeightSpin->value() - > 100 - ) - ) { - SUIT_MessageBox::warning( this, tr( "WRN_VISU" ), tr( "MSG_BIG_SCALE" ) ); - } - else { - myTitleWidth = TitleWidthSpin->value(); - myTitleHeight = TitleHeightSpin->value(); - myLabelWidth = LabelWidthSpin->value(); - myLabelHeight = LabelHeightSpin->value(); - myBarWidth = BarWidthSpin->value(); - myBarHeight = BarHeightSpin->value(); - myUnits = CBUnits->isChecked(); - myUnitsFormat = UnitsEdit->text(); - QDialog::accept(); - } + + if ( myTitleSizeSpin->value() > 100 ) + { + SUIT_MessageBox::warning( this, tr( "WRN_VISU" ), tr( "MSG_BIG_SCALE_TLT" ) ); + return; } + + myTitleSize = myTitleSizeSpin->value(); + myLabelSize = myLabelSizeSpin->value(); + myBarWidth = myBarWidthSpin->value(); + myBarHeight = myBarHeightSpin->value(); + myUnits = myUnitsChk->isChecked(); + myPrecision = myPrecisionSpin->value(); + QDialog::accept(); } @@ -583,10 +543,8 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) myVerY = aResourceMgr->doubleValue("VISU", propertyName + "y", 0.); myVerW = aResourceMgr->doubleValue("VISU", propertyName + "width", 0.); myVerH = aResourceMgr->doubleValue("VISU", propertyName + "height",0.); - myVerTW = aResourceMgr->integerValue("VISU", propertyName + "title_width", 0); - myVerTH = aResourceMgr->integerValue("VISU", propertyName + "title_height",0); - myVerLW = aResourceMgr->integerValue("VISU", propertyName + "label_width", 0); - myVerLH = aResourceMgr->integerValue("VISU", propertyName + "label_height",0); + myVerTS = aResourceMgr->integerValue("VISU", propertyName + "title_size", 0); + myVerLS = aResourceMgr->integerValue("VISU", propertyName + "label_size", 0); myVerBW = aResourceMgr->integerValue("VISU", propertyName + "bar_width", 0); myVerBH = aResourceMgr->integerValue("VISU", propertyName + "bar_height",0); @@ -595,27 +553,21 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) myHorY = aResourceMgr->doubleValue("VISU", propertyName + "y", 0.); myHorW = aResourceMgr->doubleValue("VISU", propertyName + "width", 0.); myHorH = aResourceMgr->doubleValue("VISU", propertyName + "height",0.); - myHorTW = aResourceMgr->integerValue("VISU", propertyName + "title_width", 0); - myHorTH = aResourceMgr->integerValue("VISU", propertyName + "title_height",0); - myHorLW = aResourceMgr->integerValue("VISU", propertyName + "label_width", 0); - myHorLH = aResourceMgr->integerValue("VISU", propertyName + "label_height",0); + myHorTS = aResourceMgr->integerValue("VISU", propertyName + "title_size", 0); + myHorLS = aResourceMgr->integerValue("VISU", propertyName + "label_size", 0); myHorBW = aResourceMgr->integerValue("VISU", propertyName + "bar_width", 0); myHorBH = aResourceMgr->integerValue("VISU", propertyName + "bar_height",0); - aMainLayout->setSpacing(6); - //setMargin(11); + //aMainLayout->setSpacing(6); // Range ============================================================ RangeGroup = new QButtonGroup ( this ); QGroupBox* aGB = new QGroupBox( tr("SCALAR_RANGE_GRP"),this ); aMainLayout->addWidget( aGB ); - //RangeGroup->setColumnLayout(0, Qt::Vertical ); - //RangeGroup->layout()->setSpacing( 0 ); - //RangeGroup->layout()->setMargin( 0 ); QGridLayout* RangeGroupLayout = new QGridLayout( aGB ); RangeGroupLayout->setAlignment( Qt::AlignTop ); - RangeGroupLayout->setSpacing( 6 ); - RangeGroupLayout->setMargin( 11 ); + //RangeGroupLayout->setSpacing( 6 ); + //RangeGroupLayout->setMargin( 11 ); myModeLbl = new QLabel("Scalar Mode", aGB); @@ -632,42 +584,39 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) MinEdit = new QLineEdit( aGB ); MinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - MinEdit->setMinimumWidth( 70 ); + //MinEdit->setMinimumWidth( 70 ); MinEdit->setValidator( new QDoubleValidator(this) ); MinEdit->setText( "0.0" ); QLabel* MinLabel = new QLabel (tr("LBL_MIN"), aGB); + MinLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); MinLabel->setBuddy(MinEdit); MaxEdit = new QLineEdit( aGB ); MaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - MaxEdit->setMinimumWidth( 70 ); + //MaxEdit->setMinimumWidth( 70 ); MaxEdit->setValidator( new QDoubleValidator(this) ); MaxEdit->setText( "0.0" ); QLabel* MaxLabel = new QLabel (tr("LBL_MAX"), aGB); + MaxLabel->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) ); MaxLabel->setBuddy(MaxEdit); - RangeGroupLayout->addWidget( myModeLbl, 0, 0 ); - RangeGroupLayout->addWidget( myModeCombo, 0, 1, 1, 4); - RangeGroupLayout->addWidget( CBLog, 1, 0, 1, 4); - RangeGroupLayout->addWidget( RBFrange, 2, 0, 1, 2); - RangeGroupLayout->addWidget( RBIrange, 2, 2, 1, 2); - RangeGroupLayout->addWidget( MinLabel, 3, 0 ); - RangeGroupLayout->addWidget( MinEdit, 3, 1 ); - RangeGroupLayout->addWidget( MaxLabel, 3, 2 ); - RangeGroupLayout->addWidget( MaxEdit, 3, 3 ); - - //TopLayout->addWidget( RangeGroup ); + RangeGroupLayout->addWidget( myModeLbl, 0, 0, 1, 1 ); + RangeGroupLayout->addWidget( myModeCombo, 0, 1, 1, 2); + RangeGroupLayout->addWidget( CBLog, 0, 3, 1, 1); + RangeGroupLayout->addWidget( RBFrange, 1, 0, 1, 2); + RangeGroupLayout->addWidget( RBIrange, 1, 2, 1, 2); + RangeGroupLayout->addWidget( MinLabel, 2, 0 ); + RangeGroupLayout->addWidget( MinEdit, 2, 1 ); + RangeGroupLayout->addWidget( MaxLabel, 2, 2 ); + RangeGroupLayout->addWidget( MaxEdit, 2, 3 ); // Colors and Labels ======================================================== QGroupBox* ColLabGroup = new QGroupBox (tr("COLORS_LABELS_GRP"), this); aMainLayout->addWidget( ColLabGroup ); - //ColLabGroup->setColumnLayout(0, Qt::Vertical ); - //ColLabGroup->layout()->setSpacing( 0 ); - //ColLabGroup->layout()->setMargin( 0 ); QGridLayout* ColLabGroupLayout = new QGridLayout( ColLabGroup ); ColLabGroupLayout->setAlignment( Qt::AlignTop ); - ColLabGroupLayout->setSpacing( 6 ); - ColLabGroupLayout->setMargin( 11 ); + //ColLabGroupLayout->setSpacing( 6 ); + //ColLabGroupLayout->setMargin( 11 ); QLabel* ColorLabel = new QLabel (tr("LBL_NB_COLORS"), ColLabGroup); ColorSpin = new QSpinBox( ColLabGroup ); @@ -675,7 +624,7 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) ColorSpin->setMaximum( 256 ); ColorSpin->setSingleStep( 1 ); ColorSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - ColorSpin->setMinimumWidth( 70 ); + //ColorSpin->setMinimumWidth( 70 ); ColorSpin->setValue( 64 ); QLabel* LabelLabel = new QLabel (tr("LBL_NB_LABELS"), ColLabGroup); @@ -685,7 +634,7 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) LabelSpin->setSingleStep( 1 ); LabelSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - LabelSpin->setMinimumWidth( 70 ); + //LabelSpin->setMinimumWidth( 70 ); LabelSpin->setValue( 5 ); ColLabGroupLayout->addWidget( ColorLabel, 0, 0); @@ -693,19 +642,14 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) ColLabGroupLayout->addWidget( LabelLabel, 0, 2); ColLabGroupLayout->addWidget( LabelSpin, 0, 3); - //TopLayout->addWidget( ColLabGroup ); - // Orientation ========================================================== QButtonGroup* OrientGroup = new QButtonGroup ( this ); QGroupBox* OrientGB = new QGroupBox( tr("ORIENTATION_GRP"),this ); aMainLayout->addWidget( OrientGB ); - //OrientGroup->setColumnLayout(0, Qt::Vertical ); - //OrientGroup->layout()->setSpacing( 0 ); - //OrientGroup->layout()->setMargin( 0 ); QGridLayout* OrientGroupLayout = new QGridLayout( OrientGB ); OrientGroupLayout->setAlignment( Qt::AlignTop ); - OrientGroupLayout->setSpacing( 6 ); - OrientGroupLayout->setMargin( 11 ); + //OrientGroupLayout->setSpacing( 6 ); + //OrientGroupLayout->setMargin( 11 ); RBvert = new QRadioButton (tr("VERTICAL_BTN"), OrientGB); RBvert->setChecked( true ); @@ -715,63 +659,53 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) OrientGroupLayout->addWidget( RBvert, 0, 0 ); OrientGroupLayout->addWidget( RBhori, 0, 1 ); - // TopLayout->addWidget( OrientGroup ); - // Origin =============================================================== QGroupBox* OriginGroup = new QGroupBox (tr("ORIGIN_GRP"), this); aMainLayout->addWidget( OriginGroup ); - //OriginGroup->setColumnLayout(0, Qt::Vertical ); - //OriginGroup->layout()->setSpacing( 0 ); - // OriginGroup->layout()->setMargin( 0 ); QGridLayout* OriginGroupLayout = new QGridLayout( OriginGroup ); OriginGroupLayout->setAlignment( Qt::AlignTop ); - OriginGroupLayout->setSpacing( 6 ); - OriginGroupLayout->setMargin( 11 ); + //OriginGroupLayout->setSpacing( 6 ); + //OriginGroupLayout->setMargin( 11 ); QLabel* XLabel = new QLabel (tr("LBL_X"), OriginGroup); XSpin = new QtxDoubleSpinBox( OriginGroup ); VISU::initSpinBox(XSpin, 0.0, +1.0); XSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - XSpin->setMinimumWidth( 70 ); + //XSpin->setMinimumWidth( 70 ); XSpin->setValue( 0.01 ); QLabel* YLabel = new QLabel (tr("LBL_Y"), OriginGroup); YSpin = new QtxDoubleSpinBox( OriginGroup ); VISU::initSpinBox(YSpin, 0.0, +1.0); YSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - YSpin->setMinimumWidth( 70 ); - YSpin->setValue( 0.01 ); + //YSpin->setMinimumWidth( 70 ); + YSpin->setValue( 0.1 ); OriginGroupLayout->addWidget( XLabel, 0, 0); OriginGroupLayout->addWidget( XSpin, 0, 1); OriginGroupLayout->addWidget( YLabel, 0, 2); OriginGroupLayout->addWidget( YSpin, 0, 3); - //TopLayout->addWidget( OriginGroup ); - // Dimensions ========================================================= QGroupBox* DimGroup = new QGroupBox (tr("DIMENSIONS_GRP"), this ); aMainLayout->addWidget( DimGroup ); - //DimGroup->setColumnLayout(0, Qt::Vertical ); - //DimGroup->layout()->setSpacing( 0 ); - //DimGroup->layout()->setMargin( 0 ); QGridLayout* DimGroupLayout = new QGridLayout( DimGroup ); DimGroupLayout->setAlignment( Qt::AlignTop ); - DimGroupLayout->setSpacing( 6 ); - DimGroupLayout->setMargin( 11 ); + //DimGroupLayout->setSpacing( 6 ); + //DimGroupLayout->setMargin( 11 ); QLabel* WidthLabel = new QLabel (tr("LBL_WIDTH"), DimGroup); WidthSpin = new QtxDoubleSpinBox( DimGroup ); VISU::initSpinBox(WidthSpin, 0.0, +1.0); WidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - WidthSpin->setMinimumWidth( 70 ); + //WidthSpin->setMinimumWidth( 70 ); WidthSpin->setValue( 0.1 ); QLabel* HeightLabel = new QLabel (tr("LBL_HEIGHT"), DimGroup); HeightSpin = new QtxDoubleSpinBox( DimGroup ); VISU::initSpinBox(HeightSpin, 0.0, +1.0); HeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - HeightSpin->setMinimumWidth( 70 ); + //HeightSpin->setMinimumWidth( 70 ); HeightSpin->setValue( 0.8 ); DimGroupLayout->addWidget( WidthLabel, 0, 0); @@ -779,19 +713,10 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) DimGroupLayout->addWidget( HeightLabel, 0, 2); DimGroupLayout->addWidget( HeightSpin, 0, 3); - //TopLayout->addWidget( DimGroup ); - // Save check box =========================================================== QWidget* aSaveBox = new QWidget(this); aMainLayout->addWidget( aSaveBox ); - QVBoxLayout* aVBLay = new QVBoxLayout( aSaveBox ); - if (!thePreview) { - CBSave = new QCheckBox (tr("SAVE_DEFAULT_CHK"), aSaveBox); - aVBLay->addWidget( CBSave ); - } - else { - CBSave = 0; - } + QHBoxLayout* aVBLay = new QHBoxLayout( aSaveBox ); aVBLay->addWidget( myTextBtn = new QPushButton("Text properties...", aSaveBox) ); aVBLay->addWidget( myBarBtn = new QPushButton("Bar properties...", aSaveBox) ); @@ -801,28 +726,43 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) QGroupBox* CheckGroup = new QGroupBox("", this ); aMainLayout->addWidget( CheckGroup ); + //QHBoxLayout* CheckGroupLayout = new QHBoxLayout( CheckGroup ); QGridLayout* CheckGroupLayout = new QGridLayout( CheckGroup ); myPreviewCheck = new QCheckBox(tr("LBL_SHOW_PREVIEW"), CheckGroup); myPreviewCheck->setChecked(false); - CheckGroupLayout->addWidget(myPreviewCheck , 0, 0 ); - - if ( thePreview ) { + CheckGroupLayout->addWidget(myPreviewCheck, 0, 0); + + myHideBar = new QCheckBox(tr("HIDE_SCALAR_BAR"), CheckGroup); + myHideBar->setChecked(false); + CheckGroupLayout->addWidget(myHideBar, 0, 1); + +// RKV : Begin + CBDistr = new QCheckBox (tr("SHOW_DISTRIBUTION"), CheckGroup); + CheckGroupLayout->addWidget(CBDistr, 1, 0); +// RKV : End + if (!thePreview) { + CBSave = new QCheckBox (tr("SAVE_DEFAULT_CHK"), CheckGroup); + CheckGroupLayout->addWidget( CBSave, 1, 1 ); + } + else { + CBSave = 0; myPreviewCheck->hide(); CheckGroup->hide(); } if(RBvert->isChecked()) { - myBarDlg->setRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + myBarDlg->setRatios(myVerTS, myVerLS, myVerBW, myVerBH); } else { - myBarDlg->setRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + myBarDlg->setRatios(myHorTS, myHorLS, myHorBW, myHorBH); } - myBarDlg->setLabelsFormat(aResourceMgr->stringValue("VISU", propertyName + "label_format", "%-#6.3g")); + int lp = aResourceMgr->integerValue( "VISU", propertyName + "scalar_bar_label_precision", 3 ); + myBarDlg->setLabelsPrecision( lp ); + myBarDlg->setUnitsVisible(aResourceMgr->booleanValue("VISU", propertyName + "display_units", true)); // signals and slots connections =========================================== - // connect( RangeGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( changeRange( int ) ) ); connect( RBFrange, SIGNAL( toggled( bool ) ), this, SLOT( onFieldRange( bool ) ) ); connect( RBIrange, SIGNAL( toggled( bool ) ), this, SLOT( onImposedRange( bool ) ) ); @@ -833,6 +773,9 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane( QWidget* parent, bool thePreview ) connect( myTextBtn, SIGNAL( clicked() ), this, SLOT( onTextPref() ) ); connect( myBarBtn, SIGNAL( clicked() ), this, SLOT( onBarPref() ) ); connect( myPreviewCheck, SIGNAL( toggled( bool )), this, SLOT( onPreviewCheck( bool ) ) ); + + connect( CBDistr, SIGNAL( toggled( bool ) ), this, SLOT( onShowDistribution( bool ) )); // RKV + connect( ColorSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreview() )); connect( LabelSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreview() )); connect( WidthSpin, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreview() )); @@ -860,13 +803,13 @@ void VisuGUI_ScalarBarPane::storeToResources() { if(orient == 0) { sbX1=0.01; sbY1=0.1; - sbW=0.17; + sbW=0.1; sbH=0.8; } else { - sbX1=0.2; + sbX1=0.1; sbY1=0.01; - sbW=0.6; - sbH=0.12; + sbW=0.8; + sbH=0.08; } } @@ -903,6 +846,7 @@ void VisuGUI_ScalarBarPane::storeToResources() { aResourceMgr->setValue("VISU", "scalar_range_type", 0); aResourceMgr->setValue("VISU", "scalar_bar_logarithmic", isLogarithmic()); + aResourceMgr->setValue("VISU", "scalar_bar_show_distribution", isShowDistribution()); // RKV //// @@ -921,7 +865,7 @@ void VisuGUI_ScalarBarPane::storeToResources() { aTitleFont.setBold(isTitleBold); aTitleFont.setItalic(isTitleItalic); - aTitleFont.setUnderline(isTitleShadow); + aTitleFont.setOverline(isTitleShadow); QString titleFontFamily; switch (aTitleFontFamily) { @@ -956,7 +900,7 @@ void VisuGUI_ScalarBarPane::storeToResources() { aLabelFont.setBold(isLabelBold); aLabelFont.setItalic(isLabelItalic); - aLabelFont.setUnderline(isLabelShadow); + aLabelFont.setOverline(isLabelShadow); QString labelFontFamily; switch (aLabelFontFamily) { @@ -1040,6 +984,7 @@ void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ColoredPrs3d_i* thePrs) setRange( myScalarMap->GetMin(), myScalarMap->GetMax(), myScalarMap->IsRangeFixed() ); setScalarBarData( myScalarMap->GetNbColors(), myScalarMap->GetLabels() ); + setShowDistribution( myScalarMap->GetIsDistributionVisible() ); // "Title" CORBA::String_var aTitle = myScalarMap->GetTitle(); @@ -1053,24 +998,20 @@ void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ColoredPrs3d_i* thePrs) myScalarMap->GetBarOrientation()); if(RBvert->isChecked()) { - myVerTW = myScalarMap->GetTitleWidth(); - myVerTH = myScalarMap->GetTitleHeight(); - myVerLW = myScalarMap->GetLabelWidth(); - myVerLH = myScalarMap->GetLabelHeight(); + myVerTS = myScalarMap->GetTitleSize(); + myVerLS = myScalarMap->GetLabelSize(); myVerBW = myScalarMap->GetBarWidth(); myVerBH = myScalarMap->GetBarHeight(); - myBarDlg->setRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + myBarDlg->setRatios(myVerTS, myVerLS, myVerBW, myVerBH); } else { - myHorTW = myScalarMap->GetTitleWidth(); - myHorTH = myScalarMap->GetTitleHeight(); - myHorLW = myScalarMap->GetLabelWidth(); - myHorLH = myScalarMap->GetLabelHeight(); + myHorTS = myScalarMap->GetTitleSize(); + myHorLS = myScalarMap->GetLabelSize(); myHorBW = myScalarMap->GetBarWidth(); myHorBH = myScalarMap->GetBarHeight(); - myBarDlg->setRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + myBarDlg->setRatios(myHorTS, myHorLS, myHorBW, myHorBH); } - myBarDlg->setLabelsFormat(myScalarMap->GetLabelsFormat()); + myBarDlg->setLabelsPrecision( VISU::ToPrecision( myScalarMap->GetLabelsFormat() ) ); myBarDlg->setUnitsVisible(myScalarMap->IsUnitsVisible()); vtkFloatingPointType R, G, B; @@ -1095,6 +1036,8 @@ void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ColoredPrs3d_i* thePrs) myScalarMap->IsItalicLabel(), myScalarMap->IsShadowLabel()); + myHideBar->setChecked(!myScalarMap->IsBarVisible()); + // Draw Preview if (myPreviewCheck->isChecked()) { createScalarBar(); @@ -1147,26 +1090,29 @@ void VisuGUI_ScalarBarPane::createScalarBar() VISU_ScalarBarActor* aScalarBarActor = myPreviewActor->GetScalarBar(); myPreviewActor->GetScalarBar()->VisibilityOn(); myPreviewActor->PickableOff(); + //myPreviewActor->SetBarVisibility(!myHideBar->isChecked()); myScalarMapPL->SetScalarMode(myModeCombo->currentIndex()); if(isLogarithmic()) myScalarMapPL->SetScaling(VISU::LOGARITHMIC); else myScalarMapPL->SetScaling(VISU::LINEAR); - vtkFloatingPointType theRange[2]; - if(RBFrange->isChecked()) { - theRange[0] = myScalarMap->GetSourceMin(); - theRange[1] = myScalarMap->GetSourceMax(); + + if ( RBFrange->isChecked() ) { + myScalarMapPL->SetSourceRange(); } else { - theRange[0] = (vtkFloatingPointType)MinEdit->text().toDouble(); - theRange[1] = (vtkFloatingPointType)MaxEdit->text().toDouble(); + vtkFloatingPointType aRange[2]; + aRange[0] = (vtkFloatingPointType)MinEdit->text().toDouble(); + aRange[1] = (vtkFloatingPointType)MaxEdit->text().toDouble(); + myScalarMapPL->SetScalarRange( aRange ); } - myScalarMapPL->SetScalarRange(theRange); - myScalarMapPL->SetNbColors(sbCol); - + + myScalarMapPL->SetNbColors(sbCol); myScalarMapPL->Update(); aScalarBarActor->SetLookupTable(myScalarMapPL->GetBarTable()); + aScalarBarActor->SetDistribution( myScalarMapPL->GetDistribution() ); + aScalarBarActor->SetDistributionVisibility( isShowDistribution() ); if (!myTextDlg->getTitleText().isEmpty()) { VISU::PValForTime aValForTime; @@ -1237,11 +1183,12 @@ void VisuGUI_ScalarBarPane::createScalarBar() (isLabelItalic)? aLabelProp->ItalicOn() : aLabelProp->ItalicOff(); (isLabelShadow)? aLabelProp->ShadowOn() : aLabelProp->ShadowOff(); - int VerTW, VerTH, VerLW, VerLH, VerBW, VerBH; - myBarDlg->getRatios(VerTW, VerTH, VerLW, VerLH, VerBW, VerBH); - aScalarBarActor->SetRatios(VerTW, VerTH, VerLW, VerLH, VerBW, VerBH); + int VerTS, VerTH, VerLS, VerBW, VerBH; + myBarDlg->getRatios(VerTS, VerLS, VerBW, VerBH); + aScalarBarActor->SetRatios(VerTS, VerLS, VerBW, VerBH); - aScalarBarActor->SetLabelFormat(myBarDlg->getLabelsFormat().toLatin1().data()); + std::string f = VISU::ToFormat( myBarDlg->getLabelsPrecision() ); + aScalarBarActor->SetLabelFormat( f.c_str() ); aScalarBarActor->Modified(); @@ -1286,12 +1233,13 @@ int VisuGUI_ScalarBarPane::storeToPrsObject(VISU::ColoredPrs3d_i* thePrs) { myScalarMap->SetPosition(XSpin->value(), YSpin->value()); myScalarMap->SetSize(WidthSpin->value(), HeightSpin->value()); if(RBvert->isChecked()) { - myScalarMap->SetRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + myScalarMap->SetRatios(myVerTS, myVerLS, myVerBW, myVerBH); } else { - myScalarMap->SetRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + myScalarMap->SetRatios(myHorTS, myHorLS, myHorBW, myHorBH); } - myScalarMap->SetLabelsFormat(myBarDlg->getLabelsFormat().toLatin1().data()); + std::string f = VISU::ToFormat( myBarDlg->getLabelsPrecision() ); + myScalarMap->SetLabelsFormat( f.c_str() ); myScalarMap->SetUnitsVisible(myBarDlg->isUnitsVisible()); myScalarMap->SetBarOrientation((RBvert->isChecked())? VISU::ColoredPrs3dBase::VERTICAL : VISU::ColoredPrs3dBase::HORIZONTAL); @@ -1300,13 +1248,16 @@ int VisuGUI_ScalarBarPane::storeToPrsObject(VISU::ColoredPrs3d_i* thePrs) { else myScalarMap->SetScaling(VISU::LINEAR); - if (RBFrange->isChecked()) { + if ( RBFrange->isChecked() ) { myScalarMap->SetSourceRange(); } else { - myScalarMap->SetRange(MinEdit->text().toDouble(), MaxEdit->text().toDouble()); + myScalarMap->SetRange( MinEdit->text().toDouble(), MaxEdit->text().toDouble() ); } myScalarMap->SetNbColors(ColorSpin->value()); myScalarMap->SetLabels(LabelSpin->value()); + myScalarMap->SetIsDistributionVisible(isShowDistribution()); // RKV + + myScalarMap->SetBarVisible(!myHideBar->isChecked()); if (isToSave()) storeToResources(); @@ -1394,13 +1345,19 @@ void VisuGUI_ScalarBarPane::onFieldRange( bool isOn ) void VisuGUI_ScalarBarPane::onImposedRange( bool isOn ) { if (isOn) { - myScalarMap->SetRange(myScalarMap->GetMin(), myScalarMap->GetMax()); + myScalarMap->SetRange( myScalarMap->GetMin(), myScalarMap->GetMax() ); MinEdit->setEnabled( true ); MaxEdit->setEnabled( true ); changeScalarMode(myModeCombo->currentIndex()); } } +void VisuGUI_ScalarBarPane::onShowDistribution( bool isOn ) +{ + myScalarMap->SetIsDistributionVisible(isOn); + updatePreview(); +} + void VisuGUI_ScalarBarPane::changeRange( int ) { if ( RBFrange->isChecked() ) { @@ -1408,7 +1365,7 @@ void VisuGUI_ScalarBarPane::changeRange( int ) MinEdit->setEnabled( false ); MaxEdit->setEnabled( false ); } else { - myScalarMap->SetRange(myScalarMap->GetMin(), myScalarMap->GetMax()); + myScalarMap->SetRange( myScalarMap->GetMin(), myScalarMap->GetMax() ); MinEdit->setEnabled( true ); MaxEdit->setEnabled( true ); } @@ -1536,6 +1493,18 @@ void VisuGUI_ScalarBarPane::setLogarithmic( bool on ) { CBLog->setChecked( on ); } +//---------------------------------------------------------------------------- +bool VisuGUI_ScalarBarPane::isShowDistribution() { + return CBDistr->isChecked(); +} + + +//---------------------------------------------------------------------------- +void VisuGUI_ScalarBarPane::setShowDistribution( bool on ) { + CBDistr->setChecked( on ); +} + +// RKV : End //---------------------------------------------------------------------------- bool VisuGUI_ScalarBarPane::isToSave() { return CBSave ? CBSave->isChecked() : false; @@ -1642,14 +1611,15 @@ void VisuGUI_ScalarBarPane::onTextPref() void VisuGUI_ScalarBarPane::onBarPref() { if(RBvert->isChecked()) - myBarDlg->setRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + myBarDlg->setRatios(myVerTS, myVerLS, myVerBW, myVerBH); else - myBarDlg->setRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + myBarDlg->setRatios(myHorTS, myHorLS, myHorBW, myHorBH); + myBarDlg->setOrientation( getOrientation() ); if(myBarDlg->exec()) { if(RBvert->isChecked()) - myBarDlg->getRatios(myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH); + myBarDlg->getRatios(myVerTS, myVerLS, myVerBW, myVerBH); else - myBarDlg->getRatios(myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH); + myBarDlg->getRatios(myHorTS, myHorLS, myHorBW, myHorBH); updatePreview(); } } diff --git a/src/VISUGUI/VisuGUI_Prs3dDlg.h b/src/VISUGUI/VisuGUI_Prs3dDlg.h index 86c0705a..0acefb0c 100644 --- a/src/VISUGUI/VisuGUI_Prs3dDlg.h +++ b/src/VISUGUI/VisuGUI_Prs3dDlg.h @@ -105,18 +105,20 @@ class VisuGUI_BarPrefDlg: public QDialog VisuGUI_BarPrefDlg (QWidget* parent); ~VisuGUI_BarPrefDlg() {}; - void setRatios(int titleRatioWidth, int titleRatioHeight, - int labelRatioWidth, int labelRatioHeight, + void setRatios(int titleRatioSize, int labelRatioWidth, int barRatioWidth, int barRatioHeight); - void getRatios(int& titleRatioWidth, int& titleRatioHeight, - int& labelRatioWidth, int& labelRatioHeight, + void getRatios(int& titleRatioSize, int& labelRatioWidth, int& barRatioWidth, int& barRatioHeight); void setUnitsVisible(bool isVisible); bool isUnitsVisible(); - void setLabelsFormat( const QString& format); - QString getLabelsFormat(); + void setLabelsPrecision( const int p ); + int getLabelsPrecision() const; + + void setOrientation( const int ori ); + int getOrientation() const; + private: void keyPressEvent( QKeyEvent* e ); @@ -130,23 +132,20 @@ class VisuGUI_BarPrefDlg: public QDialog void onHelp(); protected: - QSpinBox* TitleWidthSpin; - QSpinBox* TitleHeightSpin; - QSpinBox* LabelWidthSpin; - QSpinBox* LabelHeightSpin; - QSpinBox* BarWidthSpin; - QSpinBox* BarHeightSpin; - QCheckBox* CBUnits; - QLineEdit* UnitsEdit; - - int myTitleWidth; - int myTitleHeight; - int myLabelWidth; - int myLabelHeight; + QSpinBox* myTitleSizeSpin; + QSpinBox* myLabelSizeSpin; + QSpinBox* myBarWidthSpin; + QSpinBox* myBarHeightSpin; + QCheckBox* myUnitsChk; + QSpinBox* myPrecisionSpin; + + int myTitleSize; + int myLabelSize; int myBarWidth; int myBarHeight; bool myUnits; - QString myUnitsFormat; + int myPrecision; + int myOrientation; }; @@ -175,6 +174,8 @@ class VisuGUI_ScalarBarPane : public QWidget//QVBox int getNbLabels(); bool isLogarithmic(); void setLogarithmic( bool on ); + bool isShowDistribution(); + void setShowDistribution( bool on ); bool isToSave(); void storeToResources(); @@ -205,6 +206,9 @@ class VisuGUI_ScalarBarPane : public QWidget//QVBox QCheckBox* CBSave; QCheckBox* CBLog; + QCheckBox* CBDistr; + QCheckBox* myHideBar; + QLabel* myModeLbl; QComboBox* myModeCombo; QPushButton* myTextBtn; @@ -214,8 +218,8 @@ class VisuGUI_ScalarBarPane : public QWidget//QVBox double myHorX, myHorY, myHorW, myHorH; double myVerX, myVerY, myVerW, myVerH; - int myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH; - int myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH; + int myHorTS, myHorLS, myHorBW, myHorBH; + int myVerTS, myVerTH, myVerLS, myVerBW, myVerBH; bool myIsStoreTextProp; private slots: @@ -228,7 +232,8 @@ class VisuGUI_ScalarBarPane : public QWidget//QVBox void onTextPref(); void onBarPref(); void onPreviewCheck(bool thePreview); - void updatePreview(); + void updatePreview(); + void onShowDistribution(bool); private: void createScalarBar(); diff --git a/src/VISUGUI/VisuGUI_Prs3dTools.h b/src/VISUGUI/VisuGUI_Prs3dTools.h index 0fb0c6d4..21dc5ee5 100644 --- a/src/VISUGUI/VisuGUI_Prs3dTools.h +++ b/src/VISUGUI/VisuGUI_Prs3dTools.h @@ -280,61 +280,68 @@ namespace VISU //--------------------------------------------------------------- template - void + TPrs3d_i* CreatePrs3dInViewer(VisuGUI* theModule, _PTR(SObject) theTimeStampSObj, ColoredPrs3d_i::EPublishInStudyMode thePublishInStudyMode) { + TPrs3d_i* aPrs = 0; // Create new TViewWindow instance, if it does not exist. typedef typename TViewer::TViewWindow TViewWindow; if (!GetViewWindow(theModule)) - return; + return aPrs; - CreateAndEditPrs3d - (theModule,theTimeStampSObj,thePublishInStudyMode); + aPrs = CreateAndEditPrs3d + (theModule,theTimeStampSObj,thePublishInStudyMode); theModule->application()->putInfo(QObject::tr("INF_DONE")); + return aPrs; } //---------------------------------------------------------------------------- template - void + TPrs3d_i* CreatePrs3d(VisuGUI* theModule, const QString& theDesiredViewerType = QString()) { + TPrs3d_i* aPrs = 0; if (CheckLock(GetCStudy(GetAppStudy(theModule)),GetDesktop(theModule))) - return; + return aPrs; _PTR(SObject) aTimeStampSObj; Handle(SALOME_InteractiveObject) anIO; ColoredPrs3d_i::EPublishInStudyMode aPublishInStudyMode; if (!CheckTimeStamp(theModule,aTimeStampSObj,anIO,aPublishInStudyMode)) - return; - - if(aPublishInStudyMode == VISU::ColoredPrs3d_i::EPublishIndependently){ - CreatePrs3dInViewer - (theModule,aTimeStampSObj,aPublishInStudyMode); - return; + return aPrs; + + if(/*aPublishInStudyMode == */VISU::ColoredPrs3d_i::EPublishIndependently){ + // CreatePrs3dInViewer + // (theModule,aTimeStampSObj,aPublishInStudyMode); + aPrs = CreatePrs3dInViewer + (theModule,aTimeStampSObj,aPublishInStudyMode); + return aPrs; }else{ if(theDesiredViewerType.isNull()){ - if (SUIT_ViewManager* aViewManager = theModule->getApp()->activeViewManager()) - if (aViewManager->getType() == VVTK_Viewer::Type()){ - CreatePrs3dInViewer - (theModule,aTimeStampSObj,aPublishInStudyMode); - return; - } - CreatePrs3dInViewer - (theModule,aTimeStampSObj,aPublishInStudyMode); + if (/*SUIT_ViewManager* aViewManager = */theModule->getApp()->activeViewManager()) + /*if (aViewManager->getType() == VVTK_Viewer::Type()){ + aPrs = CreatePrs3dInViewer + (theModule,aTimeStampSObj,aPublishInStudyMode); + return aPrs; + }*/ + aPrs = CreatePrs3dInViewer + (theModule,aTimeStampSObj,aPublishInStudyMode); }else{ - if(theDesiredViewerType == VVTK_Viewer::Type()) - CreatePrs3dInViewer - (theModule,aTimeStampSObj,aPublishInStudyMode); - else - CreatePrs3dInViewer - (theModule,aTimeStampSObj,aPublishInStudyMode); + /*if(theDesiredViewerType == VVTK_Viewer::Type()) { + aPrs = CreatePrs3dInViewer + (theModule,aTimeStampSObj,aPublishInStudyMode); + } else {*/ + aPrs = CreatePrs3dInViewer + (theModule,aTimeStampSObj,aPublishInStudyMode); + //} } } + return aPrs; } diff --git a/src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.cxx b/src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.cxx similarity index 68% rename from src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.cxx rename to src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.cxx index e3d180b9..98dcd686 100644 --- a/src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.cxx +++ b/src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.cxx @@ -21,59 +21,55 @@ // // // -// File : VisuGUI_DeformedShapeAndScalarMapDlg.cxx +// File : VisuGUI_ScalarMapOnDeformedShapeDlg.cxx // Author : Eugeny Nikolaev // Module : VISU -#include "VisuGUI_DeformedShapeAndScalarMapDlg.h" +#include "VisuGUI_ScalarMapOnDeformedShapeDlg.h" #include "VisuGUI_Tools.h" #include "VisuGUI_InputPane.h" #include "VISU_Result_i.hh" -#include "VISU_DeformedShapeAndScalarMap_i.hh" +#include "VISU_ScalarMapOnDeformedShape_i.hh" #include "VISU_ColoredPrs3dFactory.hh" #include "VISU_ScalarMapPL.hxx" -#include "VISU_DeformedShapeAndScalarMapPL.hxx" +#include "VISU_ScalarMapOnDeformedShapePL.hxx" #include "VISU_Convertor.hxx" -#include -#include -#include -#include -#include -#include -#include -#include +#include "SalomeApp_Module.h" +#include "LightApp_Application.h" +#include "LightApp_SelectionMgr.h" +#include "SUIT_Desktop.h" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" +#include "SUIT_MessageBox.h" -#include +#include "SALOME_ListIO.hxx" -#include -#include +#include "SALOMEDSClient_AttributeString.hxx" +#include "SALOMEDSClient_AttributeName.hxx" -#include -#include -#include -#include -#include -#include -#include +#include +#include + +using namespace std; #define MYDEBUG 0 /*! * Constructor */ -VisuGUI_DeformedShapeAndScalarMapDlg::VisuGUI_DeformedShapeAndScalarMapDlg (SalomeApp_Module* theModule) +VisuGUI_ScalarMapOnDeformedShapeDlg::VisuGUI_ScalarMapOnDeformedShapeDlg (SalomeApp_Module* theModule) : VisuGUI_ScalarBarBaseDlg(theModule), myIsAnimation(false), myUpdateScalars(true), myVisuGUI(theModule) { - setWindowTitle(tr("DLG_TITLE")); - setSizeGripEnabled(true); + setCaption(tr("DLG_TITLE")); + setSizeGripEnabled(TRUE); QVBoxLayout* TopLayout = new QVBoxLayout (this); TopLayout->setSpacing(6); @@ -82,75 +78,75 @@ VisuGUI_DeformedShapeAndScalarMapDlg::VisuGUI_DeformedShapeAndScalarMapDlg (Salo myTabBox = new QTabWidget (this); // Scalar Map on Deformed shape pane - QWidget* aBox = new QWidget (this); - QVBoxLayout* aVBLay = new QVBoxLayout( aBox ); - aVBLay->setMargin(11); - QFrame* TopGroup = new QFrame (aBox); - aVBLay->addWidget(TopGroup); + QVBox* aBox = new QVBox (this); + aBox->setMargin(11); + QFrame* TopGroup = new QFrame (aBox, "TopGroup"); TopGroup->setFrameStyle(QFrame::Box | QFrame::Sunken); TopGroup->setLineWidth(1); QGridLayout* TopGroupLayout = new QGridLayout (TopGroup); + TopGroupLayout->setAlignment(Qt::AlignTop | Qt::AlignCenter); TopGroupLayout->setSpacing(6); TopGroupLayout->setMargin(11); // Scale factor - QLabel* ScaleLabel = new QLabel (tr("SCALE_FACTOR"), TopGroup); + QLabel* ScaleLabel = new QLabel (tr("SCALE_FACTOR"), TopGroup, "ScaleLabel"); TopGroupLayout->addWidget(ScaleLabel, 0, 0); - ScalFact = new QtxDoubleSpinBox (0.0, 1.0E+38, 0.1, TopGroup); + ScalFact = new QtxDblSpinBox (0.0, 1.0E+38, 0.1, TopGroup); ScalFact->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - int aPrecision = aResourceMgr->integerValue( "VISU", "floating_point_precision", 0 ); - - ScalFact->setPrecision( aPrecision*(-1) ); - ScalFact->setDecimals( 32 ); + ScalFact->setPrecision(38); ScalFact->setValue(0.1); TopGroupLayout->addWidget(ScalFact, 0, 1); // Fields combo box - QLabel* FieldLabel = new QLabel (tr("FIELD_ITEM"), TopGroup); - myFieldsCombo = new QComboBox (TopGroup); + QLabel* FieldLabel = new QLabel (tr("FIELD_ITEM"), TopGroup, "FieldLabel"); + myFieldsCombo = new QComboBox (TopGroup,"Fields"); TopGroupLayout->addWidget(FieldLabel, 1, 0); TopGroupLayout->addWidget(myFieldsCombo,1,1); // TimeStamps combo box - QLabel* TimeStampLabel = new QLabel (tr("TIMESTAMP_ITEM"), TopGroup); - myTimeStampsCombo = new QComboBox (TopGroup); + QLabel* TimeStampLabel = new QLabel (tr("TIMESTAMP_ITEM"), TopGroup, "TimeStampLabel"); + myTimeStampsCombo = new QComboBox (TopGroup,"TimeStamp"); TopGroupLayout->addWidget(TimeStampLabel, 2, 0); TopGroupLayout->addWidget(myTimeStampsCombo,2,1); - TopGroupLayout->setRowStretch(3,5); // - myTabBox->addTab(aBox, tr("DEFORMED_SHAPE_AND_SCALAR_MAP_TAB")); + myTabBox->addTab(aBox, tr("SCALAR_MAP_ON_DEFORMED_SHAPE_TAB")); // Scalar bar pane - myInputPane = new VisuGUI_InputPane(VISU::TDEFORMEDSHAPEANDSCALARMAP, theModule, this); + myInputPane = new VisuGUI_InputPane(VISU::TSCALARMAPONDEFORMEDSHAPE, theModule, this); myTabBox->addTab(GetScalarPane(), tr("SCALAR_BAR_TAB")); myTabBox->addTab(myInputPane, tr("INPUT_TAB")); // Buttons - QGroupBox* GroupButtons = new QGroupBox (this); - QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons); + QGroupBox* GroupButtons = new QGroupBox (this, "GroupButtons"); + GroupButtons->setGeometry(QRect(10, 10, 281, 48)); + GroupButtons->setColumnLayout(0, Qt::Vertical); + GroupButtons->layout()->setSpacing(0); + GroupButtons->layout()->setMargin(0); + QGridLayout* GroupButtonsLayout = new QGridLayout (GroupButtons->layout()); + GroupButtonsLayout->setAlignment(Qt::AlignTop); GroupButtonsLayout->setSpacing(6); GroupButtonsLayout->setMargin(11); - QPushButton* buttonOk = new QPushButton (tr("&OK"), GroupButtons); - buttonOk->setAutoDefault(true); - buttonOk->setDefault(true); - QPushButton* buttonCancel = new QPushButton (tr("&Cancel") , GroupButtons); - buttonCancel->setAutoDefault(true); - QPushButton* buttonHelp = new QPushButton (tr("&Help") , GroupButtons); - buttonHelp->setAutoDefault(true); + QPushButton* buttonOk = new QPushButton (tr("&OK"), GroupButtons, "buttonOk"); + buttonOk->setAutoDefault(TRUE); + buttonOk->setDefault(TRUE); + GroupButtonsLayout->addWidget(buttonOk, 0, 0); + + GroupButtonsLayout->addItem(new QSpacerItem (5, 5, QSizePolicy::Expanding, + QSizePolicy::Minimum), 0, 1); + + QPushButton* buttonCancel = new QPushButton (tr("&Cancel") , GroupButtons, "buttonCancel"); + buttonCancel->setAutoDefault(TRUE); + GroupButtonsLayout->addWidget(buttonCancel, 0, 2); - GroupButtonsLayout->addWidget(buttonOk); - GroupButtonsLayout->addSpacing(10); - GroupButtonsLayout->addStretch(); - GroupButtonsLayout->addWidget(buttonCancel); - GroupButtonsLayout->addWidget(buttonHelp); + QPushButton* buttonHelp = new QPushButton (tr("&Help") , GroupButtons, "buttonHelp"); + buttonHelp->setAutoDefault(TRUE); + GroupButtonsLayout->addWidget(buttonHelp, 0, 3); // Add Tab box and Buttons to the top layout TopLayout->addWidget(myTabBox); @@ -164,15 +160,14 @@ VisuGUI_DeformedShapeAndScalarMapDlg::VisuGUI_DeformedShapeAndScalarMapDlg (Salo connect(myTimeStampsCombo, SIGNAL(activated(int)), this, SLOT(onTimeStampChanged(int))); } -VisuGUI_DeformedShapeAndScalarMapDlg::~VisuGUI_DeformedShapeAndScalarMapDlg() -{ -} +VisuGUI_ScalarMapOnDeformedShapeDlg::~VisuGUI_ScalarMapOnDeformedShapeDlg() +{} -void VisuGUI_DeformedShapeAndScalarMapDlg::initFromPrsObject( VISU::ColoredPrs3d_i* thePrs, - bool theInit ) +void VisuGUI_ScalarMapOnDeformedShapeDlg::initFromPrsObject( VISU::ColoredPrs3d_i* thePrs, + bool theInit ) { if( theInit ) - myPrsCopy = VISU::TSameAsFactory().Create(thePrs, VISU::ColoredPrs3d_i::EDoNotPublish); + myPrsCopy = VISU::TSameAsFactory().Create(thePrs, VISU::ColoredPrs3d_i::EDoNotPublish); setFactor(myPrsCopy->GetScale()); myTimeStampsCombo->setDisabled(myIsAnimation); @@ -256,7 +251,7 @@ void VisuGUI_DeformedShapeAndScalarMapDlg::initFromPrsObject( VISU::ColoredPrs3d TTimeStampNumber2Time& aTimeStampNumber2Time = aFieldName2TimeStamps[aFieldName]; aTimeStampNumber2Time[aTimeIter.toInt()] = GetFloatValueOfTimeStamp(anEntity, - aFieldName.toLatin1().constData(), + aFieldName.latin1(), aTimeIter.toInt()); } } @@ -264,21 +259,9 @@ void VisuGUI_DeformedShapeAndScalarMapDlg::initFromPrsObject( VISU::ColoredPrs3d } AddAllFieldNames(); } - int idx = myFieldsCombo->findText(aFieldName.in()); - if (idx >= 0) - myFieldsCombo->setCurrentIndex(idx); - else { - myFieldsCombo->addItem(aFieldName.in()); - myFieldsCombo->setCurrentIndex(myFieldsCombo->count()-1); - } + myFieldsCombo->setCurrentText(aFieldName.in()); AddAllTimes(myFieldsCombo->currentText()); - idx = myTimeStampsCombo->findText(aIteration); - if (idx >= 0) - myTimeStampsCombo->setCurrentIndex(idx); - else { - myTimeStampsCombo->addItem(aIteration); - myTimeStampsCombo->setCurrentIndex(myTimeStampsCombo->count()-1); - } + myTimeStampsCombo->setCurrentText(aIteration); SetScalarField( false ); VisuGUI_ScalarBarBaseDlg::initFromPrsObject(myPrsCopy, theInit); @@ -287,32 +270,11 @@ void VisuGUI_DeformedShapeAndScalarMapDlg::initFromPrsObject( VISU::ColoredPrs3d return; myInputPane->initFromPrsObject( myPrsCopy ); - myTabBox->setCurrentIndex( 0 ); -} - -double VisuGUI_DeformedShapeAndScalarMapDlg::getFactor() const -{ - return ScalFact->value(); -} - -void VisuGUI_DeformedShapeAndScalarMapDlg::setFactor(double theFactor) -{ - double i=0.1; - while (1) { // Calculate Step & Precission - if ( int (theFactor/i) > 0) - break; - else { - i = i*0.1; - } - } - - ScalFact->setSingleStep(i); - - ScalFact->setValue(theFactor); + myTabBox->setCurrentPage( 0 ); } int -VisuGUI_DeformedShapeAndScalarMapDlg +VisuGUI_ScalarMapOnDeformedShapeDlg ::storeToPrsObject(VISU::ColoredPrs3d_i* thePrs) { if(!myInputPane->check() || !GetScalarPane()->check()) @@ -324,31 +286,31 @@ VisuGUI_DeformedShapeAndScalarMapDlg myPrsCopy->SetScale(getFactor()); myPrsCopy->SetScalarField(myPrsCopy->GetScalarEntity(), - getCurrentScalarFieldName().toLatin1().constData(), - myTimeStampID[ myTimeStampsCombo->currentIndex() ]); + getCurrentScalarFieldName().latin1(), + myTimeStampID[ myTimeStampsCombo->currentItem() ]); if(myUpdateScalars) SetScalarField( false ); - VISU::TSameAsFactory().Copy(myPrsCopy, thePrs); + VISU::TSameAsFactory().Copy(myPrsCopy, thePrs); return anIsOk; } -int VisuGUI_DeformedShapeAndScalarMapDlg::getCurrentScalarFieldNamePos(){ - return myFieldsCombo->currentIndex(); +int VisuGUI_ScalarMapOnDeformedShapeDlg::getCurrentScalarFieldNamePos(){ + return myFieldsCombo->currentItem(); } -QString VisuGUI_DeformedShapeAndScalarMapDlg::getCurrentScalarFieldName(){ +QString VisuGUI_ScalarMapOnDeformedShapeDlg::getCurrentScalarFieldName(){ return myFieldsCombo->currentText(); } -int VisuGUI_DeformedShapeAndScalarMapDlg::getCurrentScalarNbIterations(){ +int VisuGUI_ScalarMapOnDeformedShapeDlg::getCurrentScalarNbIterations(){ return myTimeStampsCombo->count(); } VISU::Entity -VisuGUI_DeformedShapeAndScalarMapDlg +VisuGUI_ScalarMapOnDeformedShapeDlg ::getCurrentScalarEntity() { VISU::Entity anEntity = VISU::Entity(-1); @@ -367,17 +329,17 @@ VisuGUI_DeformedShapeAndScalarMapDlg return anEntity; } -void VisuGUI_DeformedShapeAndScalarMapDlg::SetScalarField( const bool save_scalar_pane ){ - SetScalarField( myTimeStampID[ myTimeStampsCombo->currentIndex() ], "", save_scalar_pane ); +void VisuGUI_ScalarMapOnDeformedShapeDlg::SetScalarField( const bool save_scalar_pane ){ + SetScalarField( myTimeStampID[ myTimeStampsCombo->currentItem() ], "", save_scalar_pane ); } void -VisuGUI_DeformedShapeAndScalarMapDlg +VisuGUI_ScalarMapOnDeformedShapeDlg ::SetScalarField(int theIter, QString theFieldName, const bool save_scalar_pane ) { - QApplication::setOverrideCursor(Qt::WaitCursor); + QApplication::setOverrideCursor(Qt::waitCursor); if( save_scalar_pane ) GetScalarPane()->storeToPrsObject(myPrsCopy); @@ -392,7 +354,7 @@ VisuGUI_DeformedShapeAndScalarMapDlg VISU::Entity anEntity = getCurrentScalarEntity(); myPrsCopy->SetScalarField(anEntity, - aFieldName.toLatin1().constData(), + aFieldName.latin1(), theIter); if( save_scalar_pane ) @@ -401,34 +363,34 @@ VisuGUI_DeformedShapeAndScalarMapDlg QApplication::restoreOverrideCursor(); } -void VisuGUI_DeformedShapeAndScalarMapDlg::accept() +void VisuGUI_ScalarMapOnDeformedShapeDlg::accept() { VisuGUI_ScalarBarBaseDlg::accept(); } -void VisuGUI_DeformedShapeAndScalarMapDlg::reject() +void VisuGUI_ScalarMapOnDeformedShapeDlg::reject() { VisuGUI_ScalarBarBaseDlg::reject(); } -QString VisuGUI_DeformedShapeAndScalarMapDlg::GetContextHelpFilePath() +QString VisuGUI_ScalarMapOnDeformedShapeDlg::GetContextHelpFilePath() { return "scalar_map_on_deformed_shape_page.html"; } -void VisuGUI_DeformedShapeAndScalarMapDlg::AddAllFieldNames(){ +void VisuGUI_ScalarMapOnDeformedShapeDlg::AddAllFieldNames(){ TEntity2Fields::const_iterator anIter = myEntity2Fields.begin(); for(; anIter != myEntity2Fields.end(); anIter++){ const TFieldName2TimeStamps& aFieldName2TimeStamps = anIter->second; TFieldName2TimeStamps::const_iterator aFieldIter = aFieldName2TimeStamps.begin(); for(; aFieldIter != aFieldName2TimeStamps.end(); aFieldIter++){ const QString& aFieldName = aFieldIter->first; - myFieldsCombo->addItem(aFieldName); + myFieldsCombo->insertItem(aFieldName); } } } -void VisuGUI_DeformedShapeAndScalarMapDlg::AddAllTimes(const QString& theFieldName){ +void VisuGUI_ScalarMapOnDeformedShapeDlg::AddAllTimes(const QString& theFieldName){ TEntity2Fields::const_iterator anIter = myEntity2Fields.begin(); for(; anIter != myEntity2Fields.end(); anIter++){ const TFieldName2TimeStamps& aFieldName2TimeStamps = anIter->second; @@ -448,30 +410,30 @@ void VisuGUI_DeformedShapeAndScalarMapDlg::AddAllTimes(const QString& theFieldNa myTimeStampID.push_back(aTimeStampNumber); QString aTimeStampTime = aTimeStampIter->second; - myTimeStampsCombo->addItem(aTimeStampTime); + myTimeStampsCombo->insertItem(aTimeStampTime); } return; } } } -void VisuGUI_DeformedShapeAndScalarMapDlg::onFieldChanged(int){ +void VisuGUI_ScalarMapOnDeformedShapeDlg::onFieldChanged(int){ AddAllTimes(myFieldsCombo->currentText()); SetScalarField(); UpdateScalarField(); } -void VisuGUI_DeformedShapeAndScalarMapDlg::onTimeStampChanged(int){ +void VisuGUI_ScalarMapOnDeformedShapeDlg::onTimeStampChanged(int){ SetScalarField(); UpdateScalarField(); } -void VisuGUI_DeformedShapeAndScalarMapDlg::UpdateScalarField(){ +void VisuGUI_ScalarMapOnDeformedShapeDlg::UpdateScalarField(){ GetScalarPane()->initFromPrsObject(myPrsCopy); } QString -VisuGUI_DeformedShapeAndScalarMapDlg +VisuGUI_ScalarMapOnDeformedShapeDlg ::GetFloatValueOfTimeStamp(VISU::Entity theEntity, const std::string& theFieldName, int theTimeStampNumber) diff --git a/src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.h b/src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.h similarity index 78% rename from src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.h rename to src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.h index 9daf4a58..6974d688 100644 --- a/src/VISUGUI/VisuGUI_DeformedShapeAndScalarMapDlg.h +++ b/src/VISUGUI/VisuGUI_ScalarMapOnDeformedShapeDlg.h @@ -21,43 +21,50 @@ // // // -// File : VisuGUI_DeformedShapeAndScalarMapDlg.h +// File : VisuGUI_ScalarMapOnDeformedShapeDlg.h // Author : Eugeny Nikolaev // Module : VISU -#ifndef VISUGUI_DEFORMEDSHAPEANDSCALARMAPDLS_H -#define VISUGUI_DEFORMEDSHAPEANDSCALARMAPDLS_H +#ifndef VISUGUI_SCALARMAPONDEFORMEDSHAPEDLS_H +#define VISUGUI_SCALARMAPONDEFORMEDSHAPEDLS_H #include "VisuGUI_Prs3dDlg.h" #include "VISUConfig.hh" -#include +#include "QtxDblSpinBox.h" + +#include +#include +#include +#include +#include +#include +#include #include #include class SalomeApp_Module; class VisuGUI_InputPane; -class QtxDoubleSpinBox; -class QComboBox; -class QTabWidget; namespace VISU { - class DeformedShapeAndScalarMap_i; + class ScalarMapOnDeformedShape_i; } -class VisuGUI_DeformedShapeAndScalarMapDlg : public VisuGUI_ScalarBarBaseDlg +class VisuGUI_ScalarMapOnDeformedShapeDlg : public VisuGUI_ScalarBarBaseDlg { Q_OBJECT public: - VisuGUI_DeformedShapeAndScalarMapDlg (SalomeApp_Module* theModule); - ~VisuGUI_DeformedShapeAndScalarMapDlg(); + VisuGUI_ScalarMapOnDeformedShapeDlg (SalomeApp_Module* theModule); + ~VisuGUI_ScalarMapOnDeformedShapeDlg(); - double getFactor() const; - void setFactor(double theFactor); + double getFactor() + { return ScalFact->value(); } + void setFactor(double theFactor) + { ScalFact->setValue(theFactor); } virtual void initFromPrsObject( VISU::ColoredPrs3d_i* thePrs, bool theInit ); @@ -82,7 +89,7 @@ private slots: void onTimeStampChanged(int i=0); private: - QtxDoubleSpinBox* ScalFact; + QtxDblSpinBox* ScalFact; QTabWidget* myTabBox; VisuGUI_ScalarBarPane* myScalarPane; VisuGUI_InputPane* myInputPane; @@ -100,7 +107,7 @@ private: std::vector myTimeStampID; _PTR(SObject) mySelectionObj; - SALOME::GenericObjPtr myPrsCopy; + SALOME::GenericObjPtr myPrsCopy; SalomeApp_Module* myVisuGUI; protected: diff --git a/src/VISUGUI/VisuGUI_Selection.cxx b/src/VISUGUI/VisuGUI_Selection.cxx index c4b6d44e..23544b40 100644 --- a/src/VISUGUI/VisuGUI_Selection.cxx +++ b/src/VISUGUI/VisuGUI_Selection.cxx @@ -1,739 +1,597 @@ // VISU VISUGUI : GUI of VISU component // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // // File : VisuGUI_Selection.cxx -// Author : Laurent CORNABE & Hubert ROLLAND +// Author : Sergey Anikin // Module : VISU -// $Header$ #include "VisuGUI_Selection.h" -#include "VisuGUI.h" -#include "VisuGUI_Tools.h" #include "VisuGUI_ViewTools.h" +#include "VisuGUI_Tools.h" + +#include "VISU_Result_i.hh" +#include "VISU_Gen_i.hh" #include "VISU_Actor.h" -#include "VISU_PrsObject_i.hh" -#include "VISU_Prs3d_i.hh" -#include "VISU_PipeLine.hxx" +#include "VISU_ScalarMapAct.h" #include "SalomeApp_Study.h" -#include "SalomeApp_Application.h" -#include "LightApp_Application.h" -#include "LightApp_SelectionMgr.h" -#include "LightApp_VTKSelector.h" - -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" -#include "SUIT_ViewWindow.h" -#include "SUIT_Session.h" -#include "SUIT_ResourceMgr.h" - -#include "SALOME_ListIO.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" - -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" - -#include "VISU_ConvertorUtils.hxx" - -#include "utilities.h" - -// OCCT Includes -#include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// VTK Includes -#include -#include -#include -#include -#include - -// STL Includes -#include - -using namespace std; - - -inline -QString -GetNumber( const VISU::TStructuredId& theStructuredId, - size_t theId ) -{ - if ( theStructuredId[theId] < 0 ) - return "-"; - - return QString::number( theStructuredId[theId] ); +#include "LightApp_Study.h" + +using namespace VISU; + +////////////////////////////////////////////////// +// Class: VisuGUI_Selection +////////////////////////////////////////////////// + + +//--------------------------------------------------------------- +QVariant VisuGUI_Selection::parameter( const int ind, const QString& p ) const +{ + QVariant val( LightApp_Selection::parameter( ind, p ) ); + if ( !val.isValid() ) { + if ( p == "type" ) val = QVariant( type( ind ) ); + else if ( p == "nbComponents" ) val = QVariant( nbComponents( ind ) ); + else if ( p == "medEntity" ) val = QVariant( medEntity( ind ) ); + else if ( p == "medSource" ) val = QVariant( medSource( ind ) ); + else if ( p == "representation" ) val = QVariant( representation( ind ) ); + else if ( p == "nbTimeStamps" ) val = QVariant( nbTimeStamps( ind ) ); + else if ( p == "nbChildren" ) val = QVariant( nbChildren( ind ) ); + else if ( p == "nbNamedChildren") val = QVariant( nbNamedChildren( ind ) ); + else if ( p == "isVisible" ) val = QVariant( isVisible( ind ) ); + else if ( p == "isShrunk" ) val = QVariant( isShrunk( ind ) ); + else if ( p == "hasActor" ) val = QVariant( hasActor( ind ) ); + else if ( p == "isShading" ) val = QVariant( isShading( ind ) ); + else if ( p == "isScalarMapAct" ) val = QVariant( isScalarMapAct( ind ) ); + else if ( p == "isVisuComponent") val = QVariant( isVisuComponent( ind ) ); + else if ( p == "fullResolution" ) val = QVariant( fullResolution( ind ) ); + else if ( p == "mediumResolution" ) val = QVariant( mediumResolution( ind ) ); + else if ( p == "lowResolution" ) val = QVariant( lowResolution( ind ) ); + else if ( p == "resolutionState" ) val = QVariant( resolutionState( ind ) ); + else if ( p == "isValuesLabeled" ) val = QVariant( isValuesLabeled( ind ) ); + } + + return val; } -VisuGUI_SelectionDlg::VisuGUI_SelectionDlg (const SalomeApp_Module* theModule): - QDialog(VISU::GetDesktop(theModule), - Qt::WindowTitleHint | Qt::WindowSystemMenuHint ),//WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose), - mySelectionMgr(NULL), - myModule(theModule) -{ - setModal( false ); - setAttribute( Qt::WA_DeleteOnClose, true ); - setWindowTitle( tr("WINDOW_TITLE" ) ); - setSizeGripEnabled(true); - - QGridLayout* TopLayout = new QGridLayout (this); - TopLayout->setSpacing(6); - TopLayout->setMargin(11); - TopLayout->setRowStretch(0, 0); - TopLayout->setRowStretch(1, 0); - TopLayout->setRowStretch(2, 1); - TopLayout->setRowStretch(3, 0); - - QGroupBox* aTypeBox = new QGroupBox (tr("MODE_TITLE"), this); - QHBoxLayout* aHBox = new QHBoxLayout(); - QButtonGroup* aBtnGroup = new QButtonGroup(); - - QRadioButton* aBtn = new QRadioButton (tr("MODE_POINT"), aTypeBox); - aHBox->addWidget( aBtn ); - aBtnGroup->addButton( aBtn, 0 ); - - aBtn = new QRadioButton (tr("MODE_CELL"), aTypeBox); - aHBox->addWidget( aBtn ); - aBtnGroup->addButton( aBtn, 1 ); - - aBtn = new QRadioButton (tr("MODE_ACTOR"), aTypeBox); - aHBox->addWidget( aBtn ); - aBtnGroup->addButton( aBtn, 2 ); - - aBtnGroup->button(0)->setChecked(true); +//--------------------------------------------------------------- +// Macro for converting VISU enumeration items into corresponding strings +#define ENUM2STRING( x, y ) \ + case y: \ + x = QString( #y ); \ + break - connect(aBtnGroup, SIGNAL(buttonClicked(int)), this, SLOT(onSelectionChange(int))); +QString VisuGUI_Selection::type( const int ind ) const +{ + QString aResStr; + SalomeApp_Study* aStudy = GetStudy(); + if ( !aStudy ) + return aResStr; + + VISU::TObjectInfo anObjectInfo = VISU::GetObjectByEntry(aStudy, (const char*)entry( ind ).toLatin1()); + VISU::Storable::TRestoringMap aMap = VISU::Storable::GetStorableMap(anObjectInfo.mySObject); + + VISU::Base_i* aBase = anObjectInfo.myBase; + if(aBase){ + VISU::VISUType aType = aBase->GetType(); + if(aType == VISU::TCOLOREDPRS3DHOLDER){ + CORBA::Object_var anObject = ClientSObjectToObject(anObjectInfo.mySObject); + VISU::ColoredPrs3dHolder_var aHolder = VISU::ColoredPrs3dHolder::_narrow(anObject); + aType = aHolder->GetPrsType(); + } + switch (aType) { + ENUM2STRING( aResStr, VISU::TVISUGEN ); + ENUM2STRING( aResStr, VISU::TRESULT ); + ENUM2STRING( aResStr, VISU::TTABLE ); + ENUM2STRING( aResStr, VISU::TCURVE ); + ENUM2STRING( aResStr, VISU::TCONTAINER ); + ENUM2STRING( aResStr, VISU::TMESH ); + ENUM2STRING( aResStr, VISU::TSCALARMAP ); + ENUM2STRING( aResStr, VISU::TISOSURFACES ); + ENUM2STRING( aResStr, VISU::TDEFORMEDSHAPE ); + ENUM2STRING( aResStr, VISU::TSCALARMAPONDEFORMEDSHAPE ); + ENUM2STRING( aResStr, VISU::TCUTPLANES ); + ENUM2STRING( aResStr, VISU::TCUTLINES ); + ENUM2STRING( aResStr, VISU::TVECTORS ); + ENUM2STRING( aResStr, VISU::TSTREAMLINES ); + ENUM2STRING( aResStr, VISU::TPLOT3D ); + ENUM2STRING( aResStr, VISU::TANIMATION ); + } + } - aTypeBox->setLayout(aHBox); - TopLayout->addWidget(aTypeBox, 0, 0); + if(aResStr.isNull()){ + VISU::VISUType aType = VISU::Storable::RestoringMap2Type(aMap); + switch (aType) { + ENUM2STRING( aResStr, VISU::TENTITY ); + ENUM2STRING( aResStr, VISU::TFAMILY ); + ENUM2STRING( aResStr, VISU::TGROUP ); + ENUM2STRING( aResStr, VISU::TVIEW3D ); + ENUM2STRING( aResStr, VISU::TFIELD ); + ENUM2STRING( aResStr, VISU::TTIMESTAMP ); + } + } - QWidget* aNamePane = new QWidget (this); - QGridLayout* aNameLay = new QGridLayout (aNamePane); + if(aResStr.isNull()){ + bool anIsExist; + QString aVal = VISU::Storable::FindValue(aMap, "myComment", &anIsExist); + if ( anIsExist && aVal != "MESH" ) + aResStr = "VISU::T" + aVal; + } - QLabel* aMeshLbl = new QLabel (tr("MESH_NAME_LBL"), aNamePane); - myMeshName = new QLabel (aNamePane); + return aResStr; +} - QLabel* aFieldLbl = new QLabel (tr("FIELD_NAME_LBL"), aNamePane); - myFieldName = new QLabel (aNamePane); - aNameLay->addWidget(aMeshLbl, 0, 0); - aNameLay->addWidget(myMeshName, 0, 1); - aNameLay->addWidget(aFieldLbl, 1, 0); - aNameLay->addWidget(myFieldName, 1, 1); +//--------------------------------------------------------------- +QString VisuGUI_Selection::nbComponents( const int ind ) const +{ + QString aResStr; + SalomeApp_Study* aStudy = GetStudy(); + if ( !aStudy ) + return aResStr; + + VISU::TObjectInfo anObjectInfo = VISU::GetObjectByEntry(aStudy, (const char*)entry( ind ).toLatin1()); + VISU::Storable::TRestoringMap aMap = VISU::Storable::GetStorableMap(anObjectInfo.mySObject); + + bool isExist; + QString aVal = VISU::Storable::FindValue(aMap,"myNumComponent",&isExist); + if ( isExist ) + aResStr = aVal; + return aResStr; +} - TopLayout->addWidget(aNamePane, 1, 0); - myWidgetStack = new QStackedWidget (this); +//--------------------------------------------------------------- +QString VisuGUI_Selection::resolutions( const int ind ) const +{ + QString aResStr; + SalomeApp_Study* aStudy = GetStudy(); + if ( !aStudy ) + return aResStr; - // Create Points pane - myPointsPane = new QWidget (myWidgetStack); - QVBoxLayout* aVBoxLayout = new QVBoxLayout(myPointsPane); + VISU::TObjectInfo anObjectInfo = VISU::GetObjectByEntry(aStudy, entry( ind ).toLatin1().data()); + VISU::Storable::TRestoringMap aMap = VISU::Storable::GetStorableMap(anObjectInfo.mySObject); - QGroupBox* aDataGrp = new QGroupBox ( tr("POINT_DATA_TITLE"), myPointsPane); - QGridLayout* aGridLay = new QGridLayout (aDataGrp); - aGridLay->setSpacing(6); + bool isExist; + QString aVal = VISU::Storable::FindValue(aMap,"myResolutions",&isExist); + if ( isExist ) + aResStr = aVal; - aGridLay->addWidget( new QLabel (tr("DATA_ID_LBL"), aDataGrp) , 0, 0 ); - aGridLay->addWidget( new QLabel (tr("DATA_SCALAR_LBL"), aDataGrp), 1, 0 ); - aGridLay->addWidget( new QLabel (tr("DATA_VECTOR_LBL"), aDataGrp), 2, 0 ); - - myIDValLbl = new QLineEdit ("", aDataGrp); - aGridLay->addWidget( myIDValLbl, 0, 1 ); - QIntValidator* aIntValidator = new QIntValidator (myIDValLbl); - aIntValidator->setBottom(0); - myIDValLbl->setValidator(aIntValidator); - connect(myIDValLbl, SIGNAL(textChanged(const QString&)), this, SLOT(onPointIdEdit(const QString&))); - - myScalarValLbl = new QLabel ("", aDataGrp); - aGridLay->addWidget( myScalarValLbl, 1, 1 ); - - myVectorValLbl = new QLabel ("", aDataGrp); - myVectorValLbl->setMinimumWidth(150); - aGridLay->addWidget( myVectorValLbl, 2, 1 ); - - aVBoxLayout->addWidget( aDataGrp ); - - QGroupBox* aCoordGrp = new QGroupBox ( tr("POINT_COORD_TITLE"), myPointsPane); - aGridLay = new QGridLayout (aCoordGrp); - aGridLay->setSpacing(6); - - aGridLay->addWidget( new QLabel ("X:", aCoordGrp), 0, 0 ); - myXValLbl = new QLabel ("", aCoordGrp); - aGridLay->addWidget( myXValLbl, 0, 1 ); - //ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - aGridLay->addWidget( new QLabel ("I:", aCoordGrp), 0, 2 ); - myIValLbl = new QLabel ("-", aCoordGrp); - aGridLay->addWidget( myIValLbl, 0, 3 ); - //ENK: 23.11.2006 - aGridLay->addWidget( new QLabel ("Y:", aCoordGrp), 1, 0 ); - myYValLbl = new QLabel ("", aCoordGrp); - aGridLay->addWidget( myYValLbl, 1, 1 ); - //ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - aGridLay->addWidget( new QLabel ("J:", aCoordGrp), 1, 2 ); - myJValLbl = new QLabel ("-", aCoordGrp); - aGridLay->addWidget( myJValLbl, 1, 3 ); - //ENK: 23.11.2006 - aGridLay->addWidget( new QLabel ("Z:",aCoordGrp ), 2, 0 ); - myZValLbl = new QLabel ("", aCoordGrp); - aGridLay->addWidget( myZValLbl, 2, 1 ); - //ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - aGridLay->addWidget( new QLabel ("K:", aCoordGrp), 2, 2 ); - myKValLbl = new QLabel ("-", aCoordGrp); - aGridLay->addWidget( myKValLbl, 2, 3 ); - //ENK: 23.11.2006 - - aVBoxLayout->addWidget( aCoordGrp ); - - myWidgetStack->addWidget(myPointsPane); - - // Create Cells pane - myCellsPane = new QWidget (myWidgetStack); - QGridLayout* aCellLayout = new QGridLayout (myCellsPane); - aCellLayout->setSpacing(6); - aCellLayout->setRowStretch(0, 0); - aCellLayout->setRowStretch(1, 1); - - QGroupBox* aCellGrp = new QGroupBox( tr("CELL_DATA_TITLE"), myCellsPane); - aGridLay = new QGridLayout (aCellGrp); - - aGridLay->addWidget( new QLabel (tr("DATA_ID_LBL"), aCellGrp), 0, 0); - myCellIDValLbl = new QLineEdit ("", aCellGrp); - myCellIDValLbl->setValidator(aIntValidator); - aGridLay->addWidget( myCellIDValLbl, 0, 1); - connect(myCellIDValLbl, SIGNAL(textChanged(const QString&)), this, SLOT(onCellIdEdit(const QString&))); - - aGridLay->addWidget( new QLabel (tr("DATA_SCALAR_LBL"), aCellGrp), 1, 0); - myCellScalarValLbl = new QLabel ("", aCellGrp); - aGridLay->addWidget( myCellScalarValLbl, 1, 1); - aGridLay->addWidget( new QLabel (tr("DATA_VECTOR_LBL"), aCellGrp), 2, 0); - myCellVectorValLbl = new QLabel ("", aCellGrp); - aGridLay->addWidget(myCellVectorValLbl , 2, 1); - - aCellLayout->addWidget(aCellGrp, 0, 0); - - myListPoints = new QTableWidget (myCellsPane); - myListPoints->setEditTriggers( QAbstractItemView::NoEditTriggers ); - myListPoints->setColumnCount(9); - myListPoints->setRowCount(0); - myListPoints->setColumnWidth(0, 40); - myListPoints->setColumnWidth(1, 40); - myListPoints->setColumnWidth(2, 40); - myListPoints->setColumnWidth(3, 40); - myListPoints->setColumnWidth(4, 40);//ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - myListPoints->setColumnWidth(5, 40);//ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - myListPoints->setColumnWidth(6, 40);//ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - myListPoints->setSelectionMode(QAbstractItemView::NoSelection); - - QStringList aLabels; - aLabels.append( "ID" ); - aLabels.append( "X" ); - aLabels.append( "Y" ); - aLabels.append( "Z" ); - aLabels.append( "I" );//ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - aLabels.append( "J" );//ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - aLabels.append( "K" );//ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - aLabels.append( tr("CELL_DATA_SCALAR_HDR") ); - aLabels.append( tr("CELL_DATA_VECTOR_HDR") ); - myListPoints->setHorizontalHeaderLabels( aLabels ); - - aCellLayout->addWidget(myListPoints, 1, 0); - - myWidgetStack->addWidget(myCellsPane); - - // Actor Pane - myActorsPane = new QWidget (myWidgetStack); - aVBoxLayout = new QVBoxLayout(myActorsPane); - aVBoxLayout->setSpacing(6); - - QGroupBox* aPosGrp = new QGroupBox (tr("ACTOR_DATA_POSITION_TITLE"), myActorsPane); - aGridLay = new QGridLayout (aPosGrp); - aGridLay->setSpacing(6); - aGridLay->addWidget( new QLabel ("X:", aPosGrp), 0, 0); - myXPosLbl = new QLabel ("0", aPosGrp); - aGridLay->addWidget( myXPosLbl, 0, 1); - aGridLay->addWidget( new QLabel ("Y:", aPosGrp), 1, 0); - myYPosLbl = new QLabel ("0", aPosGrp); - aGridLay->addWidget( myYPosLbl, 1, 1); - aGridLay->addWidget( new QLabel ("Z:", aPosGrp), 2, 0); - myZPosLbl = new QLabel ("0", aPosGrp); - aGridLay->addWidget( myZPosLbl, 2, 1); - - aVBoxLayout->addWidget( aPosGrp ); - - QGroupBox* aSizeGrp = new QGroupBox ( tr("ACTOR_DATA_SIZE_TITLE"), myActorsPane); - aGridLay = new QGridLayout (aSizeGrp); - aGridLay->setSpacing(6); - aGridLay->addWidget( new QLabel ("dX:", aSizeGrp ), 0, 0); - myDXLbl = new QLabel ("0", aSizeGrp); - aGridLay->addWidget( myDXLbl, 0, 1); - aGridLay->addWidget( new QLabel ("dY:", aSizeGrp ), 1, 0); - myDYLbl = new QLabel ("0", aSizeGrp); - aGridLay->addWidget( myDYLbl, 1, 1); - aGridLay->addWidget( new QLabel ("dZ:", aSizeGrp ), 2, 0); - myDZLbl = new QLabel ("0", aSizeGrp); - aGridLay->addWidget( myDZLbl, 2, 1); - - aVBoxLayout->addWidget( aSizeGrp ); - - myWidgetStack->addWidget(myActorsPane); - - - TopLayout->addWidget(myWidgetStack, 2, 0); - - // Create buttons group - QWidget* aBtnBox = new QWidget (this); - QHBoxLayout* aBtnLayout = new QHBoxLayout( aBtnBox); - aBtnLayout->addStretch(); - - QPushButton* aCloseBtn = new QPushButton (tr("BUT_CLOSE"), aBtnBox); - aBtnLayout->addWidget(aCloseBtn); - connect(aCloseBtn, SIGNAL(clicked()), this, SLOT(close())); - - QPushButton* aHelpBtn = new QPushButton (tr("BUT_HELP"), aBtnBox); - aBtnLayout->addWidget(aHelpBtn); - connect(aHelpBtn, SIGNAL(clicked()), this, SLOT(onHelp())); - - TopLayout->addWidget(aBtnBox, 3, 0); - - SalomeApp_Application* anApp = dynamic_cast - (SUIT_Session::session()->activeApplication()); - mySelectionMgr = anApp->selectionMgr(); - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(onSelectionEvent())); - - //connect(visuGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(close())); - - myFl = false; - - // Activate Points pane - myWidgetStack->setCurrentWidget(myPointsPane); - if (SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow(myModule)) - aViewWindow->SetSelectionMode(NodeSelection); - onSelectionEvent(); + return aResStr; } -VisuGUI_SelectionDlg::~VisuGUI_SelectionDlg() + +//--------------------------------------------------------------- +QString VisuGUI_Selection::resolution( const int ind, char theResoltuion ) const { - SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow(myModule); - if ( !aViewWindow ) - return; + QString aResStr; - switch ( aViewWindow->SelectionMode() ) { - case NodeSelection: - case CellSelection: - aViewWindow->SetSelectionMode(ActorSelection); - break; - } + QString aResolutions = resolutions( ind ); + if(aResolutions.isEmpty()) + return aResStr; + + if(aResolutions.indexOf(theResoltuion) != -1) + aResStr = "1"; + else + aResStr = "0"; + + return aResStr; } -void VisuGUI_SelectionDlg::onSelectionChange (int theId) -{ - SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow(myModule); - if (!aViewWindow) return; - - switch (theId) { - case 0: // Points - myWidgetStack->setCurrentWidget(myPointsPane); - aViewWindow->SetSelectionMode(NodeSelection); - onPointIdEdit(myIDValLbl->text()); - break; - case 1: // Cells - myWidgetStack->setCurrentWidget(myCellsPane); - aViewWindow->SetSelectionMode(CellSelection); - onCellIdEdit(myCellIDValLbl->text()); - break; - case 2: // Actor - myWidgetStack->setCurrentWidget(myActorsPane); - aViewWindow->SetSelectionMode(ActorSelection); - onSelectionEvent(); - } + +//--------------------------------------------------------------- +QString VisuGUI_Selection::fullResolution( const int ind ) const +{ + return resolution( ind, 'F'); } -void VisuGUI_SelectionDlg::closeEvent (QCloseEvent* theEvent) +//--------------------------------------------------------------- +QString VisuGUI_Selection::mediumResolution( const int ind ) const { - QDialog::closeEvent(theEvent); + return resolution( ind, 'M'); } -template QString getValue(TData* theData, int theId){ - if (vtkDataArray *aScalar = theData->GetScalars()){ - vtkFloatingPointType aVal = aScalar->GetTuple1(theId); - return QString::number(aVal); - } else { - return QString("No data"); + +//--------------------------------------------------------------- +QString VisuGUI_Selection::lowResolution( const int ind ) const +{ + return resolution( ind, 'L'); +} + + +//--------------------------------------------------------------- +QString VisuGUI_Selection::resolutionState( const int ind ) const +{ + QString aResStr; + SalomeApp_Study* aStudy = GetStudy(); + if ( !aStudy ) + return aResStr; + + VISU::TObjectInfo anObjectInfo = VISU::GetObjectByEntry(aStudy, entry( ind ).toLatin1().data()); + VISU::Storable::TRestoringMap aMap = VISU::Storable::GetStorableMap(anObjectInfo.mySObject); + + bool isExist; + QString aVal = VISU::Storable::FindValue(aMap,"myState",&isExist); + if ( isExist ) { + if ( aVal.toInt() == VISU::Result::FULL ) + aResStr = "F"; + if ( aVal.toInt() == VISU::Result::MEDIUM ) + aResStr = "M"; + if ( aVal.toInt() == VISU::Result::LOW ) + aResStr = "L"; + if ( aVal.toInt() == VISU::Result::HIDDEN ) + aResStr = "H"; } + + return aResStr; } -template QString getVector(TData* theData, int theId){ - if (vtkDataArray *aVector = theData->GetVectors()) { - vtkFloatingPointType *aVal = aVector->GetTuple3(theId); - return QString("%1; %2; %3").arg(aVal[0]).arg(aVal[1]).arg(aVal[2]); - } else { - return QString("No data"); + +//--------------------------------------------------------------- +QString VisuGUI_Selection::medEntity( const int ind ) const +{ + SalomeApp_Study* aStudy = GetStudy(); + if ( !aStudy ) + return QString(); + + VISU::TObjectInfo anObjectInfo = VISU::GetObjectByEntry(aStudy, (const char*)entry( ind ).toLatin1()); + VISU::Storable::TRestoringMap aMap = VISU::Storable::GetStorableMap(anObjectInfo.mySObject); + + bool isExist; + QString aVal = VISU::Storable::FindValue(aMap,"myEntityId",&isExist); + if ( isExist ) { + using namespace VISU; + TEntity anEntityId = TEntity(aVal.toInt()); + switch(anEntityId){ + case NODE_ENTITY : + return "NODE_ENTITY"; + case EDGE_ENTITY : + return "EDGE_ENTITY"; + case FACE_ENTITY : + return "FACE_ENTITY"; + case CELL_ENTITY : + return "CELL_ENTITY"; + default: + return QString(); + } } + return QString(); } -#define ABS(a) (a>=0)?a:-a - -void VisuGUI_SelectionDlg::onSelectionEvent() { - SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow(myModule); - if (!aViewWindow) - return; - - switch (aViewWindow->SelectionMode()) { - case NodeSelection: - case CellSelection: - case ActorSelection: - break; - default: - close(); - delete this; - return; +QString VisuGUI_Selection::medSource( const int ind ) const +{ + _PTR(Study) aStudyDS = GetStudy()->studyDS(); + if(_PTR(SObject) aSObject = aStudyDS->FindObjectID((const char*)entry(ind).toLatin1())){ + VISU::Result_var aRes; + if(VISU::Result_i* aResult = CheckResult(myModule,aSObject,aRes)){ + using namespace VISU; + Result_i::ECreationId aCreationId = aResult->GetCreationId(); + switch(aCreationId){ + case Result_i::eImportFile : + return "eImportFile"; + case Result_i::eCopyAndImportFile : + return "eCopyAndImportFile"; + case Result_i::eImportMed : + return "eImportMed"; + case Result_i::eImportMedField : + return "eImportMedField"; + default: + return QString(); + } + } } + return QString(); +} - if (myFl) - return; - myFl = true; +QString VisuGUI_Selection::nbTimeStamps( const int ind ) const +{ + QString aResStr; + SalomeApp_Study* aStudy = GetStudy(); + if ( !aStudy ) + return aResStr; + + VISU::TObjectInfo anObjectInfo = VISU::GetObjectByEntry(aStudy, (const char*)entry( ind ).toLatin1()); + VISU::Storable::TRestoringMap aMap = VISU::Storable::GetStorableMap(anObjectInfo.mySObject); + + bool isExist; + const QString& aVal = VISU::Storable::FindValue(aMap,"myNbTimeStamps",&isExist); + if ( isExist ) + aResStr = aVal; + return aResStr; +} - int aType = myWidgetStack->indexOf(myWidgetStack->currentWidget()); - SVTK_Selector* aSelector = aViewWindow->GetSelector(); +//---------------------------------------------------------------------------- +template +struct TPopupDispatcher +{ + QString + operator()(const SalomeApp_Module* theModule, + const QString& theEntry) + { + if(SUIT_ViewManager* aViewManager = theModule->getApp()->activeViewManager()){ + QString aType = aViewManager->getType(); + TPopupFunctor aFunctor; + if(aType == SVTK_Viewer::Type()) + return aFunctor.template Get(theModule, theEntry); + //else if(aType == VVTK_Viewer::Type()) + //return aFunctor.template Get(theModule, theEntry); + } + return QString(); + } +}; + + +//---------------------------------------------------------------------------- +template +bool +GetPrs3dSelectionInfo(const SalomeApp_Module* theModule, + const QString& theEntry, + VISU::Prs3d_i*& thePrs3d, + SVTK_ViewWindow*& theViewWindow, + VISU_Actor*& thenActor) +{ + VISU::TObjectInfo anObjectInfo = VISU::GetObjectByEntry(GetAppStudy(theModule), (const char*)theEntry.toLatin1()); + thePrs3d = GetPrs3dFromBase(anObjectInfo.myBase); + if(!thePrs3d) + return false; + + typedef typename TViewer::TViewWindow TViewWindow; + theViewWindow = GetActiveViewWindow(theModule); + if(!theViewWindow) + return false; + + thenActor = FindActor(theViewWindow, thePrs3d); + if(!thenActor) + return false; + + return true; +} - _PTR(SObject) aSObject; - VISU::Prs3d_i* aPrs3d = NULL; - Handle(SALOME_InteractiveObject) anIO; - VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects(myModule); - if(aSelectionInfo.size() == 1){ - // Get selected SObject - VISU::TSelectionItem aSelectionItem = aSelectionInfo.front(); - VISU::TObjectInfo anObjectInfo = aSelectionItem.myObjectInfo; - aPrs3d = GetPrs3dFromBase(anObjectInfo.myBase); - if(aPrs3d){ - anIO = aSelectionItem.myIO; - aSObject = anObjectInfo.mySObject; - } +//---------------------------------------------------------------------------- +struct TViewFunctor +{ + template + QString + Get(const SalomeApp_Module* theModule, + const QString& theEntry) + { + VISU_Actor* anActor = NULL; + VISU::Prs3d_i* aPrs3d = NULL; + SVTK_ViewWindow* aViewWindow = NULL; + if(!GetPrs3dSelectionInfo(theModule, theEntry, aPrs3d, aViewWindow, anActor)) + return QString(); + + return get(aPrs3d, aViewWindow, anActor); } + QString + virtual + get(VISU::Prs3d_i* thePrs3d, + SVTK_ViewWindow* theViewWindow, + VISU_Actor* theActor) + { + return QString(); + } +}; - if (aPrs3d) { - QString aMeshName("NULL"), aFieldName("NULL"); - if (aSObject) { - VISU::Storable::TRestoringMap aMap = VISU::Storable::GetStorableMap(aSObject); - if (!aMap.empty()) { - aMeshName = VISU::Storable::FindValue(aMap, "myMeshName"); - aFieldName = VISU::Storable::FindValue(aMap, "myFieldName"); - } - } - myMeshName ->setText((aMeshName == "NULL") ? QString("No name") : aMeshName); - myFieldName->setText((aFieldName == "NULL") ? QString("No name") : aFieldName); - - VISU_Actor* anVISUActor = - VISU::FindActor(VISU::GetAppStudy(myModule), aViewWindow, aSObject->GetID().c_str()); - if (anVISUActor) { - vtkFloatingPointType aCoord[6]; - anVISUActor->GetBounds(aCoord); - myXPosLbl->setText(QString::number( aCoord[0] )); - myYPosLbl->setText(QString::number( aCoord[2] )); - myZPosLbl->setText(QString::number( aCoord[4] )); - - myDXLbl->setText(QString::number( ABS(aCoord[1]-aCoord[0]) )); - myDYLbl->setText(QString::number( ABS(aCoord[3]-aCoord[2]) )); - myDZLbl->setText(QString::number( ABS(aCoord[5]-aCoord[4]) )); - - TColStd_IndexedMapOfInteger aMapIndex; - typedef std::vector TCoordArray; - typedef map TPointCoordsMap; - TPointCoordsMap aPointCoordsMap; - - aSelector->GetIndex(anIO, aMapIndex); - - vtkDataSet* aDataSet = anVISUActor->GetMapper()->GetInput(); - vtkPointData* aPntData = aDataSet->GetPointData(); - - for (int ind = 1; ind <= aMapIndex.Extent(); ind++) { - int anID = aMapIndex(ind); - - switch (aType) { - case 0: - { - int aVTKID = anVISUActor->GetNodeVTKID(anID); - if(aVTKID >= 0){ - if ( aVTKID >= 0 ) { - vtkFloatingPointType* aCoord = anVISUActor->GetNodeCoord(anID); - myXValLbl->setText( QString::number( aCoord[0] ) ); - myYValLbl->setText( QString::number( aCoord[1] ) ); - myZValLbl->setText( QString::number( aCoord[2] ) ); - myIDValLbl->setText( QString::number( anID ) ); - - if ( !VISU::IsElnoData( aDataSet ) ) { - myScalarValLbl->setText( getValue( aPntData, aVTKID ) ); - myVectorValLbl->setText( getVector( aPntData, aVTKID ) ); - } else { - myScalarValLbl->setText( "< ELNO data >" ); - myVectorValLbl->setText( "< ELNO data >" ); - } - - const VISU::PIDMapper& aMapper = aPrs3d->GetPipeLine()->GetIDMapper(); - VISU::TStructuredId aStructuredId = aMapper->GetIndexesOfNode( anID ); - myKValLbl->setText( GetNumber( aStructuredId, 2 ) ); - myJValLbl->setText( GetNumber( aStructuredId, 1 ) ); - myIValLbl->setText( GetNumber( aStructuredId, 0 ) ); - } - } - break; - } - case 1: - { - vtkCellData* aCellData = aDataSet->GetCellData(); - vtkCell* aCell = anVISUActor->GetElemCell(anID); - int aVTKID = anVISUActor->GetElemVTKID(anID); - if (aCell != NULL) { - int aNbOfPoints = aCell->GetNumberOfPoints(); - if ( aNbOfPoints > 0 ) { - myCellIDValLbl->setText( QString::number(anID) ); - myCellScalarValLbl->setText(getValue(aCellData, aVTKID)); - myCellVectorValLbl->setText(getVector(aCellData, aVTKID)); - - vtkIdList *aPointList = aCell->GetPointIds(); - for (int i = 0; i < aNbOfPoints; i++) { - int aNodeVTKId = aPointList->GetId(i); - vtkFloatingPointType* aCoord = aDataSet->GetPoint(aNodeVTKId); - vtkIdType aNodeObjId = anVISUActor->GetNodeObjId(aNodeVTKId); - TCoordArray aCoordArray(aCoord, aCoord + 3); - aPointCoordsMap[aNodeObjId] = aCoordArray; - } - } - } - } - break; - } - } +//---------------------------------------------------------------------------- +struct TGetRepesentationFunctor: TViewFunctor +{ + QString + virtual + get(VISU::Prs3d_i* thePrs3d, + SVTK_ViewWindow* theViewWindow, + VISU_Actor* theActor) + { + QString aResStr; + switch (theActor->GetRepresentation()) { + ENUM2STRING( aResStr, VISU::POINT ); + ENUM2STRING( aResStr, VISU::WIREFRAME ); + ENUM2STRING( aResStr, VISU::SHADED ); + ENUM2STRING( aResStr, VISU::INSIDEFRAME ); + ENUM2STRING( aResStr, VISU::SURFACEFRAME ); + ENUM2STRING( aResStr, VISU::FEATURE_EDGES ); + } + return aResStr; + } +}; + +QString VisuGUI_Selection::representation( const int ind ) const +{ + return TPopupDispatcher()(myModule, entry(ind)); +} + +//---------------------------------------------------------------------------- +SalomeApp_Study* VisuGUI_Selection::GetStudy() const + +{ + LightApp_Study* aLightStudy = const_cast( study() ); + return dynamic_cast( aLightStudy ); +} - myListPoints->setRowCount(aPointCoordsMap.size()); - TPointCoordsMap::const_iterator anIter = aPointCoordsMap.begin(); - - const VISU::PIDMapper& aMapper = aPrs3d->GetPipeLine()->GetIDMapper(); - for (int i = 0; anIter != aPointCoordsMap.end() && i < myListPoints->rowCount(); anIter++, i++) { - myListPoints->model()->setHeaderData( i, Qt::Vertical, QVariant(QString::number( i )), Qt::DisplayRole ); - vtkIdType aNodeObjId = anIter->first; - //ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - VISU::TStructuredId aStructuredId = aMapper->GetIndexesOfNode(aNodeObjId); - QString aI = GetNumber(aStructuredId, 0); - QString aJ = GetNumber(aStructuredId, 1); - QString aK = GetNumber(aStructuredId, 2); - //ENK: 23.11.2006 - - QAbstractItemModel* aModel = myListPoints->model(); - aModel->setData( aModel->index(i,0), QVariant(QString::number( aNodeObjId )), Qt::DisplayRole ); - const TCoordArray& aCoordArray = anIter->second; - aModel->setData( aModel->index(i,1), QVariant(QString::number( aCoordArray[0] )), Qt::DisplayRole ); - aModel->setData( aModel->index(i,2), QVariant(QString::number( aCoordArray[1] )), Qt::DisplayRole ); - aModel->setData( aModel->index(i,3), QVariant(QString::number( aCoordArray[2] )), Qt::DisplayRole ); - aModel->setData( aModel->index(i,4), QVariant( aI ), Qt::DisplayRole );//ENK: 23.11.2006 - PAL13176 - aModel->setData( aModel->index(i,5), QVariant( aJ ), Qt::DisplayRole );//ENK: 23.11.2006 - PAL13176 - aModel->setData( aModel->index(i,6), QVariant( aK ), Qt::DisplayRole );//ENK: 23.11.2006 - PAL13176 - - vtkIdType aNodeVTKId = anVISUActor->GetNodeVTKID(aNodeObjId); - aModel->setData( aModel->index(i,7), QVariant(getValue(aPntData, aNodeVTKId)), Qt::DisplayRole ); - aModel->setData( aModel->index(i,8), QVariant(getVector(aPntData, aNodeVTKId)), Qt::DisplayRole ); +//---------------------------------------------------------------------------- +int VisuGUI_Selection::nbChild( const int ind, const bool named ) const +{ + int cnt = 0; + SalomeApp_Study* aSStudy = GetStudy(); + if ( !aSStudy ) + return cnt; + _PTR(Study) aStudy = GetCStudy( aSStudy ); + if ( aStudy ){ + _PTR(SObject) SO = aStudy->FindObjectID( (const char*)entry( ind ).toLatin1() ); + if ( SO ){ + for ( _PTR(ChildIterator) Iter = aStudy->NewChildIterator( SO ); Iter->More(); Iter->Next() ) { + _PTR(SObject) refSO; + if ( !Iter->Value()->ReferencedObject( refSO ) && ( !named || Iter->Value()->GetName().size() ) ) + cnt++; } - //for(int aColumnId = 0; aColumnId < 9; aColumnId++) - myListPoints->resizeColumnsToContents(); } - } else { - clearFields(); } - myFl = false; + return cnt; } -#undef ABS - - -void VisuGUI_SelectionDlg::clearFields() { - int aType = myWidgetStack->indexOf(myWidgetStack->currentWidget()); - switch (aType) { - case 0: - myXValLbl->setText( "" ); - myYValLbl->setText( "" ); - myZValLbl->setText( "" ); - myIValLbl->setText( "-" );//ENK: 23.11.2006 - PAL13176 - myJValLbl->setText( "-" );//ENK: 23.11.2006 - PAL13176 - myKValLbl->setText( "-" );//ENK: 23.11.2006 - PAL13176 - myScalarValLbl->setText(""); - myVectorValLbl->setText(""); - break; - case 1: - myCellScalarValLbl->setText(""); - myCellVectorValLbl->setText(""); - myListPoints->setRowCount(0); - break; - case 2: - myXPosLbl->setText(""); - myYPosLbl->setText(""); - myZPosLbl->setText(""); - myDXLbl->setText(""); - myDYLbl->setText(""); - myDZLbl->setText(""); - } + +//---------------------------------------------------------------------------- +QString VisuGUI_Selection::nbChildren( const int ind ) const +{ + QString aResStr; + aResStr.setNum( nbChild( ind, false ) ); + return aResStr; +} + +//---------------------------------------------------------------------------- +QString VisuGUI_Selection::nbNamedChildren( const int ind ) const +{ + QString aResStr; + aResStr.setNum( nbChild( ind, true ) ); + return aResStr; } -typedef vtkIdType (VISU_PipeLine::* TGetVTKIdMethod)(vtkIdType theID); -bool onIdEdit (const QString& theText, - TGetVTKIdMethod theMethod, - bool theIsCell, - const SalomeApp_Module* theModule, - QLabel* theMeshName, - QString theValue, - QLabel* theFieldName) +//---------------------------------------------------------------------------- +struct TIsVisibleFunctor: TViewFunctor { - SVTK_ViewWindow* aViewWindow = VISU::GetActiveViewWindow(theModule); - if (!aViewWindow) - return false; - SVTK_Selector* aSelector = aViewWindow->GetSelector(); - - _PTR(SObject) aSObject; - VISU::Prs3d_i* aPrs3d = NULL; - Handle(SALOME_InteractiveObject) anIO; - - VISU::TSelectionInfo aSelectionInfo = VISU::GetSelectedObjects(theModule); - if(aSelectionInfo.size() == 1){ - // Get selected SObject - VISU::TSelectionItem aSelectionItem = aSelectionInfo.front(); - VISU::TObjectInfo anObjectInfo = aSelectionItem.myObjectInfo; - aPrs3d = GetPrs3dFromBase(anObjectInfo.myBase); - if(aPrs3d){ - anIO = aSelectionItem.myIO; - aSObject = anObjectInfo.mySObject; - } + QString + virtual + get(VISU::Prs3d_i* thePrs3d, + SVTK_ViewWindow* theViewWindow, + VISU_Actor* theActor) + { + return theActor->GetVisibility() ? "true" : "false"; } - if (aPrs3d) { - int anObjId = theText.toInt(); - VISU_PipeLine* aPipeLine = aPrs3d->GetPipeLine(); - int aVTKId = (aPipeLine->*theMethod)(anObjId); - if(aVTKId < 0) - return false; - - TColStd_MapOfInteger newIndices; - newIndices.Add(anObjId); - aSelector->AddOrRemoveIndex(anIO, newIndices, false); - aViewWindow->highlight(anIO, true, true); - - return true; - - } else { - theMeshName->setText(theValue); - theFieldName->setText(""); +}; + +QString VisuGUI_Selection::isVisible( const int ind ) const +{ + return TPopupDispatcher()(myModule, entry(ind)); +} + + +//---------------------------------------------------------------------------- +struct TIsShrunkFunctor: TViewFunctor +{ + QString + virtual + get(VISU::Prs3d_i* thePrs3d, + SVTK_ViewWindow* theViewWindow, + VISU_Actor* theActor) + { + return theActor->IsShrunk() ? "1" : "0"; } - return false; +}; + +QString VisuGUI_Selection::isShrunk( const int ind ) const +{ + return TPopupDispatcher()(myModule, entry(ind)); } -void VisuGUI_SelectionDlg::onPointIdEdit (const QString& theText) -{ - if (myFl) return; - TGetVTKIdMethod aMethod = &VISU_PipeLine::GetNodeVTKID; - bool anIsSelected = onIdEdit(theText, - aMethod, - false, - myModule, - myMeshName, - tr("WRN_NO_AVAILABLE_DATA"), - myFieldName); - if (anIsSelected) - // as selection manager doesn't send signal currentSelectionChanged() - onSelectionEvent(); - else - clearFields(); + +//---------------------------------------------------------------------------- +QString VisuGUI_Selection::hasActor( const int ind ) const +{ + return representation( ind ).isEmpty() ? "0" : "1"; } -void VisuGUI_SelectionDlg::onCellIdEdit (const QString& theText) -{ - if (myFl) return; - TGetVTKIdMethod aMethod = &VISU_PipeLine::GetElemVTKID; - bool anIsSelected = onIdEdit(theText, - aMethod, - true, - myModule, - myMeshName, - tr("WRN_NO_AVAILABLE_DATA"), - myFieldName); - if (anIsSelected) - // as selection manager doesn't send signal currentSelectionChanged() - onSelectionEvent(); - else - clearFields(); + +//---------------------------------------------------------------------------- +struct TIsShadingFunctor: TViewFunctor +{ + QString + virtual + get(VISU::Prs3d_i* thePrs3d, + SVTK_ViewWindow* theViewWindow, + VISU_Actor* theActor) + { + if(VISU_ScalarMapAct* anActor = dynamic_cast(theActor)) + return anActor->IsShading() ? "1" : "0"; + return QString(); + } +}; + +QString VisuGUI_Selection::isShading( const int ind ) const +{ + return TPopupDispatcher()(myModule, entry(ind)); } -void VisuGUI_SelectionDlg::onHelp() -{ - QString aHelpFileName = "selection_info_page.html"; - LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); - if (app) - app->onHelpContextModule(myModule ? app->moduleName(myModule->moduleName()) : QString(""), aHelpFileName); - else { - QString platform; -#ifdef WIN32 - platform = "winapplication"; -#else - platform = "application"; -#endif - SUIT_MessageBox::warning(0, QObject::tr("WRN_WARNING"), - QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). - arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(aHelpFileName) ); + +//---------------------------------------------------------------------------- +struct TIsScalarMapActFunctor: TViewFunctor +{ + QString + virtual + get(VISU::Prs3d_i* thePrs3d, + SVTK_ViewWindow* theViewWindow, + VISU_Actor* theActor) + { + return dynamic_cast(theActor)? "1" : "0"; } +}; + + +//--------------------------------------------------------------- +QString VisuGUI_Selection::isScalarMapAct( const int ind ) const +{ + return TPopupDispatcher()(myModule, entry(ind)); } -void VisuGUI_SelectionDlg::keyPressEvent( QKeyEvent* e ) + +//---------------------------------------------------------------------------- +bool VisuGUI_Selection::isVisuComponent( const int ind ) const { - QDialog::keyPressEvent( e ); - if ( e->isAccepted() ) - return; + SalomeApp_Study* study = GetStudy(); + if ( !study ) + return false; + + _PTR(SObject) obj = study->studyDS()->FindObjectID( (const char*)entry( ind ).toLatin1() ); + if ( !obj ) + return false; + CORBA::Object_var anObj = VISU::ClientSObjectToObject( obj ); + if( CORBA::is_nil( anObj ) ) + return false; - if ( e->key() == Qt::Key_F1 ) - { - e->accept(); - onHelp(); - } + return dynamic_cast( VISU::GetServant( anObj ).in() ); } + +//---------------------------------------------------------------------------- +struct TIsValuesLabeled : TViewFunctor +{ + QString + virtual + get(VISU::Prs3d_i* thePrs3d, + SVTK_ViewWindow* theViewWindow, + VISU_Actor* theActor) + { + return theActor && theActor->GetValuesLabeled() ? "true" : "false"; + } +}; + +QString VisuGUI_Selection::isValuesLabeled( const int ind ) const +{ + return TPopupDispatcher()(myModule, entry(ind)); +} + diff --git a/src/VISUGUI/VisuGUI_Selection.h b/src/VISUGUI/VisuGUI_Selection.h index 0e6d2de1..2dcaf666 100644 --- a/src/VISUGUI/VisuGUI_Selection.h +++ b/src/VISUGUI/VisuGUI_Selection.h @@ -1,6 +1,6 @@ // VISU VISUGUI : GUI of VISU component // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // This library is free software; you can redistribute it and/or @@ -22,82 +22,61 @@ // // // File : VisuGUI_Selection.h -// Author : Laurent CORNABE & Hubert ROLLAND +// Author : Sergey Anikin // Module : VISU -// $Header$ #ifndef VisuGUI_Selection_HeaderFile #define VisuGUI_Selection_HeaderFile -#include +#include -class QLabel; -class QStackedWidget; -//class QVBox; -class QLineEdit; -class QTableWidget; -class LightApp_SelectionMgr; -class SalomeApp_Application; -class SalomeApp_Module; +////////////////////////////////////////////////// +// Class: VisuGUI_Selection +////////////////////////////////////////////////// -class VisuGUI_SelectionDlg: public QDialog { - Q_OBJECT +class SalomeApp_Module; +class SalomeApp_Study; +class VisuGUI_Selection : public LightApp_Selection +{ public: - VisuGUI_SelectionDlg (const SalomeApp_Module* theModule); - virtual ~VisuGUI_SelectionDlg (); - -private: - void keyPressEvent( QKeyEvent* e ); - -protected: - void closeEvent (QCloseEvent* theEvent); - -private slots: - void onSelectionChange (int theId); - void onSelectionEvent (); - void onPointIdEdit (const QString& theText); - void onCellIdEdit (const QString& theText); - void onHelp(); + VisuGUI_Selection( SalomeApp_Module* theModule ) + : LightApp_Selection(), myModule( theModule ) {}; + virtual ~VisuGUI_Selection() {}; - private: - void clearFields (); + virtual QVariant parameter( const int, const QString& ) const; - QLabel* myMeshName; - QLabel* myFieldName; - - QStackedWidget* myWidgetStack; - QWidget* myPointsPane; - QWidget* myCellsPane; - QLabel* myXValLbl; - QLabel* myYValLbl; - QLabel* myZValLbl; - //ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing - QLabel* myIValLbl; //!< used for structured mesh selection - QLabel* myJValLbl; //!< used for structured mesh selection - QLabel* myKValLbl; //!< used for structured mesh selection - //ENK: 23.11.2006 - - QLineEdit* myIDValLbl; - QLabel* myScalarValLbl; - QLabel* myVectorValLbl; +private: + QString type( const int ) const; + QString nbComponents( const int ) const; + QString medEntity( const int ) const; + QString medSource( const int ) const; + QString nbTimeStamps( const int ) const; + QString representation( const int ) const; + QString nbChildren( const int ) const; + QString nbNamedChildren( const int ) const; + QString isVisible( const int ) const; + QString isShrunk( const int ) const; + QString hasActor( const int ) const; + QString isShading( const int ) const; + QString isScalarMapAct( const int ) const; + bool isVisuComponent( const int ) const; + QString isValuesLabeled( const int ) const; + + QString fullResolution( const int ) const; + QString mediumResolution( const int ) const; + QString lowResolution( const int ) const; + QString resolutionState( const int ) const; - QTableWidget* myListPoints; - QLineEdit* myCellIDValLbl; - QLabel* myCellScalarValLbl; - QLabel* myCellVectorValLbl; +private: + int nbChild( const int, const bool ) const; + SalomeApp_Study* GetStudy() const; - QWidget* myActorsPane; - QLabel* myXPosLbl; - QLabel* myYPosLbl; - QLabel* myZPosLbl; - QLabel* myDXLbl; - QLabel* myDYLbl; - QLabel* myDZLbl; + QString resolutions( const int ) const; + QString resolution( const int, char theResoltuion ) const; - const SalomeApp_Module* myModule; - LightApp_SelectionMgr* mySelectionMgr; - bool myFl; +private: + SalomeApp_Module* myModule; }; #endif diff --git a/src/VISUGUI/VisuGUI_Slider.cxx b/src/VISUGUI/VisuGUI_Slider.cxx index 64379d60..8db0a28c 100644 --- a/src/VISUGUI/VisuGUI_Slider.cxx +++ b/src/VISUGUI/VisuGUI_Slider.cxx @@ -41,20 +41,21 @@ #include "VISU_Actor.h" -#include "VVTK_MainWindow.h" -#include "VVTK_ViewWindow.h" - #include "VISU_Gen_i.hh" -#include "VisuGUI_Module.h" +#include "VisuGUI.h" #include "VisuGUI_Tools.h" #include "VisuGUI_Prs3dTools.h" #include "VTKViewer_Algorithm.h" #include "SVTK_Functor.h" +#include "QtxDockWidget.h" +#include "QtxDoubleSpinBox.h" + #include #include +#include #include #include #include @@ -64,146 +65,209 @@ #include #include #include +#include +#include +#include #include +#include + +using namespace std; /*! Constructor */ -VisuGUI_Slider::VisuGUI_Slider( VisuGUI_Module* theModule, - VVTK_ViewWindow* theViewWindow, +VisuGUI_Slider::VisuGUI_Slider( VisuGUI* theModule, + QMainWindow* theParent, LightApp_SelectionMgr* theSelectionMgr ) - : QtxToolBar( tr("TOOLBAR_TITLE"), theViewWindow->getMainWindow1() ), - myModule( theModule ), - myMainWindow( theViewWindow->getMainWindow1() ), - mySelectionMgr( theSelectionMgr ) + : QWidget( theParent ) + , myViewManager( VISU::GetVisuGen( theModule )->GetViewManager() ) + , mySelectionMgr( theSelectionMgr ) + , myModule( theModule ) { - //setLabel(); - //setCloseMode(QDockWindow::Undocked); - setMovable( true ); - - VISU::ViewManager_var aViewManager = VISU::GetVisuGen( myModule )->GetViewManager(); - VISU::View_var aView = aViewManager->GetCurrentView(); - if(!CORBA::is_nil(aView.in())) - myView3D = VISU::View3D::_narrow(aView); + setWindowTitle( tr("TITLE") ); + setObjectName( tr("TITLE") ); SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - //setHorizontallyStretchable( true ); - - QWidget* aWidget = new QWidget( this ); - aWidget->setFocusPolicy(Qt::StrongFocus); - myWidgetAction = addWidget( aWidget ); - - QGridLayout* aLayout = new QGridLayout( aWidget ); - aLayout->setMargin( 11 ); - aLayout->setSpacing( 6 ); - - // Slider and time stamps - myFirstTimeStamp = new QLabel( aWidget ); - myFirstTimeStamp->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aLayout->addWidget( myFirstTimeStamp, 0, 0, Qt::AlignHCenter ); - - mySlider = new QSlider( aWidget ); - mySlider->setMinimum( 0 ); - mySlider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - mySlider->setOrientation( Qt::Horizontal ); - mySlider->setTracking( false ); - mySlider->setFocusPolicy(Qt::StrongFocus); - aLayout->addWidget( mySlider, 0, 1, 1, 8 ); - - myLastTimeStamp = new QLabel( aWidget ); - myLastTimeStamp->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aLayout->addWidget( myLastTimeStamp, 0, 9, Qt::AlignHCenter ); - - myTimeStampsNumber = new QLabel( aWidget ); - myTimeStampsNumber->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aLayout->addWidget( myTimeStampsNumber, 0, 10, Qt::AlignHCenter ); - - QLabel* aCacheMemoryLabel = new QLabel( tr( "CACHE_MEMORY" ), aWidget ); - aCacheMemoryLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aLayout->addWidget( aCacheMemoryLabel, 0, 11 ); - - myCacheMemory = new QLabel( aWidget ); - myCacheMemory->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - QFontMetrics fm( myCacheMemory->font() ); - myCacheMemory->setFixedWidth( fm.width( "9.99E+99 Mb" ) ); - - aLayout->addWidget( myCacheMemory, 0, 12 ); - - // Buttons -#ifdef ENABLE_AVI_AND_MORE_BUTTONS - myMoreButton = new QToolButton( aWidget ); - myMoreButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - myMoreButton->setEnabled( false ); - myMoreButton->setCheckble( true ); - myMoreButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_MORE" ) ) ); - QToolTip::add( myMoreButton, tr( "MORE" ) ); - aLayout->addWidget( myMoreButton, 1, 0 ); - - myAVIButton = new QToolButton( aWidget ); - myAVIButton->setEnabled( false ); - myAVIButton->setCheckble( true ); - myAVIButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_AVI" ) ) ); - QToolTip::add( myAVIButton, tr( "AVI" ) ); - aLayout->addWidget( myAVIButton, 1, 1 ); -#endif - - aLayout->addItem( new QSpacerItem( 24, 24, QSizePolicy::Expanding, QSizePolicy::Minimum ), 1, 2 ); - - myFirstButton = new QToolButton( aWidget ); - myFirstButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_FIRST" ) ) ); - aLayout->addWidget( myFirstButton, 1, 3 ); - - myPreviousButton = new QToolButton( aWidget ); - myPreviousButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PREVIOUS" ) ) ); - aLayout->addWidget( myPreviousButton, 1, 4 ); - - myPlayButton = new QToolButton( aWidget ); - myPlayButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PLAY" ) ) ); - myPlayButton->setCheckable( true ); - aLayout->addWidget( myPlayButton, 1, 5 ); - - myNextButton = new QToolButton( aWidget ); - myNextButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_NEXT" ) ) ); - aLayout->addWidget( myNextButton, 1, 6 ); - - myLastButton = new QToolButton( aWidget ); - myLastButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_LAST" ) ) ); - aLayout->addWidget( myLastButton, 1, 7 ); - - aLayout->addItem( new QSpacerItem( 24, 24, QSizePolicy::Expanding, QSizePolicy::Minimum ), 1, 8 ); - - myTimeStampStrings = new QComboBox( aWidget ); - myTimeStampStrings->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - myTimeStampStrings->setFocusPolicy(Qt::StrongFocus); - aLayout->addWidget( myTimeStampStrings, 1, 9 ); - - myTimeStampIndices = new QComboBox( aWidget ); - myTimeStampIndices->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - myTimeStampIndices->setFocusPolicy(Qt::StrongFocus); - aLayout->addWidget( myTimeStampIndices, 1, 10 ); - - // Speed - QLabel* aSpeedLabel = new QLabel( tr( "SPEED" ), aWidget ); - aSpeedLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aLayout->addWidget( aSpeedLabel, 1, 11 ); - - mySpeedBox = new QSpinBox( aWidget ); - mySpeedBox->setMinimum( 1 ); - mySpeedBox->setMaximum( 100 ); - mySpeedBox->setSingleStep( 1 ); - mySpeedBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - mySpeedBox->setFocusPolicy(Qt::StrongFocus); - mySpeedBox->setValue( 50 ); - aLayout->addWidget( mySpeedBox, 1, 12 ); + //---------------------------------------------------------------------------- + QVBoxLayout* aVBoxLayout = new QVBoxLayout( this ); + + QTabWidget* aTabWidget = new QTabWidget( this ); + aTabWidget->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ); + + aVBoxLayout->addWidget( aTabWidget ); + + { + QWidget* aParent = new QWidget(); + { + QGridLayout* aGridLayout = new QGridLayout( aParent ); + { + myFirstTimeStamp = new QLabel( aParent ); + myFirstTimeStamp->setAlignment( Qt::AlignRight | Qt::AlignTrailing | Qt::AlignVCenter ); + myFirstTimeStamp->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); + aGridLayout->addWidget( myFirstTimeStamp, 0, 0, 1, 1 ); + + mySlider = new QSlider( aParent ); + mySlider->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + mySlider->setFocusPolicy( Qt::StrongFocus ); + mySlider->setOrientation( Qt::Horizontal ); + mySlider->setTracking( false ); + mySlider->setMinimum( 0 ); + aGridLayout->addWidget( mySlider, 0, 1, 1, 3 ); + + myLastTimeStamp = new QLabel( aParent ); + aGridLayout->addWidget( myLastTimeStamp, 0, 4, 1, 1 ); + } + { + myFirstButton = new QToolButton( aParent ); + myFirstButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_FIRST" ) ) ); + myFirstButton->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + aGridLayout->addWidget( myFirstButton, 1, 0, 1, 1 ); + + myPreviousButton = new QToolButton( aParent ); + myPreviousButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PREVIOUS" ) ) ); + myPreviousButton->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + aGridLayout->addWidget( myPreviousButton, 1, 1, 1, 1 ); + + myPlayButton = new QToolButton( aParent ); + myPlayButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PLAY" ) ) ); + myPlayButton->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + myPlayButton->setCheckable( true ); + aGridLayout->addWidget( myPlayButton, 1, 2, 1, 1 ); + + myNextButton = new QToolButton( aParent ); + myNextButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_NEXT" ) ) ); + myNextButton->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + aGridLayout->addWidget( myNextButton, 1, 3, 1, 1 ); + + myLastButton = new QToolButton( aParent ); + myLastButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_LAST" ) ) ); + myLastButton->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + aGridLayout->addWidget( myLastButton, 1, 4, 1, 1 ); + } + { + myTimeStampIndexes = new QComboBox( aParent ); + myTimeStampIndexes->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + myTimeStampIndexes->setFocusPolicy( Qt::StrongFocus ); + aGridLayout->addWidget( myTimeStampIndexes, 2, 0, 1, 2 ); + + myIsCycled = new QToolButton( aParent ); + myIsCycled->setText( tr( "IS_CYCLED" ) ); + myIsCycled->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + myIsCycled->setLayoutDirection( Qt::LeftToRight ); + myIsCycled->setCheckable( true ); + //myIsCycled->setEnabled( false ); + aGridLayout->addWidget( myIsCycled, 2, 2, 1, 1 ); + + myTimeStampStrings = new QComboBox( aParent ); + myTimeStampStrings->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); + myTimeStampStrings->setFocusPolicy( Qt::StrongFocus ); + aGridLayout->addWidget( myTimeStampStrings, 2, 3, 1, 2 ); + } + } + + aTabWidget->addTab( aParent, tr( "NAVIGATION_TAB" ) ); + myPlayTab = aParent; + } + + { + QWidget* aParent = new QWidget(); + { + QVBoxLayout* aVBoxLayout = new QVBoxLayout( aParent ); + { + QHBoxLayout* aHBoxLayout = new QHBoxLayout(); + + myMinimalMemoryButton = new QRadioButton( tr( "MINIMAL_MEMORY" ), aParent ); + aHBoxLayout->addWidget( myMinimalMemoryButton ); + + QSpacerItem* aSpacerItem = new QSpacerItem( 16, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); + aHBoxLayout->addItem( aSpacerItem ); + + myLimitedMemoryButton = new QRadioButton( tr( "LIMITED_MEMORY" ), aParent ); + myLimitedMemoryButton->setChecked( true ); + aHBoxLayout->addWidget( myLimitedMemoryButton ); + + myLimitedMemory = new QtxDoubleSpinBox( aParent ); + myLimitedMemory->setMaximum( 10000 ); + myLimitedMemory->setValue( 512 ); + aHBoxLayout->addWidget( myLimitedMemory ); + + QLabel* aMemoryDimensionLabel = new QLabel( aParent ); + aMemoryDimensionLabel->setText( tr( "MEMORY_UNITS" ) ); + aHBoxLayout->addWidget( aMemoryDimensionLabel ); + + aVBoxLayout->addLayout( aHBoxLayout ); + } + { + QHBoxLayout* aHBoxLayout = new QHBoxLayout(); + + QLabel* aUsedMemoryLabel = new QLabel( tr( "USED_BY_CACHE" ), aParent ); + aUsedMemoryLabel->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); + aHBoxLayout->addWidget( aUsedMemoryLabel ); + + myUsedMemory = new QLineEdit( aParent ); + myUsedMemory->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ); + //myUsedMemory->setEnabled( false ); + aHBoxLayout->addWidget( myUsedMemory ); + + QSpacerItem* aSpacerItem = new QSpacerItem( 16, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); + aHBoxLayout->addItem( aSpacerItem ); + + QLabel* aFreeMemoryLabel = new QLabel( tr( "AVAILABLE_MEMORY" ), aParent ); + aHBoxLayout->addWidget( aFreeMemoryLabel ); + + myFreeMemory = new QLineEdit( aParent ); + myFreeMemory->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed ); + //myFreeMemory->setEnabled( false ); + aHBoxLayout->addWidget( myFreeMemory ); + + aVBoxLayout->addLayout( aHBoxLayout ); + } + { + QHBoxLayout* aHBoxLayout = new QHBoxLayout(); + + QLabel* aLabel = new QLabel( tr( "SPEED" ), aParent ); + aLabel->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); + aHBoxLayout->addWidget( aLabel ); + + mySpeedSlider = new QSlider( aParent ); + mySpeedSlider->setMinimum( 1 ); + mySpeedSlider->setMaximum( 100 ); + mySpeedSlider->setValue( mySpeedSlider->maximum() / 2 ); + mySpeedSlider->setPageStep( mySpeedSlider->maximum() / 5 ); + mySpeedSlider->setTickInterval( mySpeedSlider->pageStep() ); + mySpeedSlider->setOrientation( Qt::Horizontal ); + mySpeedSlider->setTickPosition( QSlider::TicksBelow ); + aHBoxLayout->addWidget( mySpeedSlider ); + + aVBoxLayout->addLayout( aHBoxLayout ); + } + + aTabWidget->addTab( aParent, tr( "PROPERTIES_TAB" ) ); + } + } + + { + QSpacerItem* aSpacerItem = new QSpacerItem( 16, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); + aVBoxLayout->addItem( aSpacerItem ); + } + + + //---------------------------------------------------------------------------- + myPlayPixmap = aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PLAY" ) ); + myPausePixmap = aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PAUSE" ) ); myTimer = new QTimer( this ); // Common + connect( theModule, SIGNAL( moduleDeactivated() ), SLOT( onModuleDeactivated() ) ); + + connect( theModule, SIGNAL( moduleActivated() ), SLOT( onModuleActivated() ) ); + connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), SLOT( onSelectionChanged() ) ); connect( myTimeStampStrings, SIGNAL( activated( int ) ), SLOT( onTimeStampActivated( int ) ) ); - connect( myTimeStampIndices, SIGNAL( activated( int ) ), SLOT( onTimeStampActivated( int ) ) ); + connect( myTimeStampIndexes, SIGNAL( activated( int ) ), SLOT( onTimeStampActivated( int ) ) ); connect( myFirstButton, SIGNAL( clicked() ), SLOT( onFirst() ) ); connect( myPreviousButton, SIGNAL( clicked() ), SLOT( onPrevious() ) ); @@ -213,22 +277,85 @@ VisuGUI_Slider::VisuGUI_Slider( VisuGUI_Module* theModule, connect( mySlider, SIGNAL( valueChanged( int ) ), SLOT( onValueChanged( int ) ) ); - connect( mySpeedBox, SIGNAL( valueChanged( int ) ), SLOT( onSpeedChanged( int ) ) ); + connect( mySpeedSlider, SIGNAL( valueChanged( int ) ), SLOT( onSpeedChanged( int ) ) ); connect( myTimer, SIGNAL( timeout() ), SLOT( onTimeout() ) ); + //---------------------------------------------------------------------------- + connect( myLimitedMemoryButton, SIGNAL( toggled( bool ) ), this, SLOT( onMemoryModeChanged( bool ) ) ); + connect( myLimitedMemory, SIGNAL( valueChanged( double ) ), this, SLOT( onMemorySizeChanged( double ) ) ); + + //---------------------------------------------------------------------------- enableControls( false ); - myMainWindow->addToolBar( Qt::BottomToolBarArea, this ); + QtxDockWidget* aQtxDockWidget = new QtxDockWidget( true, theParent ); + theParent->addDockWidget( Qt::BottomDockWidgetArea , aQtxDockWidget ); + aQtxDockWidget->setObjectName( objectName() ); + aQtxDockWidget->setWidget( this ); + + myToggleViewAction = aQtxDockWidget->toggleViewAction(); + myToggleViewAction->setIcon( QIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PANEL" ) ) ) ); + myToggleViewAction->setToolTip( tr( "MEN_SLIDER_PANE" ) ); + myToggleViewAction->setText( tr( "MEN_SLIDER_PANE" ) ); + myToggleViewAction->setCheckable( true ); + aQtxDockWidget->setVisible( false ); + + connect( myToggleViewAction, SIGNAL( toggled( bool ) ), this, SLOT( onToggleView( bool ) ) ); } -/*! - Destructor -*/ + +//---------------------------------------------------------------------------- VisuGUI_Slider::~VisuGUI_Slider() { } + +//---------------------------------------------------------------------------- +QAction* VisuGUI_Slider::toggleViewAction() +{ + return myToggleViewAction; +} + + +//---------------------------------------------------------------------------- +void VisuGUI_Slider::onModuleDeactivated() +{ + setHidden( true ); +} + + +//---------------------------------------------------------------------------- +void VisuGUI_Slider::onModuleActivated() +{ + setHidden( false ); +} + + +//---------------------------------------------------------------------------- +void VisuGUI_Slider::onMemoryModeChanged( bool ) +{ + using namespace VISU; + SALOMEDS::Study_var aStudy = GetDSStudy( GetCStudy( GetAppStudy( myModule ) ) ); + VISU::ColoredPrs3dCache_var aCache = GetVisuGen( myModule )->GetColoredPrs3dCache( aStudy ); + + if ( myLimitedMemoryButton->isChecked() ) { + aCache->SetMemoryMode( VISU::ColoredPrs3dCache::LIMITED ); + aCache->SetLimitedMemory( myLimitedMemory->value() ); + } else + aCache->SetMemoryMode( VISU::ColoredPrs3dCache::MINIMAL ); + + myLimitedMemory->setEnabled( myLimitedMemoryButton->isChecked() ); +} + + +//---------------------------------------------------------------------------- +void VisuGUI_Slider::onMemorySizeChanged( double ) +{ + onMemoryModeChanged( myLimitedMemoryButton->isChecked() ); +} + + +//---------------------------------------------------------------------------- bool VisuGUI_Slider::checkHolderList() { THolderList aHolderList; @@ -243,16 +370,19 @@ bool VisuGUI_Slider::checkHolderList() return myHolderList.empty(); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::enableControls( bool on ) { - widgetForAction( myWidgetAction )->setEnabled( on ); + myPlayTab->setEnabled( on ); + if( on ) { if( checkHolderList() ) return; myTimeStampStrings->clear(); - myTimeStampIndices->clear(); + myTimeStampIndexes->clear(); VISU::ColoredPrs3dHolder_var aHolder = myHolderList.front(); @@ -264,7 +394,6 @@ void VisuGUI_Slider::enableControls( bool on ) myFirstTimeStamp->setText( aTimeStampsRange[0].myTime.in() ); myLastTimeStamp->setText( aTimeStampsRange[aLength-1].myTime.in() ); - myTimeStampsNumber->setText( QString("(") + QString::number( aLength ) + ")" ); int aPageStep = aLength / 10; aPageStep = std::max(aPageStep, 1); @@ -278,7 +407,7 @@ void VisuGUI_Slider::enableControls( bool on ) QString aTime = anInfo.myTime.in(); myTimeStampStrings->addItem( aTime ); - myTimeStampIndices->addItem( QString::number( aNumber ) ); + myTimeStampIndexes->addItem( QString::number( aNumber ) ); if( aNumber == aTimeStampNumber ) a_current_index = an_index; @@ -287,18 +416,31 @@ void VisuGUI_Slider::enableControls( bool on ) myTimeStampStrings->setFont(myTimeStampStrings->font()); myTimeStampStrings->updateGeometry(); - myTimeStampIndices->setFont(myTimeStampStrings->font()); - myTimeStampIndices->updateGeometry(); + myTimeStampIndexes->setFont(myTimeStampStrings->font()); + myTimeStampIndexes->updateGeometry(); if( a_current_index > mySlider->maximum() ) mySlider->setMaximum( aLength-1 ); myTimeStampStrings->setCurrentIndex( a_current_index ); - myTimeStampIndices->setCurrentIndex( a_current_index ); + myTimeStampIndexes->setCurrentIndex( a_current_index ); mySlider->setValue( a_current_index ); if( a_current_index <= mySlider->maximum() ) mySlider->setMaximum( aLength-1 ); + + using namespace VISU; + SALOMEDS::Study_var aStudy = GetDSStudy( GetCStudy( GetAppStudy( myModule ) ) ); + VISU::ColoredPrs3dCache_var aCache = GetVisuGen( myModule )->GetColoredPrs3dCache( aStudy ); + + long aMb = 1024 * 1024; + double aLimitedMemory = aCache->GetLimitedMemory(); + myLimitedMemory->setValue( aLimitedMemory ); + + double aFreeMemory = (double)VISU_PipeLine::GetAvailableMemory( 2048 * aMb ) / (double)aMb; + double anUsedMemory = aCache->GetMemorySize(); + double aLimitedMemoryMax = max( anUsedMemory + aFreeMemory, aLimitedMemory ); + myLimitedMemory->setMaximum( aLimitedMemoryMax ); } else { @@ -307,18 +449,31 @@ void VisuGUI_Slider::enableControls( bool on ) } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::updateMemoryState() { if( checkHolderList() ) return; VISU::ColoredPrs3dHolder_var aHolder = myHolderList.front(); - VISU::ColoredPrs3dCache_var aCache = aHolder->GetCache(); + CORBA::Float aCacheMemory = aCache->GetMemorySize(); - myCacheMemory->setText( QString::number( double( aCacheMemory ), 'E', 2 ) + " Mb" ); + myUsedMemory->setText( QString::number( double( aCacheMemory ), 'E', 2 ) + " Mb" ); + myUsedMemory->setFont( myUsedMemory->font() ); + myUsedMemory->updateGeometry(); + + + long aMb = 1024 * 1024; + double aFreeMemory = (double)VISU_PipeLine::GetAvailableMemory( 2048 * aMb ) / (double)aMb; + myFreeMemory->setText( QString::number( double( aFreeMemory ), 'E', 2 ) + " Mb" ); + myFreeMemory->setFont( myFreeMemory->font() ); + myFreeMemory->updateGeometry(); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onSelectionChanged() { //cout << "VisuGUI_Slider::onSelectionChanged()" << endl; @@ -354,22 +509,31 @@ void VisuGUI_Slider::onSelectionChanged() } } - enableControls( !checkHolderList() ); + VISU::View_var aView = myViewManager->GetCurrentView(); + + enableControls( !checkHolderList() && !CORBA::is_nil( aView.in() ) ); + updateMemoryState(); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onTimeStampActivated( int value ) { mySlider->setValue( value ); onValueChanged( value ); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onFirst() { int value = mySlider->minimum(); mySlider->setValue( value ); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onPrevious() { int value = mySlider->value() - 1; @@ -377,23 +541,35 @@ void VisuGUI_Slider::onPrevious() mySlider->setValue( value ); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onPlay( bool on ) { - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); if( on ) { - myPlayButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PAUSE" ) ) ); + myPlayButton->setIcon( myPausePixmap ); - int delay = int(5000.0 / double(mySpeedBox->value())); + int delay = int( 50.0 * mySpeedSlider->maximum() / mySpeedSlider->value() ); myTimer->start( delay ); } else { myTimer->stop(); - myPlayButton->setIcon( aResourceMgr->loadPixmap( "VISU", tr( "ICON_SLIDER_PLAY" ) ) ); + myPlayButton->setIcon( myPlayPixmap ); + } +} + + +//---------------------------------------------------------------------------- +void VisuGUI_Slider::onToggleView( bool on ) +{ + if ( !on ) { + onPlay( on ); } } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onNext() { int value = mySlider->value() + 1; @@ -401,34 +577,46 @@ void VisuGUI_Slider::onNext() mySlider->setValue( value ); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onLast() { int value = mySlider->maximum(); mySlider->setValue( value ); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onValueChanged( int value ) { - if( checkHolderList() ){ + if ( checkHolderList() ) { enableControls( false ); return; } myTimeStampStrings->setCurrentIndex( value ); - myTimeStampIndices->setCurrentIndex( value ); + myTimeStampIndexes->setCurrentIndex( value ); VISU::ColoredPrs3dHolder_var aHolder = myHolderList.front(); VISU::ColoredPrs3dHolder::TimeStampsRange_var aTimeStampsRange = aHolder->GetTimeStampsRange(); CORBA::Long aLength = aTimeStampsRange->length(); - if(value < 0 || aLength <= value) + if ( value < 0 || aLength <= value ) return; VISU::ColoredPrs3dHolder::BasicInput_var anInput = aHolder->GetBasicInput(); CORBA::Long aTimeStampNumber = anInput->myTimeStampNumber; CORBA::Long aNumber = aTimeStampsRange[ value ].myNumber; - if(aNumber == aTimeStampNumber) + if ( aNumber == aTimeStampNumber ) + return; + + VISU::View_var aView = myViewManager->GetCurrentView(); + if ( CORBA::is_nil( aView.in() ) ) { + enableControls( false ); return; + } + + VISU::View3D_var aView3D = VISU::View3D::_narrow( aView ); THolderList::const_iterator anIter = myHolderList.begin(); THolderList::const_iterator anIterEnd = myHolderList.end(); @@ -444,27 +632,40 @@ void VisuGUI_Slider::onValueChanged( int value ) QApplication::setOverrideCursor(Qt::WaitCursor); - aHolder->Apply( aPrs3d, anInput, myView3D ); + aHolder->Apply( aPrs3d, anInput, aView3D ); QApplication::restoreOverrideCursor(); } + aView3D->Destroy(); + updateMemoryState(); } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onSpeedChanged( int value ) { if(myPlayButton->isChecked()){ - int delay = int(5000.0 / double(mySpeedBox->value())); + int delay = int( 50.0 * mySpeedSlider->maximum() / mySpeedSlider->value() ); myTimer->start( delay ); } } + +//---------------------------------------------------------------------------- void VisuGUI_Slider::onTimeout() { int value = mySlider->value(); - if( value < mySlider->maximum() ) + if ( value < mySlider->maximum() ) { onNext(); - else - myPlayButton->setChecked( false ); + } else { + if ( myIsCycled->isChecked() ) + onFirst(); + else + myPlayButton->setChecked( false ); + } } + + +//---------------------------------------------------------------------------- diff --git a/src/VISUGUI/VisuGUI_Slider.h b/src/VISUGUI/VisuGUI_Slider.h index 1347b650..9bf08483 100644 --- a/src/VISUGUI/VisuGUI_Slider.h +++ b/src/VISUGUI/VisuGUI_Slider.h @@ -28,7 +28,9 @@ #ifndef VisuGUI_Slider_HeaderFile #define VisuGUI_Slider_HeaderFile -#include "QtxToolBar.h" +#include +#include + #include #include "SALOMEconfig.h" @@ -45,24 +47,28 @@ class QLineEdit; class QToolButton; class QSlider; class QSpinBox; +class QCheckBox; +class QRadioButton; +class QMainWindow; class QTimer; class QAction; -class VVTK_ViewWindow; -class VVTK_MainWindow; +class QtxDoubleSpinBox; class LightApp_SelectionMgr; +class VisuGUI; -class VisuGUI_Module; - -class VisuGUI_Slider : public QtxToolBar +class VisuGUI_Slider : public QWidget { - Q_OBJECT + Q_OBJECT; public: - VisuGUI_Slider( VisuGUI_Module* theModule, - VVTK_ViewWindow* theViewWindow, + VisuGUI_Slider( VisuGUI* theModule, + QMainWindow* theParent, LightApp_SelectionMgr* theSelectionMgr ); + virtual ~VisuGUI_Slider(); + + QAction* toggleViewAction(); public slots: virtual void onSelectionChanged(); @@ -81,29 +87,32 @@ public slots: virtual void onTimeout(); + virtual void onToggleView( bool ); + + void onMemoryModeChanged( bool ); + void onMemorySizeChanged( double ); + +protected slots: + void onModuleDeactivated(); + void onModuleActivated(); + protected: virtual void enableControls( bool ); virtual void updateMemoryState(); virtual bool checkHolderList(); private: - VisuGUI_Module* myModule; - VVTK_MainWindow* myMainWindow; LightApp_SelectionMgr* mySelectionMgr; - VISU::View3D_var myView3D; + VISU::ViewManager_var myViewManager; + VisuGUI* myModule; QSlider* mySlider; QLabel* myFirstTimeStamp; QLabel* myLastTimeStamp; - QLabel* myTimeStampsNumber; - QLabel* myCacheMemory; - -#ifdef ENABLE_AVI_AND_MORE_BUTTONS - QToolButton* myMoreButton; - QToolButton* myAVIButton; -#endif + QWidget* myPlayTab; + QToolButton* myIsCycled; QToolButton* myFirstButton; QToolButton* myPreviousButton; QToolButton* myPlayButton; @@ -111,16 +120,24 @@ private: QToolButton* myLastButton; QComboBox* myTimeStampStrings; - QComboBox* myTimeStampIndices; + QComboBox* myTimeStampIndexes; + + QSlider* mySpeedSlider; - QSpinBox* mySpeedBox; + QRadioButton* myMinimalMemoryButton; + QRadioButton* myLimitedMemoryButton; + QtxDoubleSpinBox* myLimitedMemory; - QTimer* myTimer; + QLineEdit* myUsedMemory; + QLineEdit* myFreeMemory; typedef std::vector THolderList; - THolderList myHolderList; + THolderList myHolderList; - QAction* myWidgetAction; + QTimer* myTimer; + QPixmap myPlayPixmap; + QPixmap myPausePixmap; + QAction* myToggleViewAction; }; #endif diff --git a/src/VISUGUI/VisuGUI_Table3dDlg.cxx b/src/VISUGUI/VisuGUI_Table3dDlg.cxx deleted file mode 100644 index 72d1ca18..00000000 --- a/src/VISUGUI/VisuGUI_Table3dDlg.cxx +++ /dev/null @@ -1,829 +0,0 @@ -// VISU VISUGUI : GUI of VISU component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File : VisuGUI_Table3dDlg.cxx -// Author : Laurent CORNABE & Hubert ROLLAND -// - -#include "VisuGUI_Table3dDlg.h" - -#include "VisuGUI.h" -#include "VisuGUI_Tools.h" -#include "VisuGUI_ViewTools.h" -#include "VisuGUI_InputPane.h" - -#include "VISU_ColoredPrs3dFactory.hh" -#include "VISU_ViewManager_i.hh" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SURFACE_PRS_ID 0 -#define CONTOUR_PRS_ID 1 - -//======================================================================= -//function : VisuGUI_Table3DPane -//purpose : -//======================================================================= -VisuGUI_Table3DPane::VisuGUI_Table3DPane( QWidget* parent ) - : QWidget( parent ), - myViewWindow( VISU::GetActiveViewWindow() ), - myPrs( 0 ), - myInitFromPrs( false ) -{ - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setMargin( 11 ); - topLayout->setSpacing( 6 ); - - // scale - QLabel* scaleLabel = new QLabel( tr( "SCALE" ), this ); - ScaleSpn = new QtxDoubleSpinBox( -1.e6, 1.e6, 0.1, this ); - // Presentation type - GBPrsTypeBox = new QGroupBox( tr( "PRESENTATION_TYPE" ), this ); - GBPrsType = new QButtonGroup( GBPrsTypeBox ); - QRadioButton* rb1 = new QRadioButton( tr( "SURFACE" ), GBPrsTypeBox ); - QRadioButton* rb2 = new QRadioButton( tr( "CONTOUR" ), GBPrsTypeBox ); - GBPrsType->addButton( rb1, SURFACE_PRS_ID ); - GBPrsType->addButton( rb2, CONTOUR_PRS_ID ); - QHBoxLayout* GBPrsTypeBoxLayout = new QHBoxLayout( GBPrsTypeBox ); - GBPrsTypeBoxLayout->setMargin( 11 ); - GBPrsTypeBoxLayout->setSpacing( 6 ); - GBPrsTypeBoxLayout->addWidget( rb1 ); - GBPrsTypeBoxLayout->addWidget( rb2 ); - - // nb Contours - QLabel* nbContLabel = new QLabel( tr( "NUMBER_CONTOURS" ), this ); - NbContoursSpn = new QSpinBox( this ); - NbContoursSpn->setMinimum( 1 ); - NbContoursSpn->setMaximum( 999 ); - NbContoursSpn->setSingleStep( 1 ); - - topLayout->addWidget( scaleLabel, 0, 0 ); - topLayout->addWidget( ScaleSpn, 0, 1 ); - topLayout->addWidget( GBPrsTypeBox, 1, 0, 1, 2 ); - topLayout->addWidget( nbContLabel, 2, 0 ); - topLayout->addWidget( NbContoursSpn, 2, 1 ); - topLayout->setRowStretch( 3, 5 ); - - // signals and slots connections - - connect( GBPrsType, SIGNAL( buttonClicked( int ) ), this, SLOT( onPrsType( int ) ) ); -} - -//======================================================================= -//function : destructor -//purpose : -//======================================================================= -VisuGUI_Table3DPane::~VisuGUI_Table3DPane() -{ -} - -//======================================================================= -//function : onPrsType -//purpose : -//======================================================================= -void VisuGUI_Table3DPane::onPrsType( int id ) -{ - NbContoursSpn->setEnabled( id == CONTOUR_PRS_ID ); -} - -//======================================================================= -//function : storeToPrsObject -//purpose : -//======================================================================= -int VisuGUI_Table3DPane::storeToPrsObject( VISU::PointMap3d_i* thePrs ) -{ - // scale - thePrs->SetScaleFactor( ScaleSpn->value() ); - - // prs type - thePrs->SetContourPrs( GBPrsType->checkedId() == CONTOUR_PRS_ID ); - - // nb contours - thePrs->SetNbOfContours( NbContoursSpn->value() ); - - return 1; -} - -//======================================================================= -//function : GetPrs -//purpose : -//======================================================================= -VISU::PointMap3d_i* VisuGUI_Table3DPane::GetPrs() -{ - return myPrs; -} - -//======================================================================= -//function : initFromPrsObject -//purpose : -//======================================================================= -void VisuGUI_Table3DPane::initFromPrsObject( VISU::PointMap3d_i* thePrs ) -{ - myInitFromPrs = true; - myPrs = thePrs; - - // scale - double aScale = thePrs->GetScaleFactor(); - if (aScale<0) - aScale = 0; - ScaleSpn->setValue( aScale ); - - // prs type - int id = thePrs->GetIsContourPrs() ? CONTOUR_PRS_ID : SURFACE_PRS_ID; - GBPrsType->button( id )->setChecked( true ); - onPrsType( id ); - - // nb contours - NbContoursSpn->setValue( thePrs->GetNbOfContours() ); -} - -//======================================================================= -//function : Table Scalar Bar -//purpose : -//======================================================================= - -VisuGUI_TableScalarBarPane::VisuGUI_TableScalarBarPane( QWidget* parent ) - : QWidget( parent ), - myBarPrs( 0 ) -{ - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setSpacing( 6 ); - topLayout->setMargin( 11 ); - - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - QString propertyName; - propertyName = QString( "scalar_bar_vertical_" ); - myVerX = aResourceMgr->doubleValue( "VISU", propertyName + "x", 0. ); - myVerY = aResourceMgr->doubleValue( "VISU", propertyName + "y", 0. ); - myVerW = aResourceMgr->doubleValue( "VISU", propertyName + "width", 0. ); - myVerH = aResourceMgr->doubleValue( "VISU", propertyName + "height", 0. ); - myVerTW = aResourceMgr->integerValue( "VISU", propertyName + "title_width", 0 ); - myVerTH = aResourceMgr->integerValue( "VISU", propertyName + "title_height", 0 ); - myVerLW = aResourceMgr->integerValue( "VISU", propertyName + "label_width", 0 ); - myVerLH = aResourceMgr->integerValue( "VISU", propertyName + "label_height", 0 ); - myVerBW = aResourceMgr->integerValue( "VISU", propertyName + "bar_width", 0 ); - myVerBH = aResourceMgr->integerValue( "VISU", propertyName + "bar_height", 0 ); - - propertyName = QString( "scalar_bar_horizontal_" ); - myHorX = aResourceMgr->doubleValue( "VISU", propertyName + "x", 0. ); - myHorY = aResourceMgr->doubleValue( "VISU", propertyName + "y", 0. ); - myHorW = aResourceMgr->doubleValue( "VISU", propertyName + "width", 0. ); - myHorH = aResourceMgr->doubleValue( "VISU", propertyName + "height", 0. ); - myHorTW = aResourceMgr->integerValue( "VISU", propertyName + "title_width", 0 ); - myHorTH = aResourceMgr->integerValue( "VISU", propertyName + "title_height", 0 ); - myHorLW = aResourceMgr->integerValue( "VISU", propertyName + "label_width", 0 ); - myHorLH = aResourceMgr->integerValue( "VISU", propertyName + "label_height", 0 ); - myHorBW = aResourceMgr->integerValue( "VISU", propertyName + "bar_width", 0 ); - myHorBH = aResourceMgr->integerValue( "VISU", propertyName + "bar_height", 0 ); - - // Range ============================================================ - RangeGroup = new QGroupBox( tr( "SCALAR_RANGE_GRP" ), this ); - QButtonGroup* RangeRB = new QButtonGroup( RangeGroup ); - QGridLayout* RangeGroupLayout = new QGridLayout( RangeGroup ); - RangeGroupLayout->setSpacing( 6 ); - RangeGroupLayout->setMargin( 11 ); - - CBLog = new QCheckBox( tr( "LOGARITHMIC_SCALING" ), RangeGroup ); - - RBFrange = new QRadioButton( tr( "FIELD_RANGE_BTN" ), RangeGroup ); - RBIrange = new QRadioButton( tr( "IMPOSED_RANGE_BTN" ), RangeGroup ); - RangeRB->addButton( RBFrange, 0 ); - RangeRB->addButton( RBIrange, 1 ); - RBFrange->setChecked( true ); - - MinEdit = new QLineEdit( RangeGroup ); - MinEdit->setMinimumWidth( 70 ); - MinEdit->setValidator( new QDoubleValidator( this ) ); - MinEdit->setText( "0.0" ); - QLabel* MinLabel = new QLabel( tr( "LBL_MIN" ), RangeGroup ); - MinLabel->setBuddy( MinEdit ); - - MaxEdit = new QLineEdit( RangeGroup ); - MaxEdit->setMinimumWidth( 70 ); - MaxEdit->setValidator( new QDoubleValidator( this ) ); - MaxEdit->setText( "0.0" ); - QLabel* MaxLabel = new QLabel( tr( "LBL_MAX" ), RangeGroup ); - MaxLabel->setBuddy( MaxEdit ); - - RangeGroupLayout->addWidget( CBLog, 1, 0, 1, 4 ); - RangeGroupLayout->addWidget( RBFrange, 2, 0, 1, 2 ); - RangeGroupLayout->addWidget( RBIrange, 2, 2, 1, 2 ); - RangeGroupLayout->addWidget( MinLabel, 3, 0 ); - RangeGroupLayout->addWidget( MinEdit, 3, 1 ); - RangeGroupLayout->addWidget( MaxLabel, 3, 2 ); - RangeGroupLayout->addWidget( MaxEdit, 3, 3 ); - - // Colors and Labels ======================================================== - QGroupBox* ColLabGroup = new QGroupBox( tr( "COLORS_LABELS_GRP" ), this ); - QHBoxLayout* ColLabGroupLayout = new QHBoxLayout( ColLabGroup ); - ColLabGroupLayout->setSpacing( 6 ); - ColLabGroupLayout->setMargin( 11 ); - - QLabel* ColorLabel = new QLabel( tr( "LBL_NB_COLORS" ), ColLabGroup ); - ColorSpin = new QSpinBox( ColLabGroup ); - ColorSpin->setMinimum( 2 ); - ColorSpin->setMaximum( 256 ); - ColorSpin->setSingleStep( 1 ); - ColorSpin->setMinimumWidth( 70 ); - ColorSpin->setValue( 64 ); - - QLabel* LabelLabel = new QLabel( tr( "LBL_NB_LABELS" ), ColLabGroup ); - LabelSpin = new QSpinBox( ColLabGroup ); - LabelSpin->setMinimum( 2 ); - LabelSpin->setMaximum( 65 ); - LabelSpin->setSingleStep( 1 ); - LabelSpin->setMinimumWidth( 70 ); - LabelSpin->setValue( 5 ); - - ColLabGroupLayout->addWidget( ColorLabel ); - ColLabGroupLayout->addWidget( ColorSpin ); - ColLabGroupLayout->addWidget( LabelLabel ); - ColLabGroupLayout->addWidget( LabelSpin ); - - // Orientation ========================================================== - QGroupBox* OrientGroup = new QGroupBox( tr( "ORIENTATION_GRP" ), this ); - QButtonGroup* OrientRB = new QButtonGroup( OrientGroup ); - QHBoxLayout* OrientGroupLayout = new QHBoxLayout( OrientGroup ); - OrientGroupLayout->setSpacing( 6 ); - OrientGroupLayout->setMargin( 11 ); - - RBvert = new QRadioButton( tr( "VERTICAL_BTN" ), OrientGroup ); - RBhori = new QRadioButton( tr( "HORIZONTAL_BTN" ), OrientGroup ); - OrientRB->addButton( RBvert, 0 ); - OrientRB->addButton( RBhori, 1 ); - RBvert->setChecked( true ); - OrientGroupLayout->addWidget( RBvert ); - OrientGroupLayout->addWidget( RBhori ); - - // Origin =============================================================== - QGroupBox* OriginGroup = new QGroupBox( tr( "ORIGIN_GRP" ), this ); - QHBoxLayout* OriginGroupLayout = new QHBoxLayout( OriginGroup ); - OriginGroupLayout->setSpacing( 6 ); - OriginGroupLayout->setMargin( 11 ); - - QLabel* XLabel = new QLabel( tr( "LBL_X" ), OriginGroup ); - XSpin = new QtxDoubleSpinBox( 0.0, 1.0, 0.1, OriginGroup ); - XSpin->setMinimumWidth( 70 ); - XSpin->setValue( 0.01 ); - - QLabel* YLabel = new QLabel( tr( "LBL_Y" ), OriginGroup ); - YSpin = new QtxDoubleSpinBox( 0.0, 1.0, 0.1, OriginGroup ); - YSpin->setMinimumWidth( 70 ); - YSpin->setValue( 0.01 ); - - OriginGroupLayout->addWidget( XLabel ); - OriginGroupLayout->addWidget( XSpin ); - OriginGroupLayout->addWidget( YLabel ); - OriginGroupLayout->addWidget( YSpin ); - - // Dimensions ========================================================= - QGroupBox* DimGroup = new QGroupBox( tr( "DIMENSIONS_GRP" ), this ); - QHBoxLayout* DimGroupLayout = new QHBoxLayout( DimGroup ); - DimGroupLayout->setSpacing( 6 ); - DimGroupLayout->setMargin( 11 ); - - QLabel* WidthLabel = new QLabel( tr( "LBL_WIDTH" ), DimGroup ); - WidthSpin = new QtxDoubleSpinBox( 0.0, 1.0, 0.1, DimGroup ); - WidthSpin->setMinimumWidth( 70 ); - WidthSpin->setValue( 0.1 ); - - QLabel* HeightLabel = new QLabel( tr( "LBL_HEIGHT" ), DimGroup ); - HeightSpin = new QtxDoubleSpinBox( 0.0, 1.0, 0.1, DimGroup ); - HeightSpin->setMinimumWidth( 70 ); - HeightSpin->setValue( 0.8 ); - - DimGroupLayout->addWidget( WidthLabel ); - DimGroupLayout->addWidget( WidthSpin ); - DimGroupLayout->addWidget( HeightLabel ); - DimGroupLayout->addWidget( HeightSpin ); - - myTextBtn = new QPushButton( tr( "Text properties..." ), this ); - myBarBtn = new QPushButton( tr( "Bar properties..." ), this ); - - // main layout ========================================================= - - topLayout->addWidget( RangeGroup, 0, 0, 1, 2 ); - topLayout->addWidget( ColLabGroup, 1, 0, 1, 2 ); - topLayout->addWidget( OrientGroup, 2, 0, 1, 2 ); - topLayout->addWidget( OriginGroup, 3, 0, 1, 2 ); - topLayout->addWidget( DimGroup, 4, 0, 1, 2 ); - topLayout->addWidget( myTextBtn, 5, 0 ); - topLayout->addWidget( myBarBtn, 5, 1 ); - - // init ================================================================ - - myTextDlg = new VisuGUI_TextPrefDlg( this ); - myTextDlg->setTitleVisible( true ); - myBarDlg = new VisuGUI_BarPrefDlg( this ); - - if ( RBvert->isChecked() ) { - myBarDlg->setRatios( myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH ); - } else { - myBarDlg->setRatios( myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH ); - } - - myBarDlg->setLabelsFormat( aResourceMgr->stringValue( "VISU", propertyName + "label_format", "%-#6.3g" ) ); - myBarDlg->setUnitsVisible( aResourceMgr->booleanValue( "VISU", propertyName + "display_units", true ) ); - - // signals and slots connections =========================================== - connect( RangeRB, SIGNAL( buttonClicked( int ) ), this, SLOT( changeRange( int ) ) ); - connect( OrientRB, SIGNAL( buttonClicked( int ) ), this, SLOT( changeDefaults( int ) ) ); - connect( XSpin, SIGNAL( valueChanged( double ) ), this, SLOT( XYChanged( double ) ) ); - connect( YSpin, SIGNAL( valueChanged( double ) ), this, SLOT( XYChanged( double ) ) ); - connect( myTextBtn, SIGNAL( clicked() ), this, SLOT( onTextPref() ) ); - connect( myBarBtn, SIGNAL( clicked() ), this, SLOT( onBarPref() ) ); - changeDefaults( 0 ); - myIsStoreTextProp = true; - myBusy = false; -} - -//---------------------------------------------------------------------------- - -void VisuGUI_TableScalarBarPane::onBarPref() -{ - if ( RBvert->isChecked() ) - myBarDlg->setRatios( myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH ); - else - myBarDlg->setRatios( myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH ); - if ( myBarDlg->exec() ) { - if ( RBvert->isChecked() ) - myBarDlg->getRatios( myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH ); - else - myBarDlg->getRatios( myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH ); - } -} - -//---------------------------------------------------------------------------- -/** - * Initialise dialog box from presentation object - */ -void VisuGUI_TableScalarBarPane::initFromPrsObject( VISU::PointMap3d_i* thePrs ) -{ - myBarPrs = dynamic_cast( thePrs ); - - if ( !myBarPrs ) - return; - - switch ( myBarPrs->GetScaling() ) { - case VISU::LOGARITHMIC: - CBLog->setChecked( true ); - break; - default: - CBLog->setChecked( false ); - } - - setRange( myBarPrs->GetMin(), myBarPrs->GetMax(), myBarPrs->IsRangeFixed() ); - - setScalarBarData( myBarPrs->GetNbColors(), myBarPrs->GetLabels() ); - - // "Title" - CORBA::String_var aTitle = myBarPrs->GetTitle(); - myTextDlg->setTitleText( aTitle.in() ); - myTitle = aTitle.in(); - - vtkFloatingPointType R, G, B; - myBarPrs->GetTitleColor( R, G, B ); - - setPosAndSize( myBarPrs->GetPosX(), - myBarPrs->GetPosY(), - myBarPrs->GetWidth(), - myBarPrs->GetHeight(), - myBarPrs->GetBarOrientation() ); - - myVerTW = myBarPrs->GetTitleWidth(); - myVerTH = myBarPrs->GetTitleHeight(); - myVerLW = myBarPrs->GetLabelWidth(); - myVerLH = myBarPrs->GetLabelHeight(); - myVerBW = myBarPrs->GetBarWidth(); - myVerBH = myBarPrs->GetBarHeight(); - myBarDlg->setRatios( myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH ); - - myBarDlg->setLabelsFormat( myBarPrs->GetLabelsFormat() ); - myBarDlg->setUnitsVisible( myBarPrs->IsUnitsVisible() ); - - myTextDlg->myTitleFont->SetData( QColor( (int)(R*255.), (int)(G*255.), (int)(B*255.) ), - myBarPrs->GetTitFontType(), - myBarPrs->IsBoldTitle(), - myBarPrs->IsItalicTitle(), - myBarPrs->IsShadowTitle() ); - - // "Labels" - myBarPrs->GetLabelColor( R, G, B ); - - myTextDlg->myLabelFont->SetData( QColor( (int)(R*255.), (int)(G*255.), (int)(B*255.) ), - myBarPrs->GetLblFontType(), - myBarPrs->IsBoldLabel(), - myBarPrs->IsItalicLabel(), - myBarPrs->IsShadowLabel() ); -} - -//---------------------------------------------------------------------------- -/** - * Store values to presentation object - */ -int VisuGUI_TableScalarBarPane::storeToPrsObject( VISU::PointMap3d_i* thePrs ) { - if( !myBarPrs ) - return 0; - - myBarPrs->SetPosition( XSpin->value(), YSpin->value() ); - myBarPrs->SetSize( WidthSpin->value(), HeightSpin->value() ); - - myBarPrs->SetRatios( myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH ); - - myBarPrs->SetLabelsFormat( myBarDlg->getLabelsFormat().toLatin1().constData() ); - myBarPrs->SetUnitsVisible( myBarDlg->isUnitsVisible() ); - - myBarPrs->SetBarOrientation( ( RBvert->isChecked() )? VISU::ColoredPrs3dBase::VERTICAL : VISU::ColoredPrs3dBase::HORIZONTAL ); - if ( CBLog->isChecked() ) - myBarPrs->SetScaling( VISU::LOGARITHMIC ); - else - myBarPrs->SetScaling( VISU::LINEAR ); - - if ( RBFrange->isChecked() ) { - myBarPrs->SetSourceRange(); - } else { - myBarPrs->SetRange( MinEdit->text().toDouble(), MaxEdit->text().toDouble() ); - } - myBarPrs->SetNbColors( ColorSpin->value() ); - myBarPrs->SetLabels( LabelSpin->value() ); - - if ( myIsStoreTextProp ) { - // "Title" - myBarPrs->SetTitle( myTextDlg->getTitleText().toLatin1().constData() ); - - QColor aTitColor( 255, 255, 255 ); - int aTitleFontFamily = VTK_ARIAL; - bool isTitleBold = false; - bool isTitleItalic = false; - bool isTitleShadow = false; - - myTextDlg->myTitleFont->GetData( aTitColor, aTitleFontFamily, isTitleBold, isTitleItalic, isTitleShadow ); - - myBarPrs->SetBoldTitle( isTitleBold ); - myBarPrs->SetItalicTitle( isTitleItalic ); - myBarPrs->SetShadowTitle( isTitleShadow ); - myBarPrs->SetTitFontType( aTitleFontFamily ); - myBarPrs->SetTitleColor( aTitColor.red()/255., - aTitColor.green()/255., - aTitColor.blue()/255. ); - - // "Label" - QColor aLblColor( 255, 255, 255 ); - int aLabelFontFamily = VTK_ARIAL; - bool isLabelBold = false; - bool isLabelItalic = false; - bool isLabelShadow = false; - - myTextDlg->myLabelFont->GetData( aLblColor, aLabelFontFamily, isLabelBold, isLabelItalic, isLabelShadow ); - - myBarPrs->SetBoldLabel( isLabelBold); - myBarPrs->SetItalicLabel( isLabelItalic ); - myBarPrs->SetShadowLabel( isLabelShadow ); - myBarPrs->SetLblFontType( aLabelFontFamily ); - myBarPrs->SetLabelColor( aLblColor.red()/255., - aLblColor.green()/255., - aLblColor.blue()/255. ); - // myIsStoreTextProp = false; - } - return 1; -} - -//---------------------------------------------------------------------------- -/*! - Sets default values and range mode -*/ -void VisuGUI_TableScalarBarPane::setRange( double imin, double imax, bool sbRange ) -{ - MinEdit->setText( QString::number( imin ) ); - MaxEdit->setText( QString::number( imax ) ); - - if ( sbRange ) - RBIrange->setChecked( true ); - else - RBFrange->setChecked( true ); - - changeRange( sbRange ); -} - -//---------------------------------------------------------------------------- -/*! - Called when Range mode is changed -*/ -void VisuGUI_TableScalarBarPane::changeRange( int ) -{ - if ( RBFrange->isChecked() ) { - myBarPrs->SetSourceRange(); - MinEdit->setEnabled( false ); - MaxEdit->setEnabled( false ); - } else { - myBarPrs->SetRange( myBarPrs->GetMin(), myBarPrs->GetMax() ); - myBarPrs->SetRange( MinEdit->text().toDouble(), MaxEdit->text().toDouble() ); - MinEdit->setEnabled( true ); - MaxEdit->setEnabled( true ); - } - - MinEdit->setText( QString::number( myBarPrs->GetMin() ) ); - MaxEdit->setText( QString::number( myBarPrs->GetMax() ) ); -} - -//---------------------------------------------------------------------------- -/*! - Called when X,Y position is changed -*/ -void VisuGUI_TableScalarBarPane::XYChanged( double ) -{ - QtxDoubleSpinBox* snd = (QtxDoubleSpinBox*)sender(); - if ( snd == XSpin ) { - WidthSpin->setMaximum( 1.0 - XSpin->value() ); - } - if ( snd == YSpin ) { - HeightSpin->setMaximum( 1.0 - YSpin->value() ); - } -} - -//---------------------------------------------------------------------------- -/*! - -*/ -void VisuGUI_TableScalarBarPane::changeScalarMode( int ) -{ -//do nothing -} - -//---------------------------------------------------------------------------- -/*! - Sets size and position -*/ -void VisuGUI_TableScalarBarPane::setPosAndSize( double x, double y, double w, double h, bool vert ) -{ - if ( vert ) { - myVerX = x; - myVerY = y; - myVerW = w; - myVerH = h; - RBvert->setChecked( true ); - } - else { - myHorX = x; - myHorY = y; - myHorW = w; - myHorH = h; - RBhori->setChecked( true ); - } - changeDefaults( 0 ); -} - -//---------------------------------------------------------------------------- -/*! - Sets colors and labels number -*/ -void VisuGUI_TableScalarBarPane::setScalarBarData( int colors, int labels ) -{ - ColorSpin->setValue( colors ); - LabelSpin->setValue( labels ); -} - -//---------------------------------------------------------------------------- -void VisuGUI_TableScalarBarPane::onTextPref() -{ - myTextDlg->storeBeginValues(); - myIsStoreTextProp = myTextDlg->exec() || myIsStoreTextProp; -} - -//---------------------------------------------------------------------------- -VisuGUI_TableScalarBarPane::~VisuGUI_TableScalarBarPane() -{ -} - -//---------------------------------------------------------------------------- -/*! - Called when orientation is changed -*/ -void VisuGUI_TableScalarBarPane::changeDefaults( int ) -{ - if ( RBvert->isChecked() ) { - XSpin->setValue( myVerX ); - YSpin->setValue( myVerY ); - WidthSpin->setValue( myVerW ); - HeightSpin->setValue( myVerH ); - } - else { - XSpin->setValue( myHorX ); - YSpin->setValue( myHorY ); - WidthSpin->setValue( myHorW ); - HeightSpin->setValue( myHorH ); - } -} - -//======================================================================= -//function : Check -//purpose : Called when button is clicked, validates data and closes dialog -//======================================================================= -bool VisuGUI_TableScalarBarPane::check() -{ - double minVal = MinEdit->text().toDouble(); - double maxVal = MaxEdit->text().toDouble(); - if ( RBIrange->isChecked() ) { - if (minVal >= maxVal) { - SUIT_MessageBox::warning( this,tr("WRN_VISU"), - tr("MSG_MINMAX_VALUES") ); - return false; - } - } - - // check if logarithmic mode is on and check imposed range to not contain negative values - if ( CBLog->isChecked() ) { - if ( minVal <= 0.0 ) { - if ( RBIrange->isChecked() ) { - SUIT_MessageBox::warning( this, - tr("WRN_VISU"), - tr("WRN_LOGARITHMIC_RANGE") ); - } else { - if ( minVal == 0) - SUIT_MessageBox::warning( this, - tr("WRN_VISU"), - tr("WRN_LOGARITHMIC_RANGE") ); - else - SUIT_MessageBox::warning( this, - tr("WRN_VISU"), - tr("WRN_LOGARITHMIC_FIELD_RANGE") ); - RBIrange->setChecked(true); - changeRange(1); - } - return false; - } - } - return true; -} - -//======================================================================= -//function : Constructor -//purpose : -//======================================================================= -VisuGUI_Table3DDlg::VisuGUI_Table3DDlg ( SalomeApp_Module* theModule ) - : QDialog ( VISU::GetDesktop( theModule ) ) -{ - setModal( false ); - setWindowTitle( tr( "Point Map 3D Definition" ) ); - setSizeGripEnabled( true ); - - QVBoxLayout* TopLayout = new QVBoxLayout( this ); - TopLayout->setSpacing( 6 ); - TopLayout->setMargin( 11 ); - - myTabBox = new QTabWidget( this ); - myIsoPane = new VisuGUI_Table3DPane( this ); - myScalarBarPane = new VisuGUI_TableScalarBarPane( this ); - - myTabBox->addTab( myIsoPane, tr( "DLG_PREF_TITLE" ) ); - myTabBox->addTab( myScalarBarPane, tr( "DLG_PROP_TITLE" ) ); - - QGroupBox* GroupButtons = new QGroupBox( this ); - QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); - - QPushButton* buttonOk = new QPushButton( tr( "&OK" ), GroupButtons ); - buttonOk->setAutoDefault( true ); - buttonOk->setDefault( true ); - QPushButton* buttonApply = new QPushButton( tr( "&Apply" ), GroupButtons ); - buttonApply->setAutoDefault( true ); - QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ), GroupButtons ); - buttonCancel->setAutoDefault( true ); - QPushButton* buttonHelp = new QPushButton( tr( "&Help" ), GroupButtons ); - buttonHelp->setAutoDefault( true ); - - GroupButtonsLayout->addWidget( buttonOk ); - GroupButtonsLayout->addWidget( buttonApply ); - GroupButtonsLayout->addSpacing( 10 ); - GroupButtonsLayout->addStretch(); - GroupButtonsLayout->addWidget( buttonCancel ); - GroupButtonsLayout->addWidget( buttonHelp ); - - TopLayout->addWidget( myTabBox ); - TopLayout->addWidget( GroupButtons ); - - // signals and slots connections - connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) ); - connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); - connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( onHelp() ) ); - connect( buttonApply, SIGNAL( clicked() ), this, SLOT( onApply() ) ); -} - -//======================================================================= -//function : Destructor -//purpose : -//======================================================================= -VisuGUI_Table3DDlg::~VisuGUI_Table3DDlg() -{ -} - -//======================================================================= -//function : accept -//purpose : -//======================================================================= -void VisuGUI_Table3DDlg::accept() -{ - if (myScalarBarPane->check()) - QDialog::accept(); -} - -//======================================================================= -//function : onApply -//purpose : -//======================================================================= -void VisuGUI_Table3DDlg::onApply() -{ - if (myScalarBarPane->check()) { - storeToPrsObject( myPrsCopy ); - myPrsCopy->UpdateActors(); - } -} - -//======================================================================= -//function : onHelp -//purpose : -//======================================================================= -void VisuGUI_Table3DDlg::onHelp() -{ - QString aHelpFileName = "table_3d_page.html"; - LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); - if (app) { - VisuGUI* aVisuGUI = dynamic_cast( app->activeModule() ); - app->onHelpContextModule(aVisuGUI ? app->moduleName(aVisuGUI->moduleName()) : QString(""), aHelpFileName); - } - else { - QString platform; -#ifdef WIN32 - platform = "winapplication"; -#else - platform = "application"; -#endif - SUIT_MessageBox::warning( this, QObject::tr("WRN_WARNING"), - tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). - arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(aHelpFileName) ); - } - -} - -//======================================================================= -//function : storeToPrsObject -//purpose : -//======================================================================= -int VisuGUI_Table3DDlg::storeToPrsObject( VISU::PointMap3d_i* thePrs ) -{ - int anIsOk = myIsoPane->storeToPrsObject( thePrs ); - anIsOk &= myScalarBarPane->storeToPrsObject( thePrs ); - - return anIsOk; -} - -//======================================================================= -//function : initFromPrsObject -//purpose : -//======================================================================= -void VisuGUI_Table3DDlg::initFromPrsObject( VISU::PointMap3d_i* thePrs ) -{ - myPrsCopy = thePrs; - myIsoPane->initFromPrsObject( thePrs ); - myScalarBarPane->initFromPrsObject( thePrs ); -} diff --git a/src/VISUGUI/VisuGUI_Table3dDlg.h b/src/VISUGUI/VisuGUI_Table3dDlg.h deleted file mode 100644 index 2257b483..00000000 --- a/src/VISUGUI/VisuGUI_Table3dDlg.h +++ /dev/null @@ -1,188 +0,0 @@ -// VISU VISUGUI : GUI of VISU component -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// File : VisuGUI_Table3dDlg.h -// Author : Laurent CORNABE & Hubert ROLLAND -// - -#ifndef VISUGUI_TABLE3D_H -#define VISUGUI_TABLE3D_H - -#include "VisuGUI_Prs3dDlg.h" - -#include -#include - -class QTabWidget; -class QButtonGroup; -class QGroupBox; -class QComboBox; -class QCheckBox; -class QLineEdit; -class QRadioButton; -class QPushButton; -class QSpinBox; -class QtxDoubleSpinBox; -class VisuGUI_TextPrefDlg; -class VisuGUI_BarPrefDlg; -class SVTK_ViewWindow; -class SalomeApp_Module; - -namespace VISU -{ - class PointMap3d_i; -}; - -class VisuGUI_Table3DPane : public QWidget -{ - Q_OBJECT - -public: - VisuGUI_Table3DPane( QWidget* ); - ~VisuGUI_Table3DPane(); - - void initFromPrsObject( VISU::PointMap3d_i* ); - int storeToPrsObject( VISU::PointMap3d_i* ); - - VISU::PointMap3d_i* GetPrs(); - -private slots: - void onPrsType( int ); - -private: - bool myInitFromPrs; - - SVTK_ViewWindow* myViewWindow; - VISU::PointMap3d_i* myPrs; - - QtxDoubleSpinBox* ScaleSpn; - QGroupBox* GBPrsTypeBox; - QButtonGroup* GBPrsType; - QSpinBox* NbContoursSpn; -}; - -class VisuGUI_TableScalarBarPane : public QWidget -{ - Q_OBJECT - -public: - VisuGUI_TableScalarBarPane( QWidget* ); - ~VisuGUI_TableScalarBarPane(); - - void setRange( double, double, bool ); - void setDefaultRange( double, double ); - int getOrientation(); - void setPosAndSize( double, double, double, double, bool ); - void setScalarBarData( int, int ); - bool isIRange(); - double getMin(); - double getMax(); - double getX(); - double getY(); - double getWidth(); - double getHeight(); - int getNbColors(); - int getNbLabels(); - bool isLogarithmic(); - void setLogarithmic( bool on ); - // bool isToSave() {return CBSave ? CBSave->isChecked() : false;} - - void storeToResources(); - - void initFromPrsObject( VISU::PointMap3d_i* ); - int storeToPrsObject( VISU::PointMap3d_i* ); - - bool check(); - -private slots: - void changeDefaults( int ); - void changeRange( int ); - void XYChanged( double ); - void changeScalarMode( int ); - void onTextPref(); - void onBarPref(); - -private: - QGroupBox* RangeGroup; - QRadioButton* RBFrange; - QRadioButton* RBIrange; - QLineEdit* MinEdit; - QLineEdit* MaxEdit; - - QRadioButton* RBhori; - QRadioButton* RBvert; - - QtxDoubleSpinBox* XSpin; - QtxDoubleSpinBox* YSpin; - - QtxDoubleSpinBox* WidthSpin; - QtxDoubleSpinBox* HeightSpin; - - QSpinBox* ColorSpin; - QSpinBox* LabelSpin; - - QCheckBox* CBSave; - QCheckBox* CBLog; - QComboBox* myModeCombo; - QPushButton* myTextBtn; - QPushButton* myBarBtn; - VisuGUI_TextPrefDlg* myTextDlg; - VisuGUI_BarPrefDlg* myBarDlg; - - double myHorX, myHorY, myHorW, myHorH; - double myVerX, myVerY, myVerW, myVerH; - int myHorTW, myHorTH, myHorLW, myHorLH, myHorBW, myHorBH; - int myVerTW, myVerTH, myVerLW, myVerLH, myVerBW, myVerBH; - bool myIsStoreTextProp; - - std::string myTitle; - VISU::PointMap3d_i* myBarPrs; - - bool myBusy; -}; - -/////////////////////////////////////////////////////// - -class VisuGUI_Table3DDlg : public QDialog -{ - Q_OBJECT - -public: - VisuGUI_Table3DDlg( SalomeApp_Module* ); - ~VisuGUI_Table3DDlg(); - - virtual void initFromPrsObject( VISU::PointMap3d_i* ); - virtual int storeToPrsObject( VISU::PointMap3d_i* ); - -protected slots: - void accept(); - void onHelp(); - void onApply(); - -private: - QTabWidget* myTabBox; - VisuGUI_Table3DPane* myIsoPane; - VisuGUI_TableScalarBarPane* myScalarBarPane; - - SALOME::GenericObjPtr myPrsCopy; -}; - -#endif // VISUGUI_TABLE3D_H diff --git a/src/VISUGUI/VisuGUI_Tools.cxx b/src/VISUGUI/VisuGUI_Tools.cxx index 6df04f65..65535af7 100644 --- a/src/VISUGUI/VisuGUI_Tools.cxx +++ b/src/VISUGUI/VisuGUI_Tools.cxx @@ -37,7 +37,7 @@ #include "VISU_Prs3d_i.hh" #include "VISU_Result_i.hh" #include "VISU_Table_i.hh" -#include "VISU_Mesh_i.hh" +//#include "VISU_Mesh_i.hh" #include "VISU_ViewManager_i.hh" #include "VISU_Actor.h" @@ -79,6 +79,7 @@ #include #include +using namespace std; //============================================================================= namespace VISU @@ -415,6 +416,15 @@ namespace VISU _PTR(GenericAttribute) anAttr; _PTR(AttributeString) aComment; + _PTR(SObject) aRefSObject; + if (aSObject->ReferencedObject(aRefSObject)) { + // It can be a reference on curve, published under a container. IPAL 20317 + VISU::TObjectInfo aRefObjectInfo = GetObjectByEntry(GetAppStudy(theModule), aRefSObject->GetID()); + VISU::Base_i* aRefBase = aRefObjectInfo.myBase; + if( (aRefBase && aRefBase->GetType() == VISU::TCURVE) || (aRefBase && aRefBase->GetType() == VISU::TMESH) ) + return true; + } + bool isUnderVISU = false; _PTR(SObject) aFatherSObject = aSObject->GetFather(); if (aFatherSObject->FindAttribute(anAttr, "AttributeName")) { @@ -587,10 +597,13 @@ namespace VISU switch (theType) { case VISU::SHRINK: if (aPrs3d) { - if (anActor->IsShrunk()) - anActor->UnShrink(); - else - anActor->SetShrink(); + if (anActor->IsShrunk()) + anActor->UnShrink(); + else + anActor->SetShrink(); + if (VISU::Mesh_i* aMesh = dynamic_cast(aPrs3d)) { + aMesh->SetShrink(true); + } } else if (aTable) { if (anActorBase->IsShrunk()) anActorBase->UnShrink(); @@ -1050,7 +1063,7 @@ namespace VISU for (int i = 0; i < clist.count(); i++) { tmpCurve = dynamic_cast(clist.at(i)); if (tmpCurve && tmpCurve->hasIO() && - theCurve->GetEntry() != tmpCurve->getIO()->getEntry()) { + theCurve->GetEntry() == tmpCurve->getIO()->getEntry()) { plotCurve = tmpCurve; } else if (theDisplaying == VISU::eDisplayOnly) { @@ -1168,8 +1181,7 @@ namespace VISU //************************************************************ // Others - - void + VISU::Mesh_i* CreateMesh(VisuGUI* theModule, const Handle(SALOME_InteractiveObject)& theIO, SVTK_ViewWindow* theViewWindow) @@ -1184,11 +1196,11 @@ namespace VISU VISU::Result_var aResult; VISU::Result_i* pResult = CheckResult(theModule, aResultSObj, aResult); if (pResult == NULL) - return; + return NULL; Storable::TRestoringMap aMap = Storable::GetStorableMap(aResultSObj); if (aMap.empty()) - return; + return NULL; CORBA::Object_var aMesh; string aComment = Storable::FindValue(aMap,"myComment").toLatin1().data(); @@ -1226,7 +1238,7 @@ namespace VISU SUIT_MessageBox::warning (GetDesktop(theModule), QObject::tr("WRN_VISU"), QObject::tr("ERR_CANT_BUILD_PRESENTATION") ); - return; + return NULL; } if (theViewWindow) { @@ -1260,6 +1272,7 @@ namespace VISU theModule->application()->putInfo(QObject::tr("INF_DONE")); // Make "Save" button active theModule->getApp()->updateActions(); + return pPresent; } // ======================================================================================== @@ -1302,6 +1315,7 @@ namespace VISU case VISU::TPLOT3D: case VISU::TSCALARMAPONDEFORMEDSHAPE: case VISU::TDEFORMEDSHAPEANDSCALARMAP: + case VISU::TMESH: { PortableServer::ServantBase_var aServant = VISU::GetServant(aCORBAObject); if (aServant.in()) { @@ -1438,4 +1452,21 @@ namespace VISU spinBox->setDecimals( decimals ); } //------------------------------------------------------------ + bool getClippingPlanesFolder(_PTR(Study) theStudy, _PTR(SObject)& theSObject) + { + _PTR(SComponent) aVisuSO = theStudy->FindComponent("VISU"); + if (!aVisuSO) return false; + _PTR(SObject) aFolder = theStudy->FindObject(CLIP_PLANES_FOLDER); + if (!aFolder) { + _PTR(StudyBuilder) aBuilder = theStudy->NewBuilder(); + aFolder = aBuilder->NewObject(aVisuSO); + + _PTR(GenericAttribute) anAttr; + anAttr = aBuilder->FindOrCreateAttribute(aFolder,"AttributeName"); + _PTR(AttributeName) aName(anAttr); + aName->SetValue(CLIP_PLANES_FOLDER); + } + theSObject = aFolder; + return true; + } } diff --git a/src/VISUGUI/VisuGUI_Tools.h b/src/VISUGUI/VisuGUI_Tools.h index e5d8510b..156b9a36 100644 --- a/src/VISUGUI/VisuGUI_Tools.h +++ b/src/VISUGUI/VisuGUI_Tools.h @@ -58,6 +58,7 @@ class VisuGUI; #include #include +#include "VISU_Mesh_i.hh" namespace VISU { @@ -121,6 +122,11 @@ namespace VISU VISU::Prs3d_i* GetPrs3dFromBase(Base_i* theBase); + bool GetPrs3dSelectionInfo( const SalomeApp_Module* theModule, + VISU::Prs3d_i*& thePrs3d, + SVTK_ViewWindow*& theViewWindow, + VISU_Actor*& thenActor ); + //---------------------------------------------------------------------------- void Add(LightApp_SelectionMgr* theSelectionMgr, const Handle(SALOME_InteractiveObject)& theIO); @@ -215,9 +221,9 @@ namespace VISU /*! Create mesh presentation and display it in \a theViewWindow. * If \a theViewWindow is NULL, no displaying will be done. */ - void CreateMesh(VisuGUI* theModule, - const Handle(SALOME_InteractiveObject)& theIO, - SVTK_ViewWindow* theViewWindow); + VISU::Mesh_i* CreateMesh(VisuGUI* theModule, + const Handle(SALOME_InteractiveObject)& theIO, + SVTK_ViewWindow* theViewWindow); // Others std::vector GetPrs3dList (const SalomeApp_Module* theModule, @@ -232,6 +238,10 @@ namespace VISU VISU::Prs3d_i* thePrs3d); void initSpinBox( QSpinBox*, int, int, int = 1 ); void initSpinBox( QDoubleSpinBox*, double, double, double = 0.1, int = 6 ); + +#define CLIP_PLANES_FOLDER "Clipping Planes" + + bool getClippingPlanesFolder(_PTR(Study) theStudy, _PTR(SObject)& theSObject); } #endif diff --git a/src/VISUGUI/VisuGUI_VectorsDlg.cxx b/src/VISUGUI/VisuGUI_VectorsDlg.cxx index 1f624abb..10b210c9 100644 --- a/src/VISUGUI/VisuGUI_VectorsDlg.cxx +++ b/src/VISUGUI/VisuGUI_VectorsDlg.cxx @@ -90,13 +90,10 @@ VisuGUI_VectorsDlg::VisuGUI_VectorsDlg (SalomeApp_Module* theModule) // Scale factor ScaleLabel = new QLabel (tr("LBL_SCALE_FACTOR"), TopGroup ); - ScalFact = new QtxDoubleSpinBox( 1e-20, 1.0E+38, 0.1, TopGroup ); - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); int aPrecision = aResourceMgr->integerValue( "VISU", "floating_point_precision", 0 ); - ScalFact->setPrecision( aPrecision*(-1) ); - ScalFact->setDecimals( 32 ); + ScalFact = new QtxDoubleSpinBox( 0, 1.0E+38, 0.1, aPrecision*(-1), 32, TopGroup ); ScalFact->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); ScalFact->setValue( 0.1 ); @@ -330,16 +327,16 @@ void VisuGUI_VectorsDlg::enableSetColor() void VisuGUI_VectorsDlg::setScaleFactor( double theFactor ) { double i=0.1; - while (1) { // Calculate Step & Precission - if ( int (theFactor/i) > 0) - break; - else { - i = i*0.1; + if (theFactor > 0) { // Calculate Step & Precission + while (1) { + if ( int (theFactor/i) > 0) + break; + else + i = i*0.1; } } ScalFact->setSingleStep(i); - ScalFact->setValue( theFactor ); } diff --git a/src/VISUGUI/VisuGUI_ViewTools.h b/src/VISUGUI/VisuGUI_ViewTools.h index d61e29bb..55e733fa 100644 --- a/src/VISUGUI/VisuGUI_ViewTools.h +++ b/src/VISUGUI/VisuGUI_ViewTools.h @@ -42,8 +42,8 @@ #include "SalomeApp_Module.h" #include "SalomeApp_Application.h" -#include "VVTK_ViewModel.h" -#include "VVTK_ViewWindow.h" +//#include "VVTK_ViewModel.h" +//#include "VVTK_ViewWindow.h" #include "SVTK_Functor.h" #include "SVTK_ViewModel.h" @@ -65,7 +65,7 @@ #include #include -class VVTK_Viewer; +//class VVTK_Viewer; namespace VISU { diff --git a/src/VISU_I/Makefile.am b/src/VISU_I/Makefile.am index 0bc6b6ac..b6b07c84 100644 --- a/src/VISU_I/Makefile.am +++ b/src/VISU_I/Makefile.am @@ -34,16 +34,19 @@ salomeinclude_HEADERS = \ VISU_MultiResult_i.hh \ VISU_PrsObject_i.hh \ VISU_Table_i.hh \ + VISU_ResultUtils.hh \ VISU_PointMap3d_i.hh \ VISU_Prs3d_i.hh \ VISU_Mesh_i.hh \ VISU_ColoredPrs3d_i.hh \ + VISU_CorbaMedConvertor.hxx \ VISU_ScalarMap_i.hh \ VISU_IsoSurfaces_i.hh \ VISU_DeformedShape_i.hh \ VISU_Plot3D_i.hh \ VISU_CutPlanes_i.hh \ VISU_CutLines_i.hh \ + VISU_Prs3dUtils.hh \ VISU_Vectors_i.hh \ VISU_StreamLines_i.hh \ VISU_GaussPoints_i.hh \ @@ -51,11 +54,14 @@ salomeinclude_HEADERS = \ VISU_View_i.hh \ VISU_TimeAnimation.h \ VISU_DeformedShapeAndScalarMap_i.hh \ + VISU_ColoredPrs3dCache_i.hh \ + VISU_ColoredPrs3dHolder_i.hh \ VISU_ColoredPrs3dFactory.hh \ VISU_MonoColorPrs_i.hh \ VISU_Deformation_i.hh \ VISU_OptionalDeformation_i.hh \ - SALOME_GenericObjPointer.hh + SALOME_GenericObjPointer.hh \ + VISU_ClippingPlaneMgr.hxx libVISUEngineImpl_la_SOURCES = \ @@ -92,7 +98,8 @@ libVISUEngineImpl_la_SOURCES = \ VISU_MonoColorPrs_i.cc \ VISU_Deformation_i.cc \ VISU_OptionalDeformation_i.cc \ - SALOME_GenericObjPointer.cc + SALOME_GenericObjPointer.cc \ + VISU_ClippingPlaneMgr.cxx MOC_FILES = VISU_TimeAnimation_moc.cxx nodist_libVISUEngineImpl_la_SOURCES= $(MOC_FILES) @@ -114,7 +121,6 @@ libVISUEngineImpl_la_CPPFLAGS= \ -I$(srcdir)/../CONVERTOR \ -I$(srcdir)/../PIPELINE \ -I$(srcdir)/../OBJECT \ - -I$(srcdir)/../VVTK \ -I$(srcdir)/../GUITOOLS \ -I$(top_builddir)/idl \ -I$(top_builddir)/salome_adm/unix @@ -149,7 +155,6 @@ libVISUEngineImpl_la_LIBADD= \ ../CONVERTOR/libVisuConvertor.la \ ../PIPELINE/libVisuPipeLine.la \ ../OBJECT/libVisuObject.la \ - ../VVTK/libVVTK.la \ ../GUITOOLS/libVISUGUITOOLS.la if MED_ENABLE_MULTIPR diff --git a/src/VISU_I/VISUConfig.cc b/src/VISU_I/VISUConfig.cc index 073d07c8..c8f788b9 100644 --- a/src/VISU_I/VISUConfig.cc +++ b/src/VISU_I/VISUConfig.cc @@ -47,6 +47,7 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; namespace VISU { diff --git a/src/VISU_I/VISU_ColoredPrs3dCache_i.cc b/src/VISU_I/VISU_ColoredPrs3dCache_i.cc index 9e833c82..547a4f3a 100644 --- a/src/VISU_I/VISU_ColoredPrs3dCache_i.cc +++ b/src/VISU_I/VISU_ColoredPrs3dCache_i.cc @@ -39,8 +39,8 @@ #include "VTKViewer_Algorithm.h" #include "SVTK_Functor.h" +#include "SVTK_ViewWindow.h" -#include "VVTK_ViewWindow.h" #include "SUIT_ResourceMgr.h" #include @@ -55,6 +55,8 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; + namespace { //---------------------------------------------------------------------------- @@ -365,6 +367,15 @@ VISU::ColoredPrs3dCache_i { std::string aFolderName = VISU::ColoredPrs3dCache_i::GetFolderName(); SALOMEDS::SObject_var aSObject = theStudy->FindObject(aFolderName.c_str()); + if (CORBA::is_nil(aSObject)) { + aSObject = theStudy->FindObject("3D Cache System"); + if (!CORBA::is_nil(aSObject)) { + SALOMEDS::StudyBuilder_var aBuilder = theStudy->NewBuilder(); + SALOMEDS::GenericAttribute_var anAttr = aBuilder->FindOrCreateAttribute( aSObject, "AttributeName" ); + SALOMEDS::AttributeName_var aNameAttr = SALOMEDS::AttributeName::_narrow( anAttr ); + aNameAttr->SetValue( GetFolderName().c_str() ); + } + } if(!CORBA::is_nil(aSObject)){ CORBA::Object_var anObject = aSObject->GetObject(); VISU::ColoredPrs3dCache_var aCache = VISU::ColoredPrs3dCache::_narrow(anObject); @@ -477,7 +488,8 @@ std::string VISU::ColoredPrs3dCache_i ::GetFolderName() { - return "3D Cache System"; + //return "3D Cache System"; + return "Presentations"; } //---------------------------------------------------------------------------- diff --git a/src/VISU_I/VISU_ColoredPrs3dCache_i.hh b/src/VISU_I/VISU_ColoredPrs3dCache_i.hh index ead20807..dc08a938 100644 --- a/src/VISU_I/VISU_ColoredPrs3dCache_i.hh +++ b/src/VISU_I/VISU_ColoredPrs3dCache_i.hh @@ -27,6 +27,8 @@ #ifndef VISU_ColoredPrs3dCache_i_HeaderFile #define VISU_ColoredPrs3dCache_i_HeaderFile +#include "VISU_I.hxx" + #include "VISU_ColoredPrs3dFactory.hh" #include "SALOME_GenericObjPointer.hh" @@ -103,7 +105,7 @@ namespace VISU * This interface is responsible for memory management of 3d presentations. * One cache corresponds to one study. */ - class ColoredPrs3dCache_i : public virtual POA_VISU::ColoredPrs3dCache, + class VISU_I_EXPORT ColoredPrs3dCache_i : public virtual POA_VISU::ColoredPrs3dCache, public virtual SALOME::GenericObj_i, public virtual RemovableObject_i { diff --git a/src/VISU_I/VISU_ColoredPrs3dFactory.cc b/src/VISU_I/VISU_ColoredPrs3dFactory.cc index 0aee75f2..69e33eb6 100644 --- a/src/VISU_I/VISU_ColoredPrs3dFactory.cc +++ b/src/VISU_I/VISU_ColoredPrs3dFactory.cc @@ -44,6 +44,7 @@ //static int MYDEBUG = 0; #endif +using namespace std; namespace VISU { diff --git a/src/VISU_I/VISU_ColoredPrs3dHolder_i.cc b/src/VISU_I/VISU_ColoredPrs3dHolder_i.cc index 98b54763..8a76cd06 100644 --- a/src/VISU_I/VISU_ColoredPrs3dHolder_i.cc +++ b/src/VISU_I/VISU_ColoredPrs3dHolder_i.cc @@ -40,6 +40,8 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; + //--------------------------------------------------------------- int VISU::ColoredPrs3dHolder_i::myNbHolders = 0; diff --git a/src/VISU_I/VISU_ColoredPrs3dHolder_i.hh b/src/VISU_I/VISU_ColoredPrs3dHolder_i.hh index 840d537e..dd28b077 100644 --- a/src/VISU_I/VISU_ColoredPrs3dHolder_i.hh +++ b/src/VISU_I/VISU_ColoredPrs3dHolder_i.hh @@ -27,6 +27,7 @@ #ifndef VISU_ColoredPrs3dHolder_i_HeaderFile #define VISU_ColoredPrs3dHolder_i_HeaderFile +#include "VISU_I.hxx" #include "VISU_PrsObject_i.hh" #include "SALOME_GenericObj_i.hh" @@ -41,7 +42,7 @@ namespace VISU * created on fields. It is publishing in the object browser in a separate folder * and can be controled by viewer's slider. */ - class ColoredPrs3dHolder_i : public virtual POA_VISU::ColoredPrs3dHolder, + class VISU_I_EXPORT ColoredPrs3dHolder_i : public virtual POA_VISU::ColoredPrs3dHolder, public virtual SALOME::GenericObj_i, public virtual PrsObject_i { diff --git a/src/VISU_I/VISU_ColoredPrs3d_i.cc b/src/VISU_I/VISU_ColoredPrs3d_i.cc index 1f153a75..9a9f742d 100644 --- a/src/VISU_I/VISU_ColoredPrs3d_i.cc +++ b/src/VISU_I/VISU_ColoredPrs3d_i.cc @@ -46,6 +46,7 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; //--------------------------------------------------------------- namespace @@ -180,7 +181,8 @@ ColoredPrs3d_i(EPublishInStudyMode thePublishInStudyMode) : myOrientation( VISU::ColoredPrs3dBase::HORIZONTAL ), myColoredPL(NULL), myIsFixedRange(false), - myIsRestored(true) + myIsRestored(true)/* RKV : Begin*/, + myIsDistributionVisible(false)/* RKV : End*/ {} //--------------------------------------------------------------- @@ -694,21 +696,24 @@ VISU::ColoredPrs3d_i SetNbColors(anOrigin->GetNbColors()); SetUnitsVisible(anOrigin->IsUnitsVisible()); - SetLabelsFormat(anOrigin->GetLabelsFormat()); - + SetIsDistributionVisible(anOrigin->GetIsDistributionVisible()); + SetLabelsFormat( anOrigin->GetLabelsFormat() ); + SetBarOrientation(anOrigin->GetBarOrientation()); SetMinMaxController( anOrigin ); - if(anOrigin->IsRangeFixed()) - SetRange(anOrigin->GetMin(), anOrigin->GetMax()); + if ( anOrigin->IsRangeFixed() ) + SetRange( anOrigin->GetMin(), anOrigin->GetMax() ); else SetSourceRange(); + SetScalarFilterRange( anOrigin->GetScalarFilterMin(), anOrigin->GetScalarFilterMax() ); + UseScalarFiltering( anOrigin->IsScalarFilterUsed() ); + SetPosition(anOrigin->GetPosX(), anOrigin->GetPosY()); SetSize(anOrigin->GetWidth(), anOrigin->GetHeight()); - SetRatios(anOrigin->GetTitleWidth(), anOrigin->GetTitleHeight(), - anOrigin->GetLabelWidth(), anOrigin->GetLabelHeight(), + SetRatios(anOrigin->GetTitleSize(), anOrigin->GetLabelSize(), anOrigin->GetBarWidth(), anOrigin->GetBarHeight()); SetLabels(anOrigin->GetLabels()); @@ -778,21 +783,74 @@ VISU::ColoredPrs3d_i return myColoredPL->GetScalarRange()[1]; } + //---------------------------------------------------------------------------- void VISU::ColoredPrs3d_i -::SetRange(CORBA::Double theMin, CORBA::Double theMax) +::SetRange( CORBA::Double theMin, CORBA::Double theMax ) { VISU::TSetModified aModified(this); vtkFloatingPointType aScalarRange[2] = {theMin, theMax}; ProcessVoidEvent(new TVoidMemFun1ArgEvent (GetSpecificPL(), &VISU_ColoredPL::SetScalarRange, aScalarRange)); - UseFixedRange(true); } +//---------------------------------------------------------------------------- +void +VISU::ColoredPrs3d_i +::SetScalarFilterRange( CORBA::Double theMin, CORBA::Double theMax ) +{ + VISU::TSetModified aModified(this); + + vtkFloatingPointType aScalarRange[ 2 ] = { theMin, theMax }; + ProcessVoidEvent(new TVoidMemFun1ArgEvent + (GetSpecificPL(), &VISU_ColoredPL::SetScalarFilterRange, aScalarRange) ); +} + + +//---------------------------------------------------------------------------- +CORBA::Double +VISU::ColoredPrs3d_i +::GetScalarFilterMin() +{ + vtkFloatingPointType aScalarRange[ 2 ]; + GetSpecificPL()->GetScalarFilterRange( aScalarRange ); + + return aScalarRange[ 0 ]; +} + + +//---------------------------------------------------------------------------- +CORBA::Double +VISU::ColoredPrs3d_i +::GetScalarFilterMax() +{ + vtkFloatingPointType aScalarRange[ 2 ]; + GetSpecificPL()->GetScalarFilterRange( aScalarRange ); + + return aScalarRange[ 1 ]; +} + + +//---------------------------------------------------------------------------- +CORBA::Boolean +VISU::ColoredPrs3d_i +::IsScalarFilterUsed() +{ + return myColoredPL->IsScalarFilterUsed(); +} + +//---------------------------------------------------------------------------- +void +VISU::ColoredPrs3d_i +::UseScalarFiltering( CORBA::Boolean theUseScalarFilter ) +{ + return myColoredPL->UseScalarFiltering( theUseScalarFilter ); +} + //---------------------------------------------------------------------------- void VISU::ColoredPrs3d_i @@ -805,7 +863,7 @@ VISU::ColoredPrs3d_i ProcessVoidEvent(new TVoidMemFunEvent (GetSpecificPL(), &VISU_ColoredPL::SetSourceRange)); }else{ - vtkFloatingPointType aScalarRange[2] = {GetSourceMin(), GetSourceMax()}; + vtkFloatingPointType aScalarRange[ 2 ] = {GetSourceMin(), GetSourceMax()}; ProcessVoidEvent(new TVoidMemFun1ArgEvent (GetSpecificPL(), &VISU_ColoredPL::SetScalarRange, aScalarRange)); } @@ -949,14 +1007,11 @@ VISU::ColoredPrs3d_i //---------------------------------------------------------------------------- void VISU::ColoredPrs3d_i -::SetRatios(CORBA::Long theTitleWidth, CORBA::Long theTitleHeight, - CORBA::Long theLabelWidth, CORBA::Long theLabelHeight, +::SetRatios(CORBA::Long theTitleSize, CORBA::Long theLabelSize, CORBA::Long theBarWidth, CORBA::Long theBarHeight) { - bool anIsSameValue = VISU::CheckIsSameValue(myTitleWidth, theTitleWidth); - anIsSameValue &= VISU::CheckIsSameValue(myTitleHeight, theTitleHeight); - anIsSameValue &= VISU::CheckIsSameValue(myLabelWidth, theLabelWidth); - anIsSameValue &= VISU::CheckIsSameValue(myLabelHeight, theLabelHeight); + bool anIsSameValue = VISU::CheckIsSameValue(myTitleSize, theTitleSize); + anIsSameValue &= VISU::CheckIsSameValue(myLabelSize, theLabelSize); anIsSameValue &= VISU::CheckIsSameValue(myBarWidth, theBarWidth); anIsSameValue &= VISU::CheckIsSameValue(myBarHeight, theBarHeight); if(anIsSameValue) @@ -964,10 +1019,8 @@ VISU::ColoredPrs3d_i VISU::TSetModified aModified(this); - myTitleWidth = theTitleWidth; - myTitleHeight = theTitleHeight; - myLabelWidth = theLabelWidth; - myLabelHeight = theLabelHeight; + myTitleSize = theTitleSize; + myLabelSize = theLabelSize; myBarWidth = theBarWidth; myBarHeight = theBarHeight; myParamsTime.Modified(); @@ -976,33 +1029,17 @@ VISU::ColoredPrs3d_i //---------------------------------------------------------------------------- CORBA::Long VISU::ColoredPrs3d_i -::GetTitleWidth() +::GetTitleSize() { - return myTitleWidth; -} - -//---------------------------------------------------------------------------- -CORBA::Long -VISU::ColoredPrs3d_i -::GetTitleHeight() -{ - return myTitleHeight; + return myTitleSize; } //---------------------------------------------------------------------------- CORBA::Long VISU::ColoredPrs3d_i -::GetLabelWidth() +::GetLabelSize() { - return myLabelWidth; -} - -//---------------------------------------------------------------------------- -CORBA::Long -VISU::ColoredPrs3d_i -::GetLabelHeight() -{ - return myLabelHeight; + return myLabelSize; } //---------------------------------------------------------------------------- @@ -1043,6 +1080,8 @@ VISU::ColoredPrs3d_i return myNumberOfLabels; } +//---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- void VISU::ColoredPrs3d_i @@ -1433,12 +1472,15 @@ VISU::ColoredPrs3d_i // Scalar Range int aRangeType = aResourceMgr->integerValue("VISU" , "scalar_range_type", 0); - if(aRangeType == 1){ + if ( aRangeType == 1 ) { float aMin = aResourceMgr->doubleValue("VISU", "scalar_range_min", 0); float aMax = aResourceMgr->doubleValue("VISU", "scalar_range_max", 0); - SetRange(aMin, aMax); + SetRange( aMin, aMax ); } - UseFixedRange(aRangeType == 1); + UseFixedRange( aRangeType == 1 ); + + bool isFiltered = aResourceMgr->booleanValue("VISU", "scalar_bar_filter_by_scalars", false); + UseScalarFiltering( isFiltered ); int aNumberOfColors = aResourceMgr->integerValue( "VISU", "scalar_bar_num_colors", 64 ); SetNbColors(aNumberOfColors); @@ -1446,8 +1488,10 @@ VISU::ColoredPrs3d_i bool isUnits = aResourceMgr->booleanValue( "VISU", "scalar_bar_display_units", true ); SetUnitsVisible(isUnits); - QString aLabelsFormat = aResourceMgr->stringValue( "VISU", "scalar_bar_label_format", "%-#6.3g" ); - SetLabelsFormat(aLabelsFormat.toLatin1().data()); + SetIsDistributionVisible( aResourceMgr->booleanValue("VISU", "scalar_bar_show_distribution", false) ); // RKV + + int lp = aResourceMgr->integerValue( "VISU", "scalar_bar_label_precision", 3 ); + SetLabelsFormat( VISU::ToFormat( lp ).c_str() ); // Orientation int anOrientation = aResourceMgr->integerValue("VISU", "scalar_bar_orientation", 0); @@ -1459,32 +1503,26 @@ VISU::ColoredPrs3d_i // Scalar Bar origin QString propertyName = QString( "scalar_bar_%1_" ).arg( anOrientation == 0 ? "vertical" : "horizontal" ); - vtkFloatingPointType aXorigin = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL) ? 0.01 : 0.2; + vtkFloatingPointType aXorigin = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL) ? 0.01 : 0.1; aXorigin = aResourceMgr->doubleValue("VISU", propertyName + "x", aXorigin); myPosition[0] = aXorigin; - vtkFloatingPointType aYorigin = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL) ? 0.1 : 0.012; + vtkFloatingPointType aYorigin = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL) ? 0.1 : 0.01; aYorigin = aResourceMgr->doubleValue("VISU", propertyName + "y", aYorigin); myPosition[1] = aYorigin; // Scalar Bar size - myWidth = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL)? 0.1 : 0.6; + myWidth = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL)? 0.08 : 0.8; myWidth = aResourceMgr->doubleValue("VISU", propertyName + "width", myWidth); - myHeight = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL)? 0.8:0.12; + myHeight = (myOrientation == VISU::ColoredPrs3dBase::VERTICAL)? 0.8:0.08; myHeight = aResourceMgr->doubleValue("VISU", propertyName + "height", myHeight); - myTitleWidth = 0; - myTitleWidth = aResourceMgr->integerValue("VISU", propertyName + "title_width", myTitleWidth); + myTitleSize = 0; + myTitleSize = aResourceMgr->integerValue("VISU", propertyName + "title_size", myTitleSize); - myTitleHeight = 0; - myTitleHeight = aResourceMgr->integerValue("VISU", propertyName + "title_height", myTitleHeight); - - myLabelWidth = 0; - myLabelWidth = aResourceMgr->integerValue("VISU", propertyName + "label_width", myLabelWidth); - - myLabelHeight = 0; - myLabelHeight = aResourceMgr->integerValue("VISU", propertyName + "label_height", myLabelHeight); + myLabelSize = 0; + myLabelSize = aResourceMgr->integerValue("VISU", propertyName + "label_size", myLabelSize); myBarWidth = 0; myBarWidth = aResourceMgr->integerValue("VISU", propertyName + "bar_width", myBarWidth); @@ -1522,7 +1560,7 @@ VISU::ColoredPrs3d_i myIsBoldTitle = f.bold(); myIsItalicTitle = f.italic(); - myIsShadowTitle = f.underline(); + myIsShadowTitle = f.overline(); } QColor aTextColor = aResourceMgr->colorValue( "VISU", "scalar_bar_title_color", QColor( 255, 255, 255 ) ); @@ -1547,7 +1585,7 @@ VISU::ColoredPrs3d_i myIsBoldLabel = f.bold(); myIsItalicLabel = f.italic(); - myIsShadowLabel = f.underline(); + myIsShadowLabel = f.overline(); } QColor aLabelColor = aResourceMgr->colorValue( "VISU", "scalar_bar_label_color", QColor( 255, 255, 255 ) ); @@ -1557,7 +1595,41 @@ VISU::ColoredPrs3d_i myLabelColor[0] = aLabelColor.red() / 255.; myLabelColor[1] = aLabelColor.green() / 255.; myLabelColor[2] = aLabelColor.blue() / 255.; + + // Parameters of labels displaed field values + myValLblFontType = VTK_ARIAL; + myIsBoldValLbl = true; + myIsItalicValLbl = myIsShadowValLbl = false; + myValLblFontSize = 12; + if( aResourceMgr->hasValue( "VISU", "values_labeling_font" ) ) + { + // family + QFont f = aResourceMgr->fontValue( "VISU", "values_labeling_font" ); + if ( f.family() == "Arial" ) + myValLblFontType = VTK_ARIAL; + else if ( f.family() == "Courier" ) + myValLblFontType = VTK_COURIER; + else if ( f.family() == "Times" ) + myValLblFontType = VTK_TIMES; + + // size + if ( f.pointSize() > -1 ) + myValLblFontSize = f.pointSize(); + + // color + QColor aColor = aResourceMgr->colorValue( + "VISU", "values_labeling_color", QColor( 255, 255, 255 ) ); + myValLblFontColor[ 0 ] = aColor.red() / 255.; + myValLblFontColor[ 1 ] = aColor.green() / 255.; + myValLblFontColor[ 2 ] = aColor.blue()/ 255.; + + // bold, italic, shadow + myIsBoldValLbl = f.bold(); + myIsItalicValLbl = f.italic(); + myIsShadowValLbl = f.overline(); + } + return this; } @@ -1603,10 +1675,20 @@ VISU::ColoredPrs3d_i Build(ERestore); - SetScalarMode(VISU::Storable::FindValue(theMap,"myScalarMode").toInt()); - float aMin = VISU::Storable::FindValue(theMap,"myScalarRange[0]").toDouble(); - float aMax = VISU::Storable::FindValue(theMap,"myScalarRange[1]").toDouble(); - SetRange(aMin, aMax); + SetScalarMode(VISU::Storable::FindValue( theMap,"myScalarMode" ).toInt() ); + { + float aMin = VISU::Storable::FindValue( theMap, "myScalarRange[0]" ).toDouble(); + float aMax = VISU::Storable::FindValue( theMap, "myScalarRange[1]" ).toDouble(); + SetRange( aMin, aMax ); + } + { + bool isFiltered = VISU::Storable::FindValue( theMap, "myIsFilteredByScalars", "0" ).toInt(); + float aMin = VISU::Storable::FindValue( theMap, "myScalarFilterRange[0]" ).toDouble(); + float aMax = VISU::Storable::FindValue( theMap, "myScalarFilterRange[1]" ).toDouble(); + SetScalarFilterRange( aMin, aMax ); + UseScalarFiltering( isFiltered ); + } + SetIsDistributionVisible(VISU::Storable::FindValue(theMap,"myIsDistributionVisible", "0").toInt()); UseFixedRange(VISU::Storable::FindValue(theMap,"myIsFixedRange", "0").toInt()); @@ -1621,10 +1703,8 @@ VISU::ColoredPrs3d_i myPosition[1] = VISU::Storable::FindValue(theMap,"myPosition[1]").toDouble(); myWidth = VISU::Storable::FindValue(theMap,"myWidth").toDouble(); myHeight = VISU::Storable::FindValue(theMap,"myHeight").toDouble(); - myTitleWidth = VISU::Storable::FindValue(theMap,"myTitleWidth").toInt(); - myTitleHeight = VISU::Storable::FindValue(theMap,"myTitleHeight").toInt(); - myLabelWidth = VISU::Storable::FindValue(theMap,"myLabelWidth").toInt(); - myLabelHeight = VISU::Storable::FindValue(theMap,"myLabelHeight").toInt(); + myTitleSize = VISU::Storable::FindValue(theMap,"myTitleSize").toInt(); + myLabelSize = VISU::Storable::FindValue(theMap,"myLabelSize").toInt(); myBarWidth = VISU::Storable::FindValue(theMap,"myBarWidth").toInt(); myBarHeight = VISU::Storable::FindValue(theMap,"myBarHeight").toInt(); @@ -1657,6 +1737,18 @@ VISU::ColoredPrs3d_i } } } + + // Parameters of labels displayed field values + + myValLblFontType = VISU::Storable::FindValue( theMap, "myValLblFontType", "0" ).toInt(); + myIsBoldValLbl = VISU::Storable::FindValue( theMap, "myIsBoldValLbl", "1" ).toInt(); + myIsItalicValLbl = VISU::Storable::FindValue( theMap, "myIsItalicValLbl", "0" ).toInt(); + myIsShadowValLbl = VISU::Storable::FindValue( theMap, "myIsShadowValLbl", "0" ).toInt(); + myValLblFontSize = VISU::Storable::FindValue( theMap, "myValLblFontSize", "12" ).toDouble(); + myValLblFontColor[ 0 ] = VISU::Storable::FindValue( theMap, "myValLblFontColor[0]", "1" ).toFloat(); + myValLblFontColor[ 1 ] = VISU::Storable::FindValue( theMap, "myValLblFontColor[1]", "1" ).toFloat(); + myValLblFontColor[ 2 ] = VISU::Storable::FindValue( theMap, "myValLblFontColor[2]", "1" ).toFloat(); + return this; } @@ -1676,6 +1768,12 @@ VISU::ColoredPrs3d_i Storable::DataToStream( theStr, "myScalarRange[0]", GetMin() ); Storable::DataToStream( theStr, "myScalarRange[1]", GetMax() ); Storable::DataToStream( theStr, "myIsFixedRange", IsRangeFixed() ); + + Storable::DataToStream( theStr, "myIsFilteredByScalars", IsScalarFilterUsed() ); + Storable::DataToStream( theStr, "myScalarFilterRange[0]", GetScalarFilterMin() ); + Storable::DataToStream( theStr, "myScalarFilterRange[1]", GetScalarFilterMax() ); + + Storable::DataToStream( theStr, "myIsDistributionVisible", GetIsDistributionVisible() ); // RKV Storable::DataToStream( theStr, "myNumberOfColors", int(GetNbColors()) ); Storable::DataToStream( theStr, "myOrientation", myOrientation ); @@ -1683,15 +1781,15 @@ VISU::ColoredPrs3d_i Storable::DataToStream( theStr, "myTitle", myTitle.c_str() ); Storable::DataToStream( theStr, "myUnitsVisible", myIsUnits ); Storable::DataToStream( theStr, "myNumberOfLabels", myNumberOfLabels ); + Storable::DataToStream( theStr, "myLabelsFormat", myLabelsFormat.c_str() ); + Storable::DataToStream( theStr, "myPosition[0]", myPosition[0] ); Storable::DataToStream( theStr, "myPosition[1]", myPosition[1] ); Storable::DataToStream( theStr, "myWidth", myWidth ); Storable::DataToStream( theStr, "myHeight", myHeight ); - Storable::DataToStream( theStr, "myTitleWidth", myTitleWidth ); - Storable::DataToStream( theStr, "myTitleHeight", myTitleHeight ); - Storable::DataToStream( theStr, "myLabelWidth", myLabelWidth ); - Storable::DataToStream( theStr, "myLabelHeight", myLabelHeight ); + Storable::DataToStream( theStr, "myTitleSize", myTitleSize ); + Storable::DataToStream( theStr, "myLabelSize", myLabelSize ); Storable::DataToStream( theStr, "myBarWidth", myBarWidth ); Storable::DataToStream( theStr, "myBarHeight", myBarHeight ); @@ -1710,6 +1808,18 @@ VISU::ColoredPrs3d_i Storable::DataToStream( theStr, "myLabelColor[0]", myLabelColor[0] ); Storable::DataToStream( theStr, "myLabelColor[1]", myLabelColor[1] ); Storable::DataToStream( theStr, "myLabelColor[2]", myLabelColor[2] ); + + // Parameters of labels displayed field values + + Storable::DataToStream( theStr, "myValLblFontType", myValLblFontType ); + Storable::DataToStream( theStr, "myIsBoldValLbl", myIsBoldValLbl ); + Storable::DataToStream( theStr, "myIsItalicValLbl", myIsItalicValLbl ); + Storable::DataToStream( theStr, "myIsShadowValLbl", myIsShadowValLbl ); + Storable::DataToStream( theStr, "myValLblFontSize", myValLblFontSize ); + Storable::DataToStream( theStr, "myValLblFontColor[0]", myValLblFontColor[ 0 ] ); + Storable::DataToStream( theStr, "myValLblFontColor[1]", myValLblFontColor[ 1 ] ); + Storable::DataToStream( theStr, "myValLblFontColor[2]", myValLblFontColor[ 2 ] ); + std::ostringstream aGeomNameList; std::string aMeshName = GetCMeshName(); @@ -1740,6 +1850,15 @@ VISU::ColoredPrs3d_i } +//---------------------------------------------------------------------------- +void +VISU::ColoredPrs3d_i +::SetMapScale(double theMapScale) +{ + GetSpecificPL()->SetMapScale(theMapScale); +} + + //---------------------------------------------------------------------------- void VISU::ColoredPrs3d_i @@ -1832,3 +1951,181 @@ VISU::ColoredPrs3d_i aStudyBuilder->CommitCommand(); return this; } + +//---------------------------------------------------------------------------- +void +VISU::ColoredPrs3d_i +::SetIsDistributionVisible(CORBA::Boolean isVisible) +{ + if( myIsDistributionVisible != isVisible ){ + VISU::TSetModified aModified(this); + myIsDistributionVisible = isVisible; + myParamsTime.Modified(); + } +} + +//---------------------------------------------------------------------------- +CORBA::Boolean +VISU::ColoredPrs3d_i +::GetIsDistributionVisible() +{ + return myIsDistributionVisible; +} + +//---------------------------------------------------------------------------- + + +int +VISU::ColoredPrs3d_i +::GetValLblFontType() const +{ + return myValLblFontType; +} + +//---------------------------------------------------------------------------- + +void +VISU::ColoredPrs3d_i +::SetValLblFontType( const int theType ) +{ + if ( myValLblFontType == theType ) + return; + + VISU::TSetModified aModified( this ); + + myValLblFontType = theType; + myParamsTime.Modified(); +} + +//---------------------------------------------------------------------------- + +double +VISU::ColoredPrs3d_i +::GetValLblFontSize() const +{ + return myValLblFontSize; +} + +//---------------------------------------------------------------------------- + +void +VISU::ColoredPrs3d_i +::SetValLblFontSize( const double theSize ) +{ + if ( VISU::CheckIsSameValue( myValLblFontSize, theSize ) ) + return; + + VISU::TSetModified aModified( this ); + + myValLblFontSize = theSize; + myParamsTime.Modified(); +} + +//---------------------------------------------------------------------------- + +void +VISU::ColoredPrs3d_i +::GetValLblFontColor( vtkFloatingPointType& theR, + vtkFloatingPointType& theG, + vtkFloatingPointType& theB ) const +{ + theR = myValLblFontColor[ 0 ]; + theG = myValLblFontColor[ 1 ]; + theB = myValLblFontColor[ 2 ]; +} + +//---------------------------------------------------------------------------- + +void +VISU::ColoredPrs3d_i +::SetValLblFontColor( const vtkFloatingPointType theR, + const vtkFloatingPointType theG, + const vtkFloatingPointType theB ) +{ + if ( VISU::CheckIsSameValue( myValLblFontColor[ 0 ], theR ) && + VISU::CheckIsSameValue( myValLblFontColor[ 1 ], theG ) && + VISU::CheckIsSameValue (myValLblFontColor[ 2 ], theB ) ) + return; + + VISU::TSetModified aModified(this); + + myValLblFontColor[ 0 ] = theR; + myValLblFontColor[ 1 ] = theG; + myValLblFontColor[ 2 ] = theB; + myParamsTime.Modified(); +} + +//---------------------------------------------------------------------------- + +bool +VISU::ColoredPrs3d_i +::IsBoldValLbl() const +{ + return myIsBoldValLbl; +} + +//---------------------------------------------------------------------------- + +void +VISU::ColoredPrs3d_i +::SetBoldValLbl( const bool theVal ) +{ + if ( myIsBoldValLbl == theVal ) + return; + + VISU::TSetModified aModified( this ); + + myIsBoldValLbl = theVal; + myParamsTime.Modified(); +} + +//---------------------------------------------------------------------------- + +bool +VISU::ColoredPrs3d_i +::IsItalicValLbl() const +{ + return myIsItalicValLbl; +} + +//---------------------------------------------------------------------------- + +void +VISU::ColoredPrs3d_i +::SetItalicValLbl( const bool theVal ) +{ + if ( myIsItalicValLbl == theVal ) + return; + + VISU::TSetModified aModified( this ); + + myIsItalicValLbl = theVal; + myParamsTime.Modified(); +} + +//---------------------------------------------------------------------------- + +bool +VISU::ColoredPrs3d_i +::IsShadowValLbl() const +{ + return myIsShadowValLbl; +} + +//---------------------------------------------------------------------------- + +void +VISU::ColoredPrs3d_i +::SetShadowValLbl( const bool theVal ) +{ + if ( myIsShadowValLbl == theVal ) + return; + + VISU::TSetModified aModified( this ); + + myIsShadowValLbl = theVal; + myParamsTime.Modified(); +} + +//---------------------------------------------------------------------------- + diff --git a/src/VISU_I/VISU_ColoredPrs3d_i.hh b/src/VISU_I/VISU_ColoredPrs3d_i.hh index c2035a21..d150f686 100644 --- a/src/VISU_I/VISU_ColoredPrs3d_i.hh +++ b/src/VISU_I/VISU_ColoredPrs3d_i.hh @@ -284,8 +284,7 @@ namespace VISU virtual void - SetRatios(CORBA::Long theTitleWidth, CORBA::Long theTitleHeight, - CORBA::Long theLabelWidth, CORBA::Long theLabelHeight, + SetRatios(CORBA::Long theTitleSize, CORBA::Long theLabelSize, CORBA::Long theBarWidth, CORBA::Long theBarHeight); virtual @@ -298,19 +297,11 @@ namespace VISU virtual CORBA::Long - GetTitleWidth(); - - virtual - CORBA::Long - GetTitleHeight(); + GetTitleSize(); virtual CORBA::Long - GetLabelWidth(); - - virtual - CORBA::Long - GetLabelHeight(); + GetLabelSize(); virtual CORBA::Long @@ -355,6 +346,40 @@ namespace VISU CORBA::Boolean IsUnitsVisible(); + /*! + * Set the visibility of a distribution curve. + * \param theIs is used to switch on/off the visibility of a distribution curve. + */ + virtual void SetIsDistributionVisible(CORBA::Boolean theIs); + + //! Gets current visibility of a distribution curve + virtual CORBA::Boolean GetIsDistributionVisible(); + + //! Gets current filtering by scalars mode + virtual CORBA::Boolean IsScalarFilterUsed(); + + virtual void UseScalarFiltering( CORBA::Boolean theUseScalarFilter ); + + /*! + * Sets scalar range - min and max boundaries of the scalar bar. + * \param theMin Min boundary of the scalar bar. + * \param theMax Max boundary of the scalar bar. + * \param theIsFilter if true then filter by scalars. + */ + virtual + void + SetScalarFilterRange( CORBA::Double theMin, CORBA::Double theMax ); + + //---------------------------------------------------------------------------- + virtual + CORBA::Double + GetScalarFilterMin(); + + //---------------------------------------------------------------------------- + virtual + CORBA::Double + GetScalarFilterMax(); + //---------------------------------------------------------------------------- //! Gets memory size actually used by the presentation (Mb). virtual @@ -537,12 +562,68 @@ namespace VISU vtkFloatingPointType theG, vtkFloatingPointType theB); + virtual + void + SetMapScale(double theMapScale = 1.0); + VISU_ColoredPL* GetSpecificPL() const { return myColoredPL; } + virtual + int + GetValLblFontType() const; + + virtual + void + SetValLblFontType( const int theType ); + + virtual + double + GetValLblFontSize() const; + + virtual + void + SetValLblFontSize( const double theSize ); + + virtual + bool + IsBoldValLbl() const; + + virtual + void + SetBoldValLbl( const bool theVal ); + + virtual + bool + IsItalicValLbl() const; + + virtual + void + SetItalicValLbl( const bool theVal ); + + virtual + bool + IsShadowValLbl() const; + + virtual + void + SetShadowValLbl( const bool theVal ); + + virtual + void + GetValLblFontColor( vtkFloatingPointType& theR, + vtkFloatingPointType& theG, + vtkFloatingPointType& theB ) const; + + virtual + void + SetValLblFontColor( const vtkFloatingPointType theR, + const vtkFloatingPointType theG, + const vtkFloatingPointType theB ); + //---------------------------------------------------------------------------- protected: /*! @@ -650,11 +731,11 @@ namespace VISU int myNumberOfLabels; std::string myLabelsFormat; + VISU::ColoredPrs3dBase::Orientation myOrientation; vtkFloatingPointType myPosition[2], myWidth, myHeight, - myTitleWidth, myTitleHeight, - myLabelWidth, myLabelHeight, + myTitleSize, myLabelSize, myBarWidth, myBarHeight; //Font management @@ -673,6 +754,15 @@ namespace VISU VISU_ColoredPL* myColoredPL; bool myIsFixedRange; + bool myIsDistributionVisible; // RKV + + // Result labels + int myValLblFontType; + double myValLblFontSize; + bool myIsBoldValLbl; + bool myIsItalicValLbl; + bool myIsShadowValLbl; + vtkFloatingPointType myValLblFontColor[ 3 ]; }; diff --git a/src/VISU_I/VISU_CorbaMedConvertor.cxx b/src/VISU_I/VISU_CorbaMedConvertor.cxx index 1bdcf0ae..367749de 100644 --- a/src/VISU_I/VISU_CorbaMedConvertor.cxx +++ b/src/VISU_I/VISU_CorbaMedConvertor.cxx @@ -1194,8 +1194,16 @@ VISU_MEDConvertor vtkIdType aDataType = VTK_DOUBLE; SALOME_MED::FIELDDOUBLE_ptr aFieldDouble = SALOME_MED::FIELDDOUBLE::_narrow(aMEDField); - if(aFieldDouble->_is_nil()) - aDataType = VTK_LONG; + if(aFieldDouble->_is_nil()){ + if (sizeof(long) == 4 ) // Size of CORBA::Long is always 4 (see CORBA_basetypes.h) + //Fix for IPAL20325 Crash on create presentation for imported field + aDataType = VTK_LONG; + else if (sizeof(int) == 4) + aDataType = VTK_INT; + else { + throw std::runtime_error("Can't map CORBA::Long to a VTK type"); + } + } aField->Init(aMEDField->getNumberOfComponents(), aDataType); aFieldMap[aFieldName.in()] = aField; diff --git a/src/VISU_I/VISU_CutLines_i.cc b/src/VISU_I/VISU_CutLines_i.cc index e329711c..af649133 100644 --- a/src/VISU_I/VISU_CutLines_i.cc +++ b/src/VISU_I/VISU_CutLines_i.cc @@ -46,6 +46,7 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; //--------------------------------------------------------------- size_t diff --git a/src/VISU_I/VISU_CutPlanes_i.cc b/src/VISU_I/VISU_CutPlanes_i.cc index 4592dea6..dcd1acfc 100644 --- a/src/VISU_I/VISU_CutPlanes_i.cc +++ b/src/VISU_I/VISU_CutPlanes_i.cc @@ -41,7 +41,7 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif - +using namespace std; //---------------------------------------------------------------------------- size_t diff --git a/src/VISU_I/VISU_Deformation_i.cc b/src/VISU_I/VISU_Deformation_i.cc deleted file mode 100755 index 507a9476..00000000 --- a/src/VISU_I/VISU_Deformation_i.cc +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_Deformation_i.cc -// Author : -// Module : VISU - -#include "VISU_Deformation_i.hh" -#include "VISU_Result_i.hh" -#include "VISU_Prs3dUtils.hh" - -#include "VISU_DeformationPL.hxx" -#include "VISU_Convertor.hxx" -#include "VISU_DeformationPL.hxx" -#include "VISUConfig.hh" - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -//--------------------------------------------------------------- -VISU::Deformation_i::Deformation_i(VISU::ColoredPrs3d_i *thePrs3d): - myColoredPrs3d(thePrs3d) -{ - if(MYDEBUG) MESSAGE("Deformation_i::Deformation_i()"); -} - -//--------------------------------------------------------------- -VISU::Deformation_i::~Deformation_i() -{ - if(MYDEBUG) MESSAGE("Deformation_i::~Deformation_i()"); -} - -//--------------------------------------------------------------- -void VISU::Deformation_i::SetScale(CORBA::Double theScale) -{ - if(MYDEBUG) MESSAGE("Deformation_i::SetScale()"); - - VISU::TSetModified aModified(GetColoredPrs3d()); - - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificDeformedPL(), &VISU_DeformationPL::SetScale, theScale)); -} - -//--------------------------------------------------------------- -void VISU::Deformation_i::InitDeformedPipeLine(VISU_DeformationPL* theDeformedPipeLine){ - - if(MYDEBUG) MESSAGE("Deformation_i::InitDeformedPipeLine()"); - myDeformationPL = theDeformedPipeLine; -} - -//--------------------------------------------------------------- -CORBA::Double -VISU::Deformation_i -::GetScale() -{ - if(MYDEBUG) MESSAGE("Deformation_i::GetScale()"); - return GetSpecificDeformedPL()->GetScale(); -} - -//--------------------------------------------------------------- -VISU::Entity VISU::Deformation_i::GetVectorialFieldEntity(){ - return myVectorialEntity; -} - -//--------------------------------------------------------------- -char* VISU::Deformation_i::GetVectorialFieldName(){ - return CORBA::string_dup(myVectorialFieldName.c_str()); -} - -//--------------------------------------------------------------- -void VISU::Deformation_i:: -DeformationToStream(std::ostringstream& theStr) -{ - Storable::DataToStream(theStr,"myScaleFactor", GetScale()); - Storable::DataToStream(theStr,"myVectorialField", GetVectorialFieldName()); - Storable::DataToStream(theStr,"myVectorialEntiry", GetVectorialFieldEntity()); - -} - -//--------------------------------------------------------------- -void -VISU::Deformation_i::RestoreDeformation(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap) -{ - SetScale(VISU::Storable::FindValue(theMap,"myScaleFactor").toDouble()); - VISU::Entity anEntity = VISU::Entity(VISU::Storable::FindValue(theMap, "myVectorialEntiry").toInt()); - - SetVectorialField(anEntity, - VISU::Storable::FindValue(theMap, "myVectorialField").toLatin1().constData()); -} - -//--------------------------------------------------------------- -void -VISU::Deformation_i::SameAsDeformation(const Deformation_i *aDeformedPrs){ - if(const Deformation_i* aPrs = dynamic_cast(aDeformedPrs)) { - Deformation_i* anOrigin = const_cast(aPrs); - - CORBA::String_var aVectorialFieldName = anOrigin->GetVectorialFieldName(); - VISU::Entity anEntity = anOrigin->GetVectorialFieldEntity(); - this->SetVectorialField(anEntity, - aVectorialFieldName); - this->SetScale(anOrigin->GetScale()); - } -} - -void VISU::Deformation_i::SetVectorialField(Entity theEntity, const char* theFieldName){ - if(MYDEBUG) MESSAGE("CutPlanes_i::SetVectorialField()"); - - bool anIsModified = false; - if(!anIsModified) - anIsModified |= GetVectorialFieldEntity() != theEntity; - - if(!anIsModified) - anIsModified |= GetVectorialFieldName() != theFieldName; - - if(!anIsModified) - return; - - ColoredPrs3d_i *aColoredPrs = GetColoredPrs3d(); - int aTimeStampNumber = aColoredPrs->GetTimeStampNumber(); - - VISU::TEntity aEntity = VISU::TEntity(theEntity); - - VISU::Result_i::PInput anInput = aColoredPrs->GetCResult()->GetInput(aColoredPrs->GetCMeshName(), - theEntity, - theFieldName, - aTimeStampNumber); - - PField aVectorialField = anInput->GetField(aColoredPrs->GetCMeshName(), aEntity, theFieldName); - - VISU::PUnstructuredGridIDMapper anIDMapper = - anInput->GetTimeStampOnMesh(aColoredPrs->GetCMeshName(), - aEntity, - theFieldName, - aTimeStampNumber); - if(GetSpecificDeformedPL() && anIDMapper) { - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificDeformedPL(), &VISU_DeformationPL::SetVectorialField, anIDMapper)); - - VISU::TSetModified aModified(GetColoredPrs3d()); - - myVectorialEntity = theEntity; - myVectorialFieldName = theFieldName; - myVectorialField = anIDMapper; - } -}; diff --git a/src/VISU_I/VISU_Deformation_i.hh b/src/VISU_I/VISU_Deformation_i.hh deleted file mode 100755 index 821b2735..00000000 --- a/src/VISU_I/VISU_Deformation_i.hh +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_Deformation_i.hxx -// Author : -// Module : VISU - -#ifndef VISU_Deformation_i_HeaderFile -#define VISU_Deformation_i_HeaderFile - -#include "VISU_I.hxx" -#include "VISU_ColoredPrs3d_i.hh" -#include "VISU_DeformationPL.hxx" - - - -namespace VISU{ - - class VISU_I_EXPORT Deformation_i : public virtual POA_VISU::Deformation - { - Deformation_i(const Deformation_i&); - public: - typedef VISU::Deformation TInterface; - - Deformation_i(VISU::ColoredPrs3d_i* theColoredPrs3d); - virtual ~Deformation_i(); - - virtual - void - SetScale(CORBA::Double theScale); - - virtual - CORBA::Double - GetScale(); - - virtual - void - DeformationToStream(std::ostringstream& theStr); - - virtual - void - RestoreDeformation(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap); - - virtual - void - SameAsDeformation(const Deformation_i *aDeformedPrs); - - virtual - VISU::Entity - GetVectorialFieldEntity(); - - virtual - char* - GetVectorialFieldName(); - - virtual void SetVectorialField(Entity theEntity, const char* theFieldName); - - protected: - virtual - void - InitDeformedPipeLine(VISU_DeformationPL* theDeformedPipeLine); - - VISU_DeformationPL* - GetSpecificDeformedPL() const - { - return myDeformationPL; - } - - ColoredPrs3d_i* GetColoredPrs3d(){ - return myColoredPrs3d; - } - - - private: - VISU_DeformationPL *myDeformationPL; - - PField myVectorialField; - VISU::Entity myVectorialEntity; - std::string myVectorialFieldName; - ColoredPrs3d_i *myColoredPrs3d; - - }; -} - -#endif diff --git a/src/VISU_I/VISU_DeformedShape_i.cc b/src/VISU_I/VISU_DeformedShape_i.cc index a4811982..fd6ee897 100644 --- a/src/VISU_I/VISU_DeformedShape_i.cc +++ b/src/VISU_I/VISU_DeformedShape_i.cc @@ -45,6 +45,7 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; //--------------------------------------------------------------- size_t diff --git a/src/VISU_I/VISU_DumpPython.cc b/src/VISU_I/VISU_DumpPython.cc index 93da7d73..53922a9e 100644 --- a/src/VISU_I/VISU_DumpPython.cc +++ b/src/VISU_I/VISU_DumpPython.cc @@ -179,6 +179,28 @@ namespace VISU //--------------------------------------------------------------------------- + void SetClippingPlane(Prs3d_i* thePrs, string theName, + std::ostream& theStr, + std::string thePrefix) + { + VISU_CutPlaneFunction* aPlane; + VISU_Gen_i* aGen = VISU_Gen_i::GetVisuGenImpl(); + VISU_ClippingPlaneMgr& aMgr = aGen->GetClippingPlaneMgr(); + int aId; + for (int i = 0; i < thePrs->GetNumberOfClippingPlanes(); i++) { + aPlane = dynamic_cast(thePrs->GetClippingPlane(i)); + if (aPlane) { + if (!aPlane->isAuto()) { + aId = aMgr.GetPlaneId(aPlane); + if (aId > -1) { + theStr<GetOffset(x,y,z); theStr<IsBarVisible()? "True" : "False"; theStr<IsShrank()? "True" : "False")<<")"<GetOrigin(aOrigin); + aPlane->GetNormal(aDir); + + theStr<isAuto()<<",\""<getName()<<"\")"<GetDefaultScript("Post-Pro", aPrefix.c_str()); diff --git a/src/VISU_I/VISU_GaussPoints_i.cc b/src/VISU_I/VISU_GaussPoints_i.cc index 2fa93815..af6412b4 100644 --- a/src/VISU_I/VISU_GaussPoints_i.cc +++ b/src/VISU_I/VISU_GaussPoints_i.cc @@ -56,6 +56,8 @@ static int MYDEBUG = 0; static int INCMEMORY = 10; +using namespace std; + //---------------------------------------------------------------------------- size_t VISU::GaussPoints_i @@ -851,7 +853,11 @@ VISU_Actor* VISU::GaussPoints_i ::CreateActor() { - return OnCreateActor1(); + VISU_GaussPtsAct* anActor = VISU_GaussPtsAct::New(); + if(OnCreateActor(anActor)) + return anActor; + return NULL; + // return OnCreateActor1(); } //---------------------------------------------------------------------------- @@ -877,8 +883,7 @@ VISU::GaussPoints_i theScalarBar->SetTitle(GetScalarBarTitle().c_str()); theScalarBar->SetOrientation(GetBarOrientation()); theScalarBar->SetNumberOfLabels(GetLabels()); - theScalarBar->SetRatios(GetTitleWidth(), GetTitleHeight(), - GetLabelWidth(), GetLabelHeight(), + theScalarBar->SetRatios(GetTitleSize(), GetLabelSize(), GetBarWidth(), GetBarHeight()); theScalarBar->SetLabelFormat(GetLabelsFormat()); @@ -994,7 +999,24 @@ VISU::GaussPoints_i theActor->SetRepresentation( VTK_POINTS ); else theActor->SetRepresentation( VTK_SURFACE ); + + // Update values labels + + vtkTextProperty* aProp = anActor->GetsValLabelsProps(); + if ( aProp ) + { + aProp->SetFontFamily( GetValLblFontType() ); + aProp->SetFontSize( GetValLblFontSize() ); + aProp->SetBold( IsBoldValLbl() ); + aProp->SetItalic( IsItalicValLbl() ); + aProp->SetShadow( IsShadowValLbl() ); + + vtkFloatingPointType anRGB[ 3 ]; + GetValLblFontColor( anRGB[ 0 ], anRGB[ 1 ], anRGB[ 2 ] ); + aProp->SetColor( anRGB[ 0 ], anRGB[ 1 ], anRGB[ 2 ] ); + } } + TSuperClass::UpdateActor(theActor); } diff --git a/src/VISU_I/VISU_Gen_i.cc b/src/VISU_I/VISU_Gen_i.cc index 0732d558..74c07067 100644 --- a/src/VISU_I/VISU_Gen_i.cc +++ b/src/VISU_I/VISU_Gen_i.cc @@ -94,6 +94,8 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; + extern "C" VISU_I_EXPORT VISU::VISU_Gen_ptr GetImpl(CORBA::ORB_ptr theORB, @@ -215,6 +217,7 @@ namespace VISU Storable::RegistryStorableEngine(ColoredPrs3dHolder_i::myComment.c_str(),&(ColoredPrs3dHolder_i::StorableEngine)); Storable::RegistryStorableEngine(ColoredPrs3dCache_i::myComment.c_str(),&(ColoredPrs3dCache_i::StorableEngine)); + Storable::RegistryStorableEngine(PointMap3d_i::myComment.c_str(),&(PointMap3d_i::StorableEngine)); Storable::RegistryStorableEngine(Table_i::myComment.c_str(),&(Table_i::StorableEngine)); Storable::RegistryStorableEngine(Curve_i::myComment.c_str(),&(Curve_i::StorableEngine)); Storable::RegistryStorableEngine(Container_i::myComment.c_str(),&(Container_i::StorableEngine)); @@ -258,6 +261,7 @@ namespace VISU CORBA::String_var aStudyName = aListOfOpenStudies[0]; //aFileInfo.setFile(aStudyName.in()); myStudyDocument = aStudyManager->GetStudyByName(aStudyName/*aFileInfo.baseName()*/); + myClippingPlaneMgr.SetStudy(GetStudy(myStudyDocument)); }else if(MYDEBUG) MESSAGE("VISU_Gen_i::VISU_Gen_i : there is no opened study in StudyManager !!!"); } @@ -538,6 +542,7 @@ namespace VISU std::string aStudyName (aName.in()); if(MYDEBUG) MESSAGE("StudyId = " << theStudy->StudyId() << "; Name = '" << aName.in() << "'"); myStudyDocument = SALOMEDS::Study::_duplicate(theStudy); + myClippingPlaneMgr.SetStudy(GetStudy(myStudyDocument)); ProcessVoidEvent(new TEvent(aStudyName)); @@ -1430,4 +1435,74 @@ namespace VISU { return ColoredPrs3dCache_i::GetInstance(theStudy); } + + + CORBA::Long VISU_Gen_i::CreateClippingPlane(CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name) + { + return myClippingPlaneMgr.CreateClippingPlane(X, Y, Z, dX, dY, dZ, isAuto, name); + } + + + void VISU_Gen_i::EditClippingPlane(CORBA::Long id, CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name) + { + myClippingPlaneMgr.EditClippingPlane(id, X, Y, Z, dX, dY, dZ, isAuto, name); + } + + /* Returns clipping plane by its Id */ + VISU::ClippingPlane* VISU_Gen_i::GetClippingPlane(CORBA::Long id) + { + VISU_CutPlaneFunction* aPlane = myClippingPlaneMgr.GetClippingPlane(id); + + if (aPlane != NULL) { + double aOrigin[3]; + double aDir[3]; + aPlane->GetOrigin(aOrigin); + aPlane->GetNormal(aDir); + + VISU::ClippingPlane* aRetPlane = new VISU::ClippingPlane; + aRetPlane->X = aOrigin[0]; + aRetPlane->Y = aOrigin[1]; + aRetPlane->Z = aOrigin[2]; + aRetPlane->dX = aDir[0]; + aRetPlane->dY = aDir[1]; + aRetPlane->dZ = aDir[2]; + aRetPlane->isAuto = aPlane->isAuto(); + + aRetPlane->name = aPlane->getName().c_str(); + return aRetPlane; + } + return NULL; + } + + /* Deletes clipping plane by its Id */ + CORBA::Boolean VISU_Gen_i::DeleteClippingPlane(CORBA::Long id) + { + return myClippingPlaneMgr.DeleteClippingPlane(id); + } + + /* Applyes a clipping plane with Id to presentation thePrs */ + CORBA::Boolean VISU_Gen_i::ApplyClippingPlane(Prs3d_ptr thePrs, CORBA::Long id) + { + VISU::Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(thePrs).in()); + return myClippingPlaneMgr.ApplyClippingPlane(aPrs, id); + } + + /* Detaches a clipping plane with Id from presentation thePrs */ + CORBA::Boolean VISU_Gen_i::DetachClippingPlane(Prs3d_ptr thePrs, CORBA::Long id) + { + VISU::Prs3d_i* aPrs = dynamic_cast(VISU::GetServant(thePrs).in()); + return myClippingPlaneMgr.DetachClippingPlane(aPrs, id); + } + + /* Get number of clipping planes */ + CORBA::Long VISU_Gen_i::GetClippingPlanesNb() + { + return myClippingPlaneMgr.GetClippingPlanesNb(); + } + + } diff --git a/src/VISU_I/VISU_Gen_i.hh b/src/VISU_I/VISU_Gen_i.hh index 1043ed2a..63cbf179 100644 --- a/src/VISU_I/VISU_Gen_i.hh +++ b/src/VISU_I/VISU_Gen_i.hh @@ -30,6 +30,7 @@ #include "SALOME_Component_i.hxx" #include "SALOME_NamingService.hxx" #include "VISU_ColoredPrs3d_i.hh" +#include "VISU_ClippingPlaneMgr.hxx" #include @@ -41,6 +42,8 @@ namespace VISU public virtual Base_i { SALOMEDS::Study_var myStudyDocument; + VISU_ClippingPlaneMgr myClippingPlaneMgr; + VISU_Gen_i(const VISU::VISU_Gen_i &); public: VISU_Gen_i(CORBA::ORB_ptr theORB, @@ -361,6 +364,33 @@ namespace VISU virtual VISU::ColoredPrs3dCache_ptr GetColoredPrs3dCache(SALOMEDS::Study_ptr theStudy); + + + virtual CORBA::Long CreateClippingPlane(CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name); + + virtual void EditClippingPlane(CORBA::Long id, CORBA::Double X,CORBA::Double Y, CORBA::Double Z, + CORBA::Double dX, CORBA::Double dY, CORBA::Double dZ, + CORBA::Boolean isAuto, const char* name); + + /* Returns clipping plane by its Id */ + virtual VISU::ClippingPlane* GetClippingPlane(CORBA::Long id); + + /* Deletes clipping plane by its Id */ + virtual CORBA::Boolean DeleteClippingPlane(CORBA::Long id); + + /* Applyes a clipping plane with Id to presentation thePrs */ + virtual CORBA::Boolean ApplyClippingPlane(Prs3d_ptr thePrs, CORBA::Long id); + + /* Detaches a clipping plane with Id from presentation thePrs */ + virtual CORBA::Boolean DetachClippingPlane(Prs3d_ptr thePrs, CORBA::Long id); + + /* Get number of clipping planes */ + virtual CORBA::Long GetClippingPlanesNb(); + + VISU_ClippingPlaneMgr& GetClippingPlaneMgr() { return myClippingPlaneMgr; } + }; } diff --git a/src/VISU_I/VISU_IsoSurfaces_i.cc b/src/VISU_I/VISU_IsoSurfaces_i.cc index 90e3b18a..6d637875 100644 --- a/src/VISU_I/VISU_IsoSurfaces_i.cc +++ b/src/VISU_I/VISU_IsoSurfaces_i.cc @@ -43,6 +43,8 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; + //--------------------------------------------------------------- size_t VISU::IsoSurfaces_i diff --git a/src/VISU_I/VISU_Mesh_i.cc b/src/VISU_I/VISU_Mesh_i.cc index 3886da2a..a4a67ff3 100644 --- a/src/VISU_I/VISU_Mesh_i.cc +++ b/src/VISU_I/VISU_Mesh_i.cc @@ -46,6 +46,8 @@ static int MYDEBUG = 0; static int INCMEMORY = 4; +using namespace std; + //---------------------------------------------------------------------------- namespace { @@ -127,6 +129,8 @@ VISU::Mesh_i SetMeshName(theMeshName.c_str()); myEntity = int(theEntity);//jfa IPAL9284 mySubMeshName = theFamilyName; + SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); + myIsShrank = aResourceMgr->booleanValue("VISU", "mesh_shrink", false); return Build(false); } @@ -189,6 +193,8 @@ VISU::Mesh_i throw std::runtime_error("Mesh_i::Build - GetCResult()->GetInput() == NULL !!!"); if (!theRestoring) { myPresentType = VISU::PresentationType(VISU::GetResourceMgr()->integerValue("VISU" , "mesh_represent", 2)); + myIsShrank = (myPresentType == VISU::SHRINK); + if(myEntity == VISU::NODE_ENTITY) myPresentType = VISU::POINT; SetName((const char*)GenerateName().toLatin1(), false); @@ -397,7 +403,9 @@ VISU::Mesh_i return; VISU::TSetModified aModified(this); - + if (theType == VISU::SHRINK) { + myIsShrank = true; + } myPresentType = theType; myParamsTime.Modified(); } @@ -444,6 +452,8 @@ VISU::Mesh_i myPresentType = VISU::PresentationType(VISU::Storable::FindValue(theMap,"myPresentType").toInt()); + myIsShrank = (VISU::Storable::FindValue(theMap,"myIsShrank", "0").toInt() == 1)? true: false; + myCellColor.R = VISU::Storable::FindValue(theMap,"myCellColor.R").toDouble(); myCellColor.G = VISU::Storable::FindValue(theMap,"myCellColor.G").toDouble(); myCellColor.B = VISU::Storable::FindValue(theMap,"myCellColor.B").toDouble(); @@ -485,6 +495,8 @@ VISU::Mesh_i Storable::DataToStream( theStr, "myPresentType", int(myPresentType) ); + Storable::DataToStream( theStr, "myIsShrank", (myIsShrank? "1":"0")); + Storable::DataToStream( theStr, "myCellColor.R", myCellColor.R ); Storable::DataToStream( theStr, "myCellColor.G", myCellColor.G ); Storable::DataToStream( theStr, "myCellColor.B", myCellColor.B ); @@ -508,8 +520,21 @@ VISU::Mesh_i try{ VISU::Prs3d_i::CreateActor(anActor); SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - bool toShrink = aResourceMgr->booleanValue("VISU", "mesh_shrink", false); - if (toShrink) anActor->SetShrink(); + //bool toShrink = aResourceMgr->booleanValue("VISU", "mesh_shrink", false); + //if (toShrink) anActor->SetShrink(); + if (anActor->IsShrunkable()) { + if (myIsShrank) + anActor->SetShrink(); + else + anActor->UnShrink(); + } + anActor->SetFeatureEdgesAngle( aResourceMgr->doubleValue("VISU", "feature_edges_angle", 0.0) ); + anActor->SetFeatureEdgesFlags( aResourceMgr->booleanValue("VISU", "show_feature_edges", false), + aResourceMgr->booleanValue("VISU", "show_boundary_edges", false), + aResourceMgr->booleanValue("VISU", "show_manifold_edges", false), + aResourceMgr->booleanValue("VISU", "show_non_manifold_edges", false) ); + anActor->SetFeatureEdgesColoring( aResourceMgr->booleanValue("VISU", "feature_edges_coloring", false) ); + UpdateActor(anActor); }catch (...) { anActor->Delete(); @@ -528,6 +553,12 @@ VISU::Mesh_i if(MYDEBUG) MESSAGE("Mesh_i::UpdateActor"); VISU::Prs3d_i::UpdateActor(anActor); anActor->SetRepresentation(myPresentType); + if (anActor->IsShrunkable()) { + if (myIsShrank) + anActor->SetShrink(); + else + anActor->UnShrink(); + } anActor->GetSurfaceProperty()->SetColor(myCellColor.R, myCellColor.G, myCellColor.B); anActor->GetEdgeProperty()->SetColor(myLinkColor.R, myLinkColor.G, myLinkColor.B); anActor->GetNodeProperty()->SetColor(myNodeColor.R, myNodeColor.G, myNodeColor.B); @@ -535,3 +566,20 @@ VISU::Mesh_i } //---------------------------------------------------------------------------- + + +void VISU::Mesh_i::SetShrink(CORBA::Boolean toShrink) +{ + if(toShrink == myIsShrank) + return; + VISU::TSetModified aModified(this); + myIsShrank = toShrink; + myParamsTime.Modified(); +} + +//---------------------------------------------------------------------------- +CORBA::Boolean VISU::Mesh_i::IsShrank() +{ + return myIsShrank; +} + diff --git a/src/VISU_I/VISU_Mesh_i.hh b/src/VISU_I/VISU_Mesh_i.hh index b0395f14..02d4efbc 100644 --- a/src/VISU_I/VISU_Mesh_i.hh +++ b/src/VISU_I/VISU_Mesh_i.hh @@ -95,6 +95,11 @@ namespace VISU VISU::PresentationType GetPresentationType(); + + virtual void SetShrink(CORBA::Boolean toShrink); + + virtual CORBA::Boolean IsShrank(); + VISU_MeshPL* GetSpecificPL() const { return myMeshPL; @@ -114,6 +119,7 @@ namespace VISU SALOMEDS::Color myCellColor; SALOMEDS::Color myNodeColor; SALOMEDS::Color myLinkColor; + bool myIsShrank; public: static diff --git a/src/VISU_I/VISU_MonoColorPrs_i.cc b/src/VISU_I/VISU_MonoColorPrs_i.cc deleted file mode 100644 index 28afbc8d..00000000 --- a/src/VISU_I/VISU_MonoColorPrs_i.cc +++ /dev/null @@ -1,186 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_MonoColorPrs_i.cxx -// Author : Vitaly Smetannikov -// Module : VISU - - -#include "VISU_MonoColorPrs_i.hh" -#include "VISU_Prs3dUtils.hh" -#include "VISU_PipeLineUtils.hxx" -#include "VISU_ScalarMapAct.h" - -#include "VISU_PipeLine.hxx" - -#include -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -//--------------------------------------------------------------- -VISU::MonoColorPrs_i -::MonoColorPrs_i(EPublishInStudyMode thePublishInStudyMode): - ColoredPrs3d_i(thePublishInStudyMode), - ScalarMap_i(thePublishInStudyMode) -{ - if(MYDEBUG) MESSAGE("MonoColorPrs_i::MonoColorPrs_i"); -} - -//--------------------------------------------------------------- -void -VISU::MonoColorPrs_i -::SameAs(const Prs3d_i* theOrigin) -{ - TSuperClass::SameAs(theOrigin); - - if(const MonoColorPrs_i* aPrs3d = dynamic_cast(theOrigin)){ - MonoColorPrs_i* anOrigin = const_cast(aPrs3d); - SetColor(anOrigin->GetColor()); - ShowColored(anOrigin->IsColored()); - } -} - - -//--------------------------------------------------------------- -VISU::Storable* -VISU::MonoColorPrs_i -::Create(const std::string& theMeshName, - VISU::Entity theEntity, - const std::string& theFieldName, - CORBA::Long theTimeStampNumber) -{ - myIsColored = false; - myColor.R = myColor.G = myColor.B = 0.5; - return TSuperClass::Create(theMeshName,theEntity,theFieldName,theTimeStampNumber); -} - -//--------------------------------------------------------------- -VISU::Storable* -VISU::MonoColorPrs_i -::Restore(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap) -{ - if(!TSuperClass::Restore(theSObject, theMap)) - return NULL; - - myIsColored = VISU::Storable::FindValue(theMap,"myIsColored").toInt(); - myColor.R = VISU::Storable::FindValue(theMap,"myColor.R").toDouble(); - myColor.G = VISU::Storable::FindValue(theMap,"myColor.G").toDouble(); - myColor.B = VISU::Storable::FindValue(theMap,"myColor.B").toDouble(); - - return this; -} - -//--------------------------------------------------------------- -void -VISU::MonoColorPrs_i -::ToStream(std::ostringstream& theStr) -{ - TSuperClass::ToStream(theStr); - - Storable::DataToStream( theStr, "myIsColored", myIsColored ); - Storable::DataToStream( theStr, "myColor.R", myColor.R ); - Storable::DataToStream( theStr, "myColor.G", myColor.G ); - Storable::DataToStream( theStr, "myColor.B", myColor.B ); -} - - -//--------------------------------------------------------------- -VISU::MonoColorPrs_i::~MonoColorPrs_i() -{ - if(MYDEBUG) MESSAGE("MonoColorPrs_i::~MonoColorPrs_i()"); -} - -//--------------------------------------------------------------- -CORBA::Boolean VISU::MonoColorPrs_i::IsColored() -{ - return myIsColored; -} - - - -//--------------------------------------------------------------- -void -VISU::MonoColorPrs_i::ShowColored(CORBA::Boolean theColored) -{ - if(myIsColored == theColored) - return; - myIsColored = theColored; - myParamsTime.Modified(); -} - -//--------------------------------------------------------------- -SALOMEDS::Color VISU::MonoColorPrs_i::GetColor() -{ - return myColor; -} - -//--------------------------------------------------------------- -void VISU::MonoColorPrs_i::SetColor(const SALOMEDS::Color& theColor) -{ - bool anIsSameValue = VISU::CheckIsSameValue(myColor.R, theColor.R); - anIsSameValue &= VISU::CheckIsSameValue(myColor.G, theColor.G); - anIsSameValue &= VISU::CheckIsSameValue(myColor.B, theColor.B); - if(anIsSameValue) - return; - - VISU::TSetModified aModified(this); - - myColor = theColor; - myParamsTime.Modified(); -} - -//--------------------------------------------------------------- -VISU_Actor* VISU::MonoColorPrs_i::CreateActor(bool toSupressShrinking) -{ - VISU_Actor* anActor = TSuperClass::CreateActor(toSupressShrinking); - anActor->GetProperty()->SetColor(myColor.R,myColor.G,myColor.B); - return anActor; -} - -//--------------------------------------------------------------- -VISU_Actor* VISU::MonoColorPrs_i::CreateActor() -{ - return CreateActor(false); -} - -//--------------------------------------------------------------- -void VISU::MonoColorPrs_i::UpdateActor(VISU_ActorBase* theActor) -{ - if(VISU_ScalarMapAct* anActor = dynamic_cast(theActor)){ - if(IsColored()){ - anActor->SetBarVisibility(true); - GetPipeLine()->GetMapper()->SetScalarVisibility(1); - }else{ - anActor->SetBarVisibility(false); - GetPipeLine()->GetMapper()->SetScalarVisibility(0); - anActor->GetProperty()->SetColor(myColor.R,myColor.G,myColor.B); - } - TSuperClass::UpdateActor(theActor); - } -} - diff --git a/src/VISU_I/VISU_MonoColorPrs_i.hh b/src/VISU_I/VISU_MonoColorPrs_i.hh deleted file mode 100644 index 50fff308..00000000 --- a/src/VISU_I/VISU_MonoColorPrs_i.hh +++ /dev/null @@ -1,83 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_MonoColorPrs_i.hxx -// Author : Vitaly Smetannikov -// Module : VISU - - -#ifndef VISU_MonoColorPrs_i_HeaderFile -#define VISU_MonoColorPrs_i_HeaderFile - -#include -#include "VISU_ScalarMap_i.hh" - -namespace VISU -{ - //---------------------------------------------------------------------------- - class VISU_I_EXPORT MonoColorPrs_i : public virtual POA_VISU::MonoColorPrs, - public virtual ScalarMap_i - { - MonoColorPrs_i(const MonoColorPrs_i&); - - public: - //---------------------------------------------------------------------------- - typedef ScalarMap_i TSuperClass; - typedef VISU::MonoColorPrs TInterface; - - explicit MonoColorPrs_i(EPublishInStudyMode thePublishInStudyModep); - - virtual void SameAs(const Prs3d_i* theOrigin); - - virtual ~MonoColorPrs_i(); - - virtual CORBA::Boolean IsColored(); - - virtual void ShowColored(CORBA::Boolean theColored); - - virtual SALOMEDS::Color GetColor(); - - virtual void SetColor(const SALOMEDS::Color& theColor); - - protected: - SALOMEDS::Color myColor; - bool myIsColored; - - public: - virtual Storable* Create(const std::string& theMeshName, - VISU::Entity theEntity, - const std::string& theFieldName, - CORBA::Long theTimeStampNumber); - - virtual void ToStream(std::ostringstream& theStr); - - virtual Storable* Restore(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap); - - virtual VISU_Actor* CreateActor(); - - virtual VISU_Actor* CreateActor(bool toSupressShrinking); - - virtual void UpdateActor(VISU_ActorBase* theActor); - }; -}; -#endif diff --git a/src/VISU_I/VISU_OptionalDeformation_i.cc b/src/VISU_I/VISU_OptionalDeformation_i.cc deleted file mode 100755 index 77a12298..00000000 --- a/src/VISU_I/VISU_OptionalDeformation_i.cc +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_OptionalDeformation_i.cc -// Author : -// Module : VISU - -#include "VISU_OptionalDeformation_i.hh" -#include "VISU_Result_i.hh" -#include "VISU_Prs3dUtils.hh" -#include "VISUConfig.hh" - -#include "VISU_OptionalDeformationPL.hxx" - - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -//--------------------------------------------------------------- -VISU::OptionalDeformation_i::OptionalDeformation_i(VISU::ColoredPrs3d_i *theColoredPrs3d): - Deformation_i(theColoredPrs3d) -{ - if(MYDEBUG) MESSAGE("OptionalDeformation_i::OptionalDeformation_i()"); -} - -//--------------------------------------------------------------- -VISU::OptionalDeformation_i::~OptionalDeformation_i() -{ - if(MYDEBUG) MESSAGE("OptionalDeformation_i::~OptionalDeformation_i()"); -} - -//--------------------------------------------------------------- -void VISU::OptionalDeformation_i::UseDeformation(CORBA::Boolean theFlag){ - if(MYDEBUG) MESSAGE("OptionalDeformation_i::UseDeformation()"); - - VISU::TSetModified aModified(GetColoredPrs3d()); - - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificDeformedPL(), &VISU_OptionalDeformationPL::UseDeformation, theFlag)); -} - -//--------------------------------------------------------------- -CORBA::Boolean VISU::OptionalDeformation_i::IsDeformed(){ - - if(MYDEBUG) MESSAGE("OptionalDeformation_i::IsDeformed()"); - return GetSpecificDeformedPL()->IsDeformed(); -} - - -void VISU::OptionalDeformation_i::InitDeformedPipeLine(VISU_DeformationPL* theDeformedPipeLine){ - - if(MYDEBUG) MESSAGE("OptionalDeformation_i::InitDeformedPipeLine()"); - myOptionalDeformationPL = dynamic_cast(theDeformedPipeLine); - - TSuperClass::InitDeformedPipeLine(myOptionalDeformationPL); -} - -//--------------------------------------------------------------- -void VISU::OptionalDeformation_i:: -DeformationToStream(std::ostringstream& theStr) -{ - Storable::DataToStream(theStr,"IsDeformed", IsDeformed()); - if(IsDeformed()) - TSuperClass::DeformationToStream(theStr); -} - -//--------------------------------------------------------------- -void -VISU::OptionalDeformation_i::RestoreDeformation(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap) -{ - UseDeformation(Storable::FindValue(theMap,"IsDeformed").toInt()); - if(IsDeformed()) - TSuperClass::RestoreDeformation(theSObject,theMap); -} - - - -void -VISU::OptionalDeformation_i::SameAsDeformation(const Deformation_i *aDeformedPrs){ - - if(const OptionalDeformation_i* aPrs3d = dynamic_cast(aDeformedPrs)){ - OptionalDeformation_i* anOrigin = const_cast(aPrs3d); - UseDeformation(anOrigin->IsDeformed()); - - if(anOrigin->IsDeformed()){ - TSuperClass::SameAsDeformation(aDeformedPrs); - } - } -} diff --git a/src/VISU_I/VISU_OptionalDeformation_i.hh b/src/VISU_I/VISU_OptionalDeformation_i.hh deleted file mode 100755 index ac6a08ff..00000000 --- a/src/VISU_I/VISU_OptionalDeformation_i.hh +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) 2008 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_Deformation_i.hxx -// Author : -// Module : VISU - -#ifndef VISU_OptionalDeformation_i_HeaderFile -#define VISU_OptionalDeformation_i_HeaderFile - -#include "VISU_I.hxx" -#include "VISU_Deformation_i.hh" -#include "VISU_OptionalDeformationPL.hxx" - -namespace VISU { - class VISU_I_EXPORT OptionalDeformation_i : public virtual POA_VISU::OptionalDeformation, - public virtual Deformation_i - { - OptionalDeformation_i(const OptionalDeformation_i&); - public: - typedef VISU::OptionalDeformation TInterface; - typedef Deformation_i TSuperClass; - - OptionalDeformation_i(VISU::ColoredPrs3d_i* theModifiedEngine); - virtual ~OptionalDeformation_i(); - - virtual void UseDeformation(CORBA::Boolean theFlag); - virtual CORBA::Boolean IsDeformed(); - - - virtual - void - DeformationToStream(std::ostringstream& theStr); - - virtual - void - RestoreDeformation(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap); - - virtual - void - SameAsDeformation(const Deformation_i *aDeformedPrs); - - protected: - virtual - void InitDeformedPipeLine(VISU_DeformationPL* theDeformedPipeLine); - - VISU_OptionalDeformationPL* - GetSpecificDeformedPL() const - { - return myOptionalDeformationPL; - } - - private: - VISU_OptionalDeformationPL* myOptionalDeformationPL; - - }; -} -#endif diff --git a/src/VISU_I/VISU_Plot3D_i.cc b/src/VISU_I/VISU_Plot3D_i.cc index 3f8ff658..a5ecb5d8 100644 --- a/src/VISU_I/VISU_Plot3D_i.cc +++ b/src/VISU_I/VISU_Plot3D_i.cc @@ -34,6 +34,7 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; //--------------------------------------------------------------- size_t diff --git a/src/VISU_I/VISU_PointMap3d_i.cc b/src/VISU_I/VISU_PointMap3d_i.cc deleted file mode 100644 index 2885a351..00000000 --- a/src/VISU_I/VISU_PointMap3d_i.cc +++ /dev/null @@ -1,1276 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_PointMap3d_i.cc -// Author : Dmitry Matveitchev -// Module : VISU - -#include "VISU_PointMap3d_i.hh" - -#include "VISU_CutLines_i.hh" -#include "VISU_Result_i.hh" -#include "VISU_ViewManager_i.hh" -#include "VISU_ScalarBarActor.hxx" -#include "SUIT_ResourceMgr.h" - -#include "SALOME_Event.h" -#include "VISU_Prs3dUtils.hh" -#include "SPlot2d_Curve.h" -#include "VISU_PipeLineUtils.hxx" - -#include "VISU_TableReader.hxx" -#include "VISU_ConvertorUtils.hxx" -#include "VISU_DeformedGridPL.hxx" - -#include "SALOME_InteractiveObject.hxx" -#include "VISU_Gen_i.hh" - -#include -#include - -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -//---------------------------------------------------------------- -// PointMap3d Object -//---------------------------------------------------------------- -int VISU::PointMap3d_i::myNbPresent = 0; -const string VISU::PointMap3d_i::myComment = "POINTMAP3D"; -/*! - Generate unique name -*/ -QString VISU::PointMap3d_i::GenerateName() -{ - return VISU::GenerateName( "Table3D - ", ++myNbPresent ); -} -/*! - Gets comment string -*/ -const char* VISU::PointMap3d_i::GetComment() const -{ - return myComment.c_str(); -} -/*! - Constructor -*/ -VISU::PointMap3d_i::PointMap3d_i( SALOMEDS::Study_ptr theStudy, const char* theObjectEntry ) - : Table_i(theStudy, theObjectEntry), - myActorCollection(vtkActorCollection::New()), - myIsActiveState(true) -{ - if(MYDEBUG) MESSAGE("PointMap3d_i::PointMap3d_i - this = "<FindObjectID(theObjectEntry); - myOffset[0] = myOffset[1] = myOffset[2] = 0; - myActorCollection->Delete(); -} -/*! - Destructor -*/ -VISU::PointMap3d_i::~PointMap3d_i() -{ - if(MYDEBUG) MESSAGE("PointMap3d_i::~PointMap3d_i - this = "< TSignal; - const TSignal& mySignal; - - TInvokeSignalEvent(const TSignal& theSignal): - mySignal(theSignal) - {} - - virtual - void - Execute() - { - mySignal(); - } - }; -} - -//---------------------------------------------------------------------------- -void -VISU::PointMap3d_i -::SetTitle( const char* theTitle ) -{ - SetName( theTitle, true ); -} - -//---------------------------------------------------------------------------- -char* -VISU::PointMap3d_i -::GetTitle() -{ - return CORBA::string_dup( GetName().c_str() ); -} - -//---------------------------------------------------------------------------- -SALOMEDS::SObject_var -VISU::PointMap3d_i -::GetSObject() const -{ - return mySObj; -} - -//---------------------------------------------------------------------------- -std::string -VISU::PointMap3d_i -::GetObjectEntry() -{ - CORBA::String_var anEntry = mySObj->GetID(); - return anEntry.in(); -} - -//---------------------------------------------------------------------------- -Handle(SALOME_InteractiveObject) -VISU::PointMap3d_i -::GetIO() -{ - if( myIO.IsNull() ) - myIO = new SALOME_InteractiveObject(GetEntry().c_str(), "VISU", GetName().c_str()); - - return myIO; -} - -//---------------------------------------------------------------------------- -/*! - Creates table3d object -*/ -VISU::Storable* VISU::PointMap3d_i::Create() -{ - // generate name ... - SetName(GetTableTitle().toLatin1().constData(), false); - - if ( GetName() == "" ) { - if ( !mySObj->_is_nil() ) { - CutLines_i* pCutLines = NULL; - CORBA::Object_var anObj = SObjectToObject(mySObj); - if(!CORBA::is_nil(anObj)){ - VISU::CutLines_var aCutLines = VISU::CutLines::_narrow(anObj); - if(!aCutLines->_is_nil()) - pCutLines = dynamic_cast(GetServant(aCutLines).in()); - } - if (!pCutLines) - if (mySObj->GetName()) SetName(mySObj->GetName(), false); - } - } - - if ( GetName() == "" ) - SetName(GenerateName().toLatin1().constData(), false); - - // Create Pipeline - myTablePL = VISU_DeformedGridPL::New(); - myTablePL->SetPolyDataIDMapper(GetTableIDMapper()); - myTablePL->Update(); - - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - - bool isUnits = aResourceMgr->booleanValue( "VISU", "scalar_bar_display_units", true ); - SetUnitsVisible(isUnits); - - SetSourceRange(); - - if( aResourceMgr->booleanValue("VISU", "scalar_bar_logarithmic", false) ) - SetScaling(VISU::LOGARITHMIC); - else - SetScaling(VISU::LINEAR); - - int aNumberOfColors = aResourceMgr->integerValue( "VISU", "scalar_bar_num_colors", 64 ); - SetNbColors(aNumberOfColors); - - int aRangeType = aResourceMgr->integerValue("VISU" , "scalar_range_type", 0); - UseFixedRange(aRangeType == 1); - if(aRangeType == 1){ - float aMin = aResourceMgr->doubleValue("VISU", "scalar_range_min", 0); - float aMax = aResourceMgr->doubleValue("VISU", "scalar_range_max", 0); - SetRange(aMin, aMax); - } - - QString aLabelsFormat = aResourceMgr->stringValue( "VISU", "scalar_bar_label_format", "%-#6.3g" ); - SetLabelsFormat(aLabelsFormat.toLatin1().constData()); - - // Orientation - int anOrientation = aResourceMgr->integerValue("VISU", "scalar_bar_orientation", 0); - if(anOrientation == 1) - SetBarOrientation(VISU::ColoredPrs3dBase::HORIZONTAL); - else - SetBarOrientation(VISU::ColoredPrs3dBase::VERTICAL); - - // Scalar Bar origin - QString propertyName = QString( "scalar_bar_%1_" ).arg( anOrientation == 0 ? "vertical" : "horizontal" ); - - vtkFloatingPointType aXorigin = (myBarOrientation == VISU::ColoredPrs3dBase::VERTICAL) ? 0.01 : 0.2; - aXorigin = aResourceMgr->doubleValue("VISU", propertyName + "x", aXorigin); - myPosition[0] = aXorigin; - - vtkFloatingPointType aYorigin = (myBarOrientation == VISU::ColoredPrs3dBase::VERTICAL) ? 0.1 : 0.012; - aYorigin = aResourceMgr->doubleValue("VISU", propertyName + "y", aYorigin); - myPosition[1] = aYorigin; - - // Scalar Bar size - myWidth = (myBarOrientation == VISU::ColoredPrs3dBase::VERTICAL)? 0.1 : 0.6; - myWidth = aResourceMgr->doubleValue("VISU", propertyName + "width", myWidth); - - myHeight = (myBarOrientation == VISU::ColoredPrs3dBase::VERTICAL)? 0.8:0.12; - myHeight = aResourceMgr->doubleValue("VISU", propertyName + "height", myHeight); - - myTitleWidth = aResourceMgr->doubleValue("VISU", propertyName + "title_width", 0); - myTitleHeight = aResourceMgr->doubleValue("VISU", propertyName + "title_height", 0); - myLabelWidth = aResourceMgr->doubleValue("VISU", propertyName + "label_width", 0); - myLabelHeight = aResourceMgr->doubleValue("VISU", propertyName + "label_height", 0); - myBarWidth = aResourceMgr->doubleValue("VISU", propertyName + "bar_width", 0); - myBarHeight = aResourceMgr->doubleValue("VISU", propertyName + "bar_height", 0); - - // Nb of Labels - myNumberOfLabels = aResourceMgr->integerValue( "VISU", "scalar_bar_num_labels", 5 ); - - // Fonts properties definition - myIsBoldTitle = myIsItalicTitle = myIsShadowTitle = true; - myTitFontType = VTK_ARIAL; - - if(aResourceMgr->hasValue( "VISU", "scalar_bar_title_font" )){ - QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_title_font" ); - if ( f.family() == "Arial" ) - myTitFontType = VTK_ARIAL; - else if ( f.family() == "Courier" ) - myTitFontType = VTK_COURIER; - else if ( f.family() == "Times" ) - myTitFontType = VTK_TIMES; - - myIsBoldTitle = f.bold(); - myIsItalicTitle = f.italic(); - myIsShadowTitle = f.underline(); - } - - QColor aTextColor = aResourceMgr->colorValue( "VISU", "scalar_bar_title_color", QColor( 255, 255, 255 ) ); - - myTitleColor[0] = aTextColor.red() / 255; - myTitleColor[1] = aTextColor.green() / 255; - myTitleColor[2] = aTextColor.blue() / 255; - - myIsBoldLabel = myIsItalicLabel = myIsShadowLabel = true; - myLblFontType = VTK_ARIAL; - - if( aResourceMgr->hasValue( "VISU", "scalar_bar_label_font" )){ - QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_label_font" ); - if ( f.family() == "Arial" ) - myLblFontType = VTK_ARIAL; - else if ( f.family() == "Courier" ) - myLblFontType = VTK_COURIER; - else if ( f.family() == "Times" ) - myLblFontType = VTK_TIMES; - - myIsBoldLabel = f.bold(); - myIsItalicLabel = f.italic(); - myIsShadowLabel = f.underline(); - } - - QColor aLabelColor = aResourceMgr->colorValue( "VISU", "scalar_bar_label_color", QColor( 255, 255, 255 ) ); - - myLabelColor[0] = aLabelColor.red() / 255; - myLabelColor[1] = aLabelColor.green() / 255; - myLabelColor[2] = aLabelColor.blue() / 255; - - // scalar bar default position - bool anIsArrangeBar = aResourceMgr->booleanValue("VISU", "scalar_bars_default_position", 0); - int aPlace = 1; - if (anIsArrangeBar){ - aPlace = aResourceMgr->integerValue("VISU", "scalar_bar_position_num",0); - } - if(myBarOrientation == VISU::ColoredPrs3dBase::HORIZONTAL){ - myPosition[1] += myHeight*(aPlace-1); - } else { - myPosition[0] += myWidth*(aPlace-1); - } - - return Build( false ); -} - -/* - GetIDMapper -*/ - -VISU::PTableIDMapper -VISU::PointMap3d_i -::GetTableIDMapper() -{ - //Initialisate table mapper - SALOMEDS::GenericAttribute_var anAttr; - mySObj->FindAttribute(anAttr, "AttributeTableOfReal"); - SALOMEDS::AttributeTableOfReal_var aTableOfReal = SALOMEDS::AttributeTableOfReal::_narrow(anAttr); - - PTableIDMapper aTableIDMapper( new TTableIDMapper() ); - TTable2D& aTable2D = *aTableIDMapper; - - aTable2D.myTitle = aTableOfReal->GetTitle(); - - SALOMEDS::StringSeq_var aColStrList = aTableOfReal->GetColumnTitles(); - SALOMEDS::StringSeq_var aRowStrList = aTableOfReal->GetRowTitles(); - - for ( int i = 0; i < aRowStrList->length(); i++ ) { - aTable2D.myColumnTitles.push_back( aRowStrList[ i ].in() ); - } - - int aCols = aTableOfReal->GetNbColumns(); - int aRows = aTableOfReal->GetNbRows(); - - for (int i=1; i<=aCols; i++) { - TTable2D::TRow aRow; - aRow.myTitle = aColStrList[ i-1 ].in(); - for (int j=1; j<=aRows; j++) { - double aVal = aTableOfReal->GetValue(j, i); - QString aValStr = QString::number(aVal); - aRow.myValues.push_back( aValStr.toLatin1().constData() ); - } - if( aRow.myValues.size() > 0 ) - aTable2D.myRows.push_back( aRow ); - } - - return aTableIDMapper; -} - -/* - Create Actor -*/ -VISU_PointMap3dActor* VISU::PointMap3d_i::CreateActor() -{ - VISU_PointMap3dActor* anActor = VISU_PointMap3dActor::New(); - anActor->SetPipeLine(myTablePL); - anActor->SetFactory(this); - - SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); - int aDispMode = aResourceMgr->integerValue("VISU", "point_map_represent", 2); - bool toShrink = aResourceMgr->booleanValue("VISU", "scalar_map_shrink", false); - anActor->SetRepresentation(aDispMode); - if (toShrink) anActor->SetShrink(); - - Handle (SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(GetEntry().c_str(), "VISU", GetName().c_str()); - anActor->setIO(anIO); - - myUpdateActorsSignal.connect(boost::bind(&VISU_Actor::UpdateFromFactory,anActor)); - // myRemoveActorsFromRendererSignal.connect(boost::bind(&VISU_Actor::RemoveFromRender,anActor)); - - myActorCollection->AddItem(anActor); - - UpdateActor( anActor ); - - return anActor; -} - -/* - Update Actor -*/ -void VISU::PointMap3d_i::UpdateActor(VISU_ActorBase* theActor) -{ - if(VISU_PointMap3dActor* anActor = dynamic_cast(theActor)){ - Update(); - VISU_ScalarBarActor *aScalarBar = anActor->GetScalarBar(); - aScalarBar->SetLookupTable(GetSpecificPL()->GetBarTable()); - aScalarBar->SetTitle(GetTitle()); - aScalarBar->SetOrientation(GetBarOrientation()); - aScalarBar->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport(); - aScalarBar->GetPositionCoordinate()->SetValue(GetPosX(),GetPosY()); - aScalarBar->SetWidth(GetWidth()); - aScalarBar->SetHeight(GetHeight()); - aScalarBar->SetNumberOfLabels(GetLabels()); - aScalarBar->SetRatios(myTitleWidth, myTitleHeight, - myLabelWidth, myLabelHeight, - myBarWidth, myBarHeight); - aScalarBar->SetNumberOfLabels(GetLabels()); - aScalarBar->SetLabelFormat(GetLabelsFormat()); - - vtkFloatingPointType anRGB[3]; - - vtkTextProperty* aTitleProp = aScalarBar->GetTitleTextProperty(); - aTitleProp->SetFontFamily(GetTitFontType()); - - GetTitleColor(anRGB[0],anRGB[1],anRGB[2]); - aTitleProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - - IsBoldTitle()? aTitleProp->BoldOn() : aTitleProp->BoldOff(); - IsItalicTitle()? aTitleProp->ItalicOn() : aTitleProp->ItalicOff(); - IsShadowTitle()? aTitleProp->ShadowOn() : aTitleProp->ShadowOff(); - - vtkTextProperty* aLabelProp = aScalarBar->GetLabelTextProperty(); - aLabelProp->SetFontFamily(GetLblFontType()); - - GetLabelColor(anRGB[0],anRGB[1],anRGB[2]); - aLabelProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - - IsBoldLabel()? aLabelProp->BoldOn() : aLabelProp->BoldOff(); - IsItalicLabel()? aLabelProp->ItalicOn() : aLabelProp->ItalicOff(); - IsShadowLabel()? aLabelProp->ShadowOn() : aLabelProp->ShadowOff(); - - aScalarBar->Modified(); - } - theActor->SetPosition(myOffset[0],myOffset[1],myOffset[2]); -} - -void -VISU::PointMap3d_i -::UpdateActors() -{ - if(MYDEBUG) MESSAGE("Prs3d_i::UpdateActors - this = "< - (GetSpecificPL(), &VISU_PipeLine::Update)); - - ProcessVoidEvent(new VISU::TInvokeSignalEvent(myUpdateActorsSignal)); -} - -//---------------------------------------------------------------------------- -void -VISU::PointMap3d_i -::Update() -{ - if(GetMTime() < myUpdateTime.GetMTime()) - return; - - if(MYDEBUG) MESSAGE("PointMap3d_i::Update - this = "< - (GetSpecificPL(), &VISU_PipeLine::Update)); - myUpdateTime.Modified(); - }catch(std::exception&){ - throw; - }catch(...){ - throw std::runtime_error("PointMap3d_i::Update >> unexpected exception was caught!!!"); - } -} - -//---------------------------------------------------------------------------- -unsigned long int -VISU::PointMap3d_i -::GetMTime() -{ - unsigned long int aTime = myParamsTime.GetMTime(); - if( GetSpecificPL() ) - aTime = std::max(aTime, GetSpecificPL()->GetMTime()); - return aTime; -} - -/*! - Builds presentation of table -*/ -VISU::Storable* VISU::PointMap3d_i::Build( int theRestoring ) -{ - - // look for reference SObject with table attribute - SALOMEDS::SObject_var SO = mySObj; - - if ( !SO->_is_nil() ) { - CutLines_i* pCutLines = NULL; - CORBA::Object_var anObj = SObjectToObject(SO); - if(!CORBA::is_nil(anObj)){ - VISU::CutLines_var aCutLines = VISU::CutLines::_narrow(anObj); - if(!aCutLines->_is_nil()) - pCutLines = dynamic_cast(GetServant(aCutLines).in()); - } - SALOMEDS::Study_var aStudy = GetStudyDocument(); - SALOMEDS::StudyBuilder_var Builder = GetStudyDocument()->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr; - // look for component - if ( !theRestoring ) { - SALOMEDS::SComponent_var SComponent = VISU::FindOrCreateVisuComponent( GetStudyDocument() ); - // create SObject and set attributes - QString aComment; - if(pCutLines) - aComment.sprintf("myComment=%s;mySourceId=CutLines",GetComment()); - else{ - aComment.sprintf("myComment=%s;mySourceId=TableAttr",GetComment()); - SALOMEDS::SObject_var aFatherSObject = SO->GetFather(); - if(aFatherSObject->FindAttribute(anAttr,"AttributeString")){ - SALOMEDS::AttributeString_var aCommentAttr = - SALOMEDS::AttributeString::_narrow(anAttr); - CORBA::String_var aValue = aCommentAttr->Value(); - Storable::TRestoringMap aMap; - Storable::StringToMap(aValue.in(),aMap); - bool anIsExist; - QString aMethodName = VISU::Storable::FindValue(aMap,"myComment",&anIsExist); - if(anIsExist){ - if(aMethodName == "ImportTables"){ - aComment.sprintf("myComment=%s;mySourceId=TableFile",GetComment()); - } - } - } - } - - string anEntry = CreateAttributes( GetStudyDocument(), - SO->GetID(),//SComponent->GetID(), - "ICON_TREE_TABLE", - GetID(), - GetName(), - "", - aComment.toLatin1().constData(), - pCutLines ); - // create SObject referenced to real table object - mySObj = SALOMEDS::SObject::_duplicate(GetStudyDocument()->FindObjectID( anEntry.c_str() )); - if(pCutLines) { - pCutLines->BuildTableOfReal(mySObj); - } - // mpv (PAL5357): reference attributes are unnecessary now - //SALOMEDS::SObject_var refSO = Builder->NewObject( mySObj ); - //Builder->Addreference( refSO, SO ); - } - - return this; - } - return NULL; -} -/*! - Restores table object from stream -*/ -VISU::Storable* VISU::PointMap3d_i::Restore( const Storable::TRestoringMap& theMap, SALOMEDS::SObject_ptr SO) -{ - if(MYDEBUG) MESSAGE(GetComment()); - SetName(VISU::Storable::FindValue(theMap,"myName").toLatin1().constData(), false); - myTitle = VISU::Storable::FindValue(theMap,"myTitle").toLatin1().constData(); - myOrientation = ( VISU::Table::Orientation )( VISU::Storable::FindValue(theMap,"myOrientation").toInt() ); - mySObj = SALOMEDS::SObject::_duplicate(SO); - - //Create PipeLine - myTablePL = VISU_DeformedGridPL::New(); - myTablePL->SetPolyDataIDMapper(GetTableIDMapper()); - myTablePL->Update(); - - //Restore Other Values - - float aMin = VISU::Storable::FindValue(theMap,"myScalarRange[0]").toDouble(); - float aMax = VISU::Storable::FindValue(theMap,"myScalarRange[1]").toDouble(); - SetRange(aMin, aMax); - - UseFixedRange(VISU::Storable::FindValue(theMap,"myIsFixedRange", "0").toInt()); - - SetNbColors(VISU::Storable::FindValue(theMap,"myNumberOfColors").toInt()); - SetUnitsVisible(VISU::Storable::FindValue(theMap,"myUnitsVisible", "1").toInt()); - SetLabelsFormat(VISU::Storable::FindValue(theMap,"myLabelsFormat", "%-#6.3g").toLatin1().constData()); - SetBarOrientation((VISU::ColoredPrs3dBase::Orientation)VISU::Storable::FindValue(theMap,"myBarOrientation").toInt()); - - SetTitle(VISU::Storable::FindValue(theMap,"myTitle").toLatin1().constData()); - myNumberOfLabels = VISU::Storable::FindValue(theMap,"myNumberOfLabels").toInt(); - myPosition[0] = VISU::Storable::FindValue(theMap,"myPosition[0]").toDouble(); - myPosition[1] = VISU::Storable::FindValue(theMap,"myPosition[1]").toDouble(); - myWidth = VISU::Storable::FindValue(theMap,"myWidth").toDouble(); - myHeight = VISU::Storable::FindValue(theMap,"myHeight").toDouble(); - myTitleWidth = VISU::Storable::FindValue(theMap,"myTitleWidth").toInt(); - myTitleHeight = VISU::Storable::FindValue(theMap,"myTitleHeight").toInt(); - myLabelWidth = VISU::Storable::FindValue(theMap,"myLabelWidth").toInt(); - myLabelHeight = VISU::Storable::FindValue(theMap,"myLabelHeight").toInt(); - myBarWidth = VISU::Storable::FindValue(theMap,"myBarWidth").toInt(); - myBarHeight = VISU::Storable::FindValue(theMap,"myBarHeight").toInt(); - - myTitFontType = VISU::Storable::FindValue(theMap,"myTitFontType").toInt(); - myIsBoldTitle = VISU::Storable::FindValue(theMap,"myIsBoldTitle").toInt(); - myIsItalicTitle = VISU::Storable::FindValue(theMap,"myIsItalicTitle").toInt(); - myIsShadowTitle = VISU::Storable::FindValue(theMap,"myIsShadowTitle").toInt(); - myTitleColor[0] = VISU::Storable::FindValue(theMap,"myTitleColor[0]").toFloat(); - myTitleColor[1] = VISU::Storable::FindValue(theMap,"myTitleColor[1]").toFloat(); - myTitleColor[2] = VISU::Storable::FindValue(theMap,"myTitleColor[2]").toFloat(); - - myLblFontType = VISU::Storable::FindValue(theMap,"myLblFontType").toInt(); - myIsBoldLabel = VISU::Storable::FindValue(theMap,"myIsBoldLabel").toInt(); - myIsItalicLabel = VISU::Storable::FindValue(theMap,"myIsItalicLabel").toInt(); - myIsShadowLabel = VISU::Storable::FindValue(theMap,"myIsShadowLabel").toInt(); - myLabelColor[0] = VISU::Storable::FindValue(theMap,"myLabelColor[0]").toFloat(); - myLabelColor[1] = VISU::Storable::FindValue(theMap,"myLabelColor[1]").toFloat(); - myLabelColor[2] = VISU::Storable::FindValue(theMap,"myLabelColor[2]").toFloat(); - - myParamsTime.Modified(); - return Build( true ); -} -/*! - Flushes table data into stream -*/ -void VISU::PointMap3d_i::ToStream( std::ostringstream& theStr ) -{ - Storable::DataToStream( theStr, "myName", GetName().c_str() ); - Storable::DataToStream( theStr, "myTitle", myTitle.c_str() ); - Storable::DataToStream( theStr, "myOrientation", myOrientation ); - - Storable::DataToStream( theStr, "myScalarRange[0]", GetMin() ); - Storable::DataToStream( theStr, "myScalarRange[1]", GetMax() ); - Storable::DataToStream( theStr, "myIsFixedRange", IsRangeFixed() ); - - Storable::DataToStream( theStr, "myNumberOfColors", int(GetNbColors()) ); - Storable::DataToStream( theStr, "myBarOrientation", myBarOrientation ); - - Storable::DataToStream( theStr, "myTitle", myTitle.c_str() ); - Storable::DataToStream( theStr, "myUnitsVisible", myIsUnits ); - Storable::DataToStream( theStr, "myNumberOfLabels", myNumberOfLabels ); - Storable::DataToStream( theStr, "myLabelsFormat", myLabelsFormat.c_str() ); - Storable::DataToStream( theStr, "myPosition[0]", myPosition[0] ); - Storable::DataToStream( theStr, "myPosition[1]", myPosition[1] ); - Storable::DataToStream( theStr, "myWidth", myWidth ); - Storable::DataToStream( theStr, "myHeight", myHeight ); - Storable::DataToStream( theStr, "myTitleWidth", myTitleWidth ); - Storable::DataToStream( theStr, "myTitleHeight", myTitleHeight ); - Storable::DataToStream( theStr, "myLabelWidth", myLabelWidth ); - Storable::DataToStream( theStr, "myLabelHeight", myLabelHeight ); - Storable::DataToStream( theStr, "myBarWidth", myBarWidth ); - Storable::DataToStream( theStr, "myBarHeight", myBarHeight ); - - Storable::DataToStream( theStr, "myTitFontType", myTitFontType ); - Storable::DataToStream( theStr, "myIsBoldTitle", myIsBoldTitle ); - Storable::DataToStream( theStr, "myIsItalicTitle", myIsItalicTitle ); - Storable::DataToStream( theStr, "myIsShadowTitle", myIsShadowTitle ); - Storable::DataToStream( theStr, "myTitleColor[0]", myTitleColor[0] ); - Storable::DataToStream( theStr, "myTitleColor[1]", myTitleColor[1] ); - Storable::DataToStream( theStr, "myTitleColor[2]", myTitleColor[2] ); - - Storable::DataToStream( theStr, "myLblFontType", myLblFontType ); - Storable::DataToStream( theStr, "myIsBoldLabel", myIsBoldLabel ); - Storable::DataToStream( theStr, "myIsItalicLabel", myIsItalicLabel ); - Storable::DataToStream( theStr, "myIsShadowLabel", myIsShadowLabel ); - Storable::DataToStream( theStr, "myLabelColor[0]", myLabelColor[0] ); - Storable::DataToStream( theStr, "myLabelColor[1]", myLabelColor[1] ); - Storable::DataToStream( theStr, "myLabelColor[2]", myLabelColor[2] ); -} -/*! - Called from engine to restore table from the file -*/ -VISU::Storable* VISU::PointMap3d_i::StorableEngine(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap, - const std::string& thePrefix, - CORBA::Boolean theIsMultiFile) -{ - SALOMEDS::Study_var aStudy = theSObject->GetStudy(); - VISU::PointMap3d_i* pResent = new VISU::PointMap3d_i( aStudy, "" ); - return pResent->Restore( theMap, theSObject); -} -/*! - Gets title for the original table object -*/ -QString VISU::PointMap3d_i::GetTableTitle() -{ - SALOMEDS::SObject_var SO = mySObj; - SALOMEDS::StudyBuilder_var Builder = GetStudyDocument()->NewBuilder(); - SALOMEDS::GenericAttribute_var anAttr; - SALOMEDS::AttributeTableOfInteger_var anInt; - SALOMEDS::AttributeTableOfReal_var aReal; - if ( !SO->_is_nil() ) { - if ( Builder->FindAttribute( SO, anAttr, "AttributeTableOfInteger" ) ) { - anInt = SALOMEDS::AttributeTableOfInteger::_narrow( anAttr ); - CORBA::String_var aString = anInt->GetTitle(); - return aString.in(); - } - else if ( Builder->FindAttribute( SO, anAttr, "AttributeTableOfReal" ) ) { - aReal = SALOMEDS::AttributeTableOfReal::_narrow( anAttr ); - CORBA::String_var aString = aReal->GetTitle(); - return aString.in(); - } - } - return ""; -} - -//--------------------------------------------------------------- -void VISU::PointMap3d_i::RemoveFromStudy() -{ - struct TRemoveFromStudy: public SALOME_Event - { - VISU::PointMap3d_i* myRemovable; - TRemoveFromStudy(VISU::PointMap3d_i* theRemovable): - myRemovable(theRemovable) - {} - - virtual - void - Execute() - { - VISU::RemoveFromStudy(myRemovable->GetSObject(),false); - } - }; - - // Remove the table with all curves - ProcessVoidEvent(new TRemoveFromStudy(this)); -} - -//---------------------------------------------------------------- -void VISU::PointMap3d_i::SetOffset(CORBA::Float theDx, CORBA::Float theDy, CORBA::Float theDz) -{ - myOffset[0] = theDx; - myOffset[1] = theDy; - myOffset[2] = theDz; - myParamsTime.Modified(); -} - -void VISU::PointMap3d_i::GetOffset(CORBA::Float& theDx, CORBA::Float& theDy, CORBA::Float& theDz) -{ - theDx = myOffset[0]; - theDy = myOffset[1]; - theDz = myOffset[2]; -} - -CORBA::Float VISU::PointMap3d_i::GetMemorySize() -{ - CORBA::Float aSize = GetSpecificPL()->GetMemorySize(); - - int anEnd = myActorCollection->GetNumberOfItems(); - for(int anId = 0; anId < anEnd; anId++) - if(vtkObject* anObject = myActorCollection->GetItemAsObject(anId)) - if(VISU_Actor* anActor = dynamic_cast(anObject)){ - aSize += anActor->GetMemorySize(); - //cout<<"Prs3d_i::GetMemorySize - "<GetValue(1, 1); - - for (int i=1; i<=aTableOfReal->GetNbColumns(); i++) - for (int j=1; j<=aTableOfReal->GetNbRows(); j++) { - double aVal = aTableOfReal->GetValue(j, i); - if (aVal < aMin) - aMin = aVal; - } - - return aMin; -} - -CORBA::Double VISU::PointMap3d_i::GetMaxTableValue() -{ - SALOMEDS::GenericAttribute_var anAttr; - mySObj->FindAttribute(anAttr, "AttributeTableOfReal"); - SALOMEDS::AttributeTableOfReal_var aTableOfReal = SALOMEDS::AttributeTableOfReal::_narrow(anAttr); - double aMax = aTableOfReal->GetValue(1, 1); - - for (int i=1; i<=aTableOfReal->GetNbColumns(); i++) - for (int j=1; j<=aTableOfReal->GetNbRows(); j++) { - double aVal = aTableOfReal->GetValue(j, i); - if (aVal > aMax) - aMax = aVal; - } - - return aMax; -} - -CORBA::Double VISU::PointMap3d_i::GetMax() -{ - return myTablePL->GetScalarRange()[1]; -} - -void VISU::PointMap3d_i::SetRange(CORBA::Double theMin, CORBA::Double theMax) -{ - vtkFloatingPointType aScalarRange[2] = {theMin, theMax}; - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedGridPL::SetScalarRange, aScalarRange)); - - UseFixedRange(true); -} - -CORBA::Double VISU::PointMap3d_i::GetSourceMin() -{ - vtkFloatingPointType aRange[2]; - GetSpecificPL()->GetSourceRange(aRange); - return aRange[0]; -} - -CORBA::Double VISU::PointMap3d_i::GetSourceMax() -{ - vtkFloatingPointType aRange[2]; - GetSpecificPL()->GetSourceRange(aRange); - return aRange[1]; -} - -void VISU::PointMap3d_i::SetSourceRange() -{ - GetSpecificPL()->SetSourceRange(); - ProcessVoidEvent(new TVoidMemFunEvent - (GetSpecificPL(), &VISU_DeformedGridPL::SetSourceRange)); - - UseFixedRange(false); -} - -CORBA::Boolean VISU::PointMap3d_i::IsRangeFixed() -{ - return myIsFixedRange; -} - -void VISU::PointMap3d_i::UseFixedRange(bool theRange) -{ - if(myIsFixedRange == theRange) - return; - - myIsFixedRange = theRange; -} - -void VISU::PointMap3d_i::SetPosition(CORBA::Double theX, CORBA::Double theY) -{ - bool anIsSameValue = VISU::CheckIsSameValue(myPosition[0], theX); - anIsSameValue &= VISU::CheckIsSameValue(myPosition[1], theY); - if(anIsSameValue) - return; - - myPosition[0] = theX; - myPosition[1] = theY; -} - -CORBA::Double VISU::PointMap3d_i::GetPosX() -{ - return myPosition[0]; -} - -CORBA::Double VISU::PointMap3d_i::GetPosY() -{ - return myPosition[1]; -} - -void VISU::PointMap3d_i::SetSize(CORBA::Double theWidth, CORBA::Double theHeight) -{ - bool anIsSameValue = VISU::CheckIsSameValue(myWidth, theWidth); - anIsSameValue &= VISU::CheckIsSameValue(myHeight, theHeight); - if(anIsSameValue) - return; - - myWidth = theWidth; - myHeight = theHeight; -} - -CORBA::Double VISU::PointMap3d_i::GetHeight() -{ - return myHeight; -} - -CORBA::Double VISU::PointMap3d_i::GetWidth() -{ - return myWidth; -} - -void VISU::PointMap3d_i::SetNbColors(CORBA::Long theNbColors) -{ - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedGridPL::SetNbColors, theNbColors)); -} - -CORBA::Long VISU::PointMap3d_i::GetNbColors() -{ - return GetSpecificPL()->GetNbColors(); -} - -void VISU::PointMap3d_i::SetLabels(CORBA::Long theNbLabels) -{ - if(myNumberOfLabels == theNbLabels) - return; - - myNumberOfLabels = theNbLabels; -} - -CORBA::Long VISU::PointMap3d_i::GetLabels() -{ - return myNumberOfLabels; -} - -void VISU::PointMap3d_i::SetBarOrientation(VISU::ColoredPrs3dBase::Orientation theBarOrientation) -{ - if(myBarOrientation == theBarOrientation) - return; - - myBarOrientation = theBarOrientation; -} - -VISU::ColoredPrs3dBase::Orientation VISU::PointMap3d_i::GetBarOrientation() -{ - return myBarOrientation; -} - -//------------------- ScaledPrs3d Methods ----------------------- - -void VISU::PointMap3d_i::SetScaling(VISU::Scaling theScaling) -{ - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedGridPL::SetScaling, theScaling)); -} - -VISU::Scaling VISU::PointMap3d_i::GetScaling() -{ - return VISU::Scaling(GetSpecificPL()->GetScaling()); -} - -//------------------- Check Table on Positive Values ------------ -bool VISU::PointMap3d_i::IsPositiveTable() -{ - SALOMEDS::GenericAttribute_var anAttr; - mySObj->FindAttribute(anAttr, "AttributeTableOfReal"); - SALOMEDS::AttributeTableOfReal_var aTableOfReal = SALOMEDS::AttributeTableOfReal::_narrow(anAttr); - - for (int i=1; i<=aTableOfReal->GetNbColumns(); i++) - for (int j=1; j<=aTableOfReal->GetNbRows(); j++) { - double aVal = aTableOfReal->GetValue(j, i); - if (aVal < 0) - return false; - } - - return true; -} - -//------------------- Plot3dBase Methods ------------------------ - -void VISU::PointMap3d_i::SetScaleFactor (CORBA::Double theScaleFactor) -{ - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedGridPL::SetScaleFactor, theScaleFactor)); -} - -CORBA::Double VISU::PointMap3d_i::GetScaleFactor () -{ - return myTablePL->GetScaleFactor(); -} - -void VISU::PointMap3d_i::SetContourPrs (CORBA::Boolean theIsContourPrs ) -{ - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedGridPL::SetContourPrs, theIsContourPrs)); -} - -CORBA::Boolean VISU::PointMap3d_i::GetIsContourPrs() -{ - return myTablePL->GetIsContourPrs(); -} - -void VISU::PointMap3d_i::SetNbOfContours (CORBA::Long theNb) -{ - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedGridPL::SetNumberOfContours, theNb)); -} - -CORBA::Long VISU::PointMap3d_i::GetNbOfContours () -{ - return myTablePL->GetNumberOfContours(); -} - -//-------------------- Actor Factory Methods -------------------- - -bool VISU::PointMap3d_i::GetActiveState () -{ - return myIsActiveState; -} - -void VISU::PointMap3d_i::SetActiveState ( bool theState ) -{ - myIsActiveState = theState; -} - -void VISU::PointMap3d_i::RemoveActor (VISU_ActorBase* theActor) -{ - myActorCollection->RemoveItem(theActor); -} - -void VISU::PointMap3d_i::RemoveActors () -{ - ProcessVoidEvent(new TInvokeSignalEvent(myRemoveActorsFromRendererSignal)); - myActorCollection->RemoveAllItems(); -} - - -//-----------------------Text Properties & Label Properties------------------ -bool VISU::PointMap3d_i::IsBoldTitle() -{ - return myIsBoldTitle; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetBoldTitle(bool theIsBoldTitle) -{ - if(myIsBoldTitle == theIsBoldTitle) - return; - - myIsBoldTitle = theIsBoldTitle; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -bool VISU::PointMap3d_i::IsItalicTitle() -{ - return myIsItalicTitle; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetItalicTitle(bool theIsItalicTitle) -{ - if(myIsItalicTitle == theIsItalicTitle) - return; - - myIsItalicTitle = theIsItalicTitle; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -bool VISU::PointMap3d_i::IsShadowTitle() -{ - return myIsShadowTitle; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetShadowTitle(bool theIsShadowTitle) -{ - if(myIsShadowTitle == theIsShadowTitle) - return; - - myIsShadowTitle = theIsShadowTitle; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -int VISU::PointMap3d_i::GetTitFontType() -{ - return myTitFontType; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetTitFontType(int theTitFontType) -{ - if(myTitFontType == theTitFontType) - return; - - myTitFontType = theTitFontType; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::GetTitleColor(vtkFloatingPointType& theR, - vtkFloatingPointType& theG, - vtkFloatingPointType& theB) -{ - theR = myTitleColor[0]; - theG = myTitleColor[1]; - theB = myTitleColor[2]; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetTitleColor(vtkFloatingPointType theR, - vtkFloatingPointType theG, - vtkFloatingPointType theB) -{ - bool anIsSameValue = VISU::CheckIsSameValue(myTitleColor[0], theR); - anIsSameValue &= VISU::CheckIsSameValue(myTitleColor[1], theG); - anIsSameValue &= VISU::CheckIsSameValue(myTitleColor[2], theB); - if(anIsSameValue) - return; - - myTitleColor[0] = theR; - myTitleColor[1] = theG; - myTitleColor[2] = theB; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -bool VISU::PointMap3d_i::IsBoldLabel() -{ - return myIsBoldLabel; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetBoldLabel(bool theIsBoldLabel) -{ - if(myIsBoldLabel == theIsBoldLabel) - return; - - myIsBoldLabel = theIsBoldLabel; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -bool VISU::PointMap3d_i::IsItalicLabel() -{ - return myIsItalicLabel; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetItalicLabel(bool theIsItalicLabel) -{ - if(myIsItalicLabel == theIsItalicLabel) - return; - - myIsItalicLabel = theIsItalicLabel; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -bool VISU::PointMap3d_i::IsShadowLabel() -{ - return myIsShadowLabel; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetShadowLabel(bool theIsShadowLabel) -{ - if(myIsShadowLabel == theIsShadowLabel) - return; - - myIsShadowLabel = theIsShadowLabel; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -int VISU::PointMap3d_i::GetLblFontType() -{ - return myLblFontType; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetLblFontType(int theLblFontType) -{ - if(myLblFontType == theLblFontType) - return; - - myLblFontType = theLblFontType; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::GetLabelColor(vtkFloatingPointType& theR, - vtkFloatingPointType& theG, - vtkFloatingPointType& theB) -{ - theR = myLabelColor[0]; - theG = myLabelColor[1]; - theB = myLabelColor[2]; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetLabelColor(vtkFloatingPointType theR, - vtkFloatingPointType theG, - vtkFloatingPointType theB) -{ - bool anIsSameValue = VISU::CheckIsSameValue(myLabelColor[0], theR); - anIsSameValue &= VISU::CheckIsSameValue(myLabelColor[1], theG); - anIsSameValue &= VISU::CheckIsSameValue(myLabelColor[2], theB); - if(anIsSameValue) - return; - - myLabelColor[0] = theR; - myLabelColor[1] = theG; - myLabelColor[2] = theB; - myParamsTime.Modified(); -} - -//---------------------------------------------------------------------------- -CORBA::Long VISU::PointMap3d_i::GetTitleWidth() -{ - return myTitleWidth; -} - -//---------------------------------------------------------------------------- -CORBA::Long VISU::PointMap3d_i::GetTitleHeight() -{ - return myTitleHeight; -} - -//---------------------------------------------------------------------------- -CORBA::Long VISU::PointMap3d_i::GetLabelWidth() -{ - return myLabelWidth; -} - -//---------------------------------------------------------------------------- -CORBA::Long VISU::PointMap3d_i::GetLabelHeight() -{ - return myLabelHeight; -} - -//---------------------------------------------------------------------------- -CORBA::Long VISU::PointMap3d_i::GetBarWidth() -{ - return myBarWidth; -} - -//---------------------------------------------------------------------------- -CORBA::Long VISU::PointMap3d_i::GetBarHeight() -{ - return myBarHeight; -} - -//---------------------------------------------------------------------------- -void -VISU::PointMap3d_i::SetLabelsFormat(const char* theFormat) -{ - if( myLabelsFormat != theFormat ){ - myLabelsFormat = theFormat; - myParamsTime.Modified(); - } -} - -//---------------------------------------------------------------------------- -char* VISU::PointMap3d_i::GetLabelsFormat() -{ - return CORBA::string_dup(myLabelsFormat.c_str()); -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetUnitsVisible(CORBA::Boolean isVisible) -{ - if( myIsUnits != isVisible ){ - myIsUnits = isVisible; - myParamsTime.Modified(); - } -} - -//---------------------------------------------------------------------------- -CORBA::Boolean VISU::PointMap3d_i::IsUnitsVisible() -{ - return myIsUnits; -} - -//---------------------------------------------------------------------------- -void VISU::PointMap3d_i::SetRatios(CORBA::Long theTitleWidth, CORBA::Long theTitleHeight, - CORBA::Long theLabelWidth, CORBA::Long theLabelHeight, - CORBA::Long theBarWidth, CORBA::Long theBarHeight) -{ - bool anIsSameValue = VISU::CheckIsSameValue(myTitleWidth, theTitleWidth); - anIsSameValue &= VISU::CheckIsSameValue(myTitleHeight, theTitleHeight); - anIsSameValue &= VISU::CheckIsSameValue(myLabelWidth, theLabelWidth); - anIsSameValue &= VISU::CheckIsSameValue(myLabelHeight, theLabelHeight); - anIsSameValue &= VISU::CheckIsSameValue(myBarWidth, theBarWidth); - anIsSameValue &= VISU::CheckIsSameValue(myBarHeight, theBarHeight); - if(anIsSameValue) - return; - - myTitleWidth = theTitleWidth; - myTitleHeight = theTitleHeight; - myLabelWidth = theLabelWidth; - myLabelHeight = theLabelHeight; - myBarWidth = theBarWidth; - myBarHeight = theBarHeight; - myParamsTime.Modified(); -} diff --git a/src/VISU_I/VISU_PointMap3d_i.hh b/src/VISU_I/VISU_PointMap3d_i.hh deleted file mode 100644 index 593721ec..00000000 --- a/src/VISU_I/VISU_PointMap3d_i.hh +++ /dev/null @@ -1,272 +0,0 @@ -// VISU OBJECT : interactive object for VISU entities implementation -// -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// File : VISU_PointMap3d_i.hh -// Author : -// Module : VISU - -#ifndef VISU_PointMap3d_i_HeaderFile -#define VISU_PointMap3d_i_HeaderFile - -#include "VISU_PrsObject_i.hh" -#include "SALOME_GenericObj_i.hh" - -#include "VISU_TableReader.hxx" -#include "VISU_PointMap3dActor.h" -#include "VISU_Table_i.hh" -#include "VISU_ActorFactory.h" -#include "VISU_DeformedGridPL.hxx" - -#include -#include - -namespace VISU -{ - - struct TActorFactory; - - //============================================================================== - class VISU_I_EXPORT PointMap3d_i : public virtual POA_VISU::PointMap3d, - public virtual SALOME::GenericObj_i, - public virtual TActorFactory, - public virtual Table_i - { - static int myNbPresent; - PointMap3d_i( const PointMap3d_i& ); - public: - PointMap3d_i( SALOMEDS::Study_ptr theStudy, const char* theObjectEntry); - - virtual ~PointMap3d_i(); - virtual VISU::VISUType GetType() { return VISU::TPOINTMAP3D;}; - - virtual void SetTitle( const char* theTitle ); - virtual char* GetTitle(); - - virtual void RemoveFromStudy(); - virtual void UpdateActor(VISU_ActorBase* thePointMap3dActor); - virtual void UpdateActors(); - - virtual void Update(); - - virtual Handle(SALOME_InteractiveObject) GetIO(); - - //----------- override Prs3d methods ----------------------------- - - //! Move the 3D presentation according to the given offset parameters - virtual void SetOffset(CORBA::Float theDx, CORBA::Float theDy, CORBA::Float theDz); - - //! Gets offset parameters for the 3D presentation - virtual void GetOffset(CORBA::Float& theDx, CORBA::Float& theDy, CORBA::Float& theDz); - - //! Gets memory size actually used by the presentation (Mb). - virtual CORBA::Float GetMemorySize(); - - //----------- override ColoredPrs3dBase methods ------------------ - - virtual CORBA::Double GetMin(); - virtual CORBA::Double GetMax(); - virtual CORBA::Double GetMinTableValue(); - virtual CORBA::Double GetMaxTableValue(); - virtual void SetRange(CORBA::Double theMin, CORBA::Double theMax); - - virtual CORBA::Double GetSourceMin(); - virtual CORBA::Double GetSourceMax(); - virtual void SetSourceRange(); - - virtual CORBA::Boolean IsRangeFixed(); - - virtual void SetPosition(CORBA::Double X, CORBA::Double Y); - virtual CORBA::Double GetPosX(); - virtual CORBA::Double GetPosY(); - - virtual void SetSize(CORBA::Double theWidth, CORBA::Double theHeight); - - virtual void SetRatios(CORBA::Long theTitleWidth, CORBA::Long theTitleHeight, - CORBA::Long theLabelWidth, CORBA::Long theLabelHeight, - CORBA::Long theBarWidth, CORBA::Long theBarHeight); - - virtual CORBA::Double GetWidth(); - virtual CORBA::Double GetHeight(); - - virtual void SetNbColors(CORBA::Long theNbColors); - virtual CORBA::Long GetNbColors(); - - virtual void SetLabels(CORBA::Long theNbLabels); - virtual CORBA::Long GetLabels(); - - virtual void SetLabelsFormat(const char* theFormat); - virtual char* GetLabelsFormat(); - - virtual void SetBarOrientation(VISU::ColoredPrs3dBase::Orientation theOrientation); - virtual VISU::ColoredPrs3dBase::Orientation GetBarOrientation(); - - void UseFixedRange(bool theUseFixedRange); - - // ScaledMap Methods - - virtual VISU::Scaling GetScaling(); - virtual void SetScaling(VISU::Scaling theScaling); - - bool IsPositiveTable(); - - // Plot3dBase methods - - void SetScaleFactor (CORBA::Double theScaleFactor); - CORBA::Double GetScaleFactor(); - - void SetContourPrs (CORBA::Boolean theIsContourPrs ); - CORBA::Boolean GetIsContourPrs(); - - void SetNbOfContours (CORBA::Long); - CORBA::Long GetNbOfContours(); - - VISU_DeformedGridPL* GetSpecificPL() const { return myTablePL; } - - // TActorFactory Methods - - //! Gets know whether the factory instance can be used for actor management or not - virtual bool GetActiveState(); - - virtual void SetActiveState(bool theState); - - //! Return modified time of the factory - virtual unsigned long int GetMTime(); - - //! To unregister the actor - virtual void RemoveActor(VISU_ActorBase* theActor); - virtual void RemoveActors(); - - //------ Text Properties & Label Properties ------------------------ - - virtual bool IsBoldTitle(); - virtual void SetBoldTitle(bool isBold); - virtual bool IsItalicTitle(); - virtual void SetItalicTitle(bool isItalic); - virtual bool IsShadowTitle(); - virtual void SetShadowTitle(bool isShadow); - virtual int GetTitFontType(); - virtual void SetTitFontType(int theType); - virtual void GetTitleColor(vtkFloatingPointType& theR, - vtkFloatingPointType& theG, - vtkFloatingPointType& theB); - virtual void SetTitleColor(vtkFloatingPointType theR, - vtkFloatingPointType theG, - vtkFloatingPointType theB); - - virtual bool IsBoldLabel(); - virtual void SetBoldLabel(bool isBold); - virtual bool IsItalicLabel(); - virtual void SetItalicLabel(bool isItalic); - virtual bool IsShadowLabel(); - virtual void SetShadowLabel(bool isShadow); - virtual int GetLblFontType(); - virtual void SetLblFontType(int theType); - virtual void GetLabelColor(vtkFloatingPointType& theR, - vtkFloatingPointType& theG, - vtkFloatingPointType& theB); - virtual void SetLabelColor(vtkFloatingPointType theR, - vtkFloatingPointType theG, - vtkFloatingPointType theB); - - //------------------------------------------------------------------- - virtual CORBA::Long GetTitleWidth(); - virtual CORBA::Long GetTitleHeight(); - virtual CORBA::Long GetLabelWidth(); - virtual CORBA::Long GetLabelHeight(); - virtual CORBA::Long GetBarWidth(); - virtual CORBA::Long GetBarHeight(); - - virtual void SetUnitsVisible(CORBA::Boolean isVisible); - virtual CORBA::Boolean IsUnitsVisible(); - - //------------------------------------------------------------------- - - protected: - Storable* Build(int theRestoring); - - VISU::Table::Orientation myOrientation; - VISU::ColoredPrs3dBase::Orientation myBarOrientation; - std::string myTitle; - std::string myScalarBarTitle; - bool myIsUnits; - SALOMEDS::SObject_var mySObj; - int myNumberOfLabels; - std::string myLabelsFormat; - vtkFloatingPointType myPosition[2], - myWidth, myHeight, - myTitleWidth, myTitleHeight, - myLabelWidth, myLabelHeight, - myBarWidth, myBarHeight; - bool myIsFixedRange; - CORBA::Float myOffset[3]; - bool myIsActiveState; - vtkTimeStamp myParamsTime; - vtkTimeStamp myUpdateTime; - - Handle(SALOME_InteractiveObject) myIO; - - - //Font management - bool myIsBoldTitle; - bool myIsItalicTitle; - bool myIsShadowTitle; - int myTitFontType; - vtkFloatingPointType myTitleColor[3]; - - bool myIsBoldLabel; - bool myIsItalicLabel; - bool myIsShadowLabel; - int myLblFontType; - vtkFloatingPointType myLabelColor[3]; - - boost::signal0 myUpdateActorsSignal; - boost::signal0 myRemoveActorsFromRendererSignal; - vtkSmartPointer myActorCollection; - - public: - // virtual Storable* Create( const VISU::PTableIDMapper& theTableIDMapper ); - virtual Storable* Create(); - VISU_PointMap3dActor* CreateActor(); - VISU::PTableIDMapper GetTableIDMapper(); - - SALOMEDS::SObject_var GetSObject() const; - VISU_DeformedGridPL* myTablePL; - - virtual Storable* Restore( const Storable::TRestoringMap& theMap, - SALOMEDS::SObject_ptr SO); - - static Storable* StorableEngine(SALOMEDS::SObject_ptr theSObject, - const Storable::TRestoringMap& theMap, - const std::string& thePrefix, - CORBA::Boolean theIsMultiFile); - - virtual void ToStream( std::ostringstream& theStr ); - static const std::string myComment; - virtual const char* GetComment() const; - virtual QString GenerateName(); - virtual QString GetTableTitle(); - - virtual std::string GetObjectEntry(); - }; -} - -#endif diff --git a/src/VISU_I/VISU_Prs3dUtils.cc b/src/VISU_I/VISU_Prs3dUtils.cc index 652e781e..fd5bebd1 100644 --- a/src/VISU_I/VISU_Prs3dUtils.cc +++ b/src/VISU_I/VISU_Prs3dUtils.cc @@ -70,6 +70,59 @@ namespace VISU ProcessVoidEvent(new TEvent(this)); } + //---------------------------------------------------------------------------- + + std::string ToFormat( const int thePrec ) + { + // "%-#6.3g" + char str[ 255 ]; + sprintf( str, "%%-#.%dg", thePrec ); + return str; + } //---------------------------------------------------------------------------- + + int ToPrecision( const char* theFormat ) + { + int N = strlen( theFormat ); + int k = -1; + char str[ 255 ]; + bool isOk = false; + for ( int i = 0; i < N; i++ ) + { + if ( theFormat[ i ] == '.' ) + k = 0; + else if ( theFormat[ i ] == 'g' ) + { + str[ k ] = 0; + isOk = true; + break; + } + else if ( k >= 0 ) + str[ k++ ] = theFormat[ i ]; + } + + int res = 0; + if ( isOk ) + res = atoi( str ); + + return res; + } }; + + + + + + + + + + + + + + + + + diff --git a/src/VISU_I/VISU_Prs3dUtils.hh b/src/VISU_I/VISU_Prs3dUtils.hh index 2f4bf8b9..5c300342 100644 --- a/src/VISU_I/VISU_Prs3dUtils.hh +++ b/src/VISU_I/VISU_Prs3dUtils.hh @@ -31,7 +31,6 @@ #include - namespace VISU { //---------------------------------------------------------------------------- @@ -44,6 +43,9 @@ namespace VISU ~TSetModified(); }; + Standard_EXPORT std::string ToFormat( const int thePrec ); + Standard_EXPORT int ToPrecision( const char* theFormat ); + //---------------------------------------------------------------------------- } diff --git a/src/VISU_I/VISU_Prs3d_i.cc b/src/VISU_I/VISU_Prs3d_i.cc index 55e2bd1d..d0cf322e 100644 --- a/src/VISU_I/VISU_Prs3d_i.cc +++ b/src/VISU_I/VISU_Prs3d_i.cc @@ -593,6 +593,12 @@ GetClippingPlane(vtkIdType theID) const return GetPipeLine()->GetClippingPlane(theID); } +//---------------------------------------------------------------------------- +void VISU::Prs3d_i::RemoveClippingPlane(vtkIdType theID) +{ + GetPipeLine()->RemoveClippingPlane(theID); +} + //---------------------------------------------------------------------------- void VISU::Prs3d_i diff --git a/src/VISU_I/VISU_Prs3d_i.hh b/src/VISU_I/VISU_Prs3d_i.hh index 461df40f..60fd16af 100644 --- a/src/VISU_I/VISU_Prs3d_i.hh +++ b/src/VISU_I/VISU_Prs3d_i.hh @@ -223,6 +223,8 @@ namespace VISU vtkPlane* GetClippingPlane(vtkIdType theID) const; + void RemoveClippingPlane(vtkIdType theID); + void SetPlaneParam(vtkFloatingPointType theDir[3], vtkFloatingPointType theDist, diff --git a/src/VISU_I/VISU_ResultUtils.cc b/src/VISU_I/VISU_ResultUtils.cc index 2ba4a286..d80281d4 100644 --- a/src/VISU_I/VISU_ResultUtils.cc +++ b/src/VISU_I/VISU_ResultUtils.cc @@ -48,6 +48,8 @@ static int MYTIMEDEBUG = 0; static int MYTIMEDEBUG = 0; #endif +using namespace std; + namespace VISU { //---------------------------------------------------------------------------- diff --git a/src/VISU_I/VISU_Result_i.cc b/src/VISU_I/VISU_Result_i.cc index 2d8e89da..5d47138b 100644 --- a/src/VISU_I/VISU_Result_i.cc +++ b/src/VISU_I/VISU_Result_i.cc @@ -69,6 +69,7 @@ static int MYDEBUG = 1; static int MYDEBUG = 0; #endif +using namespace std; namespace VISU { @@ -799,10 +800,9 @@ VISU::Result_i if(MYDEBUG) MESSAGE("Result_i::Restore - aFileName = " << myFileInfo.filePath().toLatin1().data() << "; " << myFileInfo.isFile()); - const char* aPathLatin = myFileInfo.filePath().toLatin1().data(); - if (HDFascii::isASCII(aPathLatin)) { - MESSAGE("ConvertFromASCIIToHDF(" << aPathLatin << ")"); - char* aResultPath = HDFascii::ConvertFromASCIIToHDF(aPathLatin); + if (HDFascii::isASCII(myFileInfo.filePath().toLatin1().data())) { + MESSAGE("ConvertFromASCIIToHDF(" << myFileInfo.filePath().toLatin1().data() << ")"); + char* aResultPath = HDFascii::ConvertFromASCIIToHDF(myFileInfo.filePath().toLatin1().data()); MESSAGE("ConvertFromASCIIToHDF() DONE : " << aResultPath); char* aHDFFileName = new char[strlen(aResultPath) + 19]; sprintf(aHDFFileName, "%shdf_from_ascii.hdf", aResultPath); diff --git a/src/VISU_I/VISU_DeformedShapeAndScalarMap_i.cc b/src/VISU_I/VISU_ScalarMapOnDeformedShape_i.cc similarity index 78% rename from src/VISU_I/VISU_DeformedShapeAndScalarMap_i.cc rename to src/VISU_I/VISU_ScalarMapOnDeformedShape_i.cc index 9667e0c3..ac6a8322 100644 --- a/src/VISU_I/VISU_DeformedShapeAndScalarMap_i.cc +++ b/src/VISU_I/VISU_ScalarMapOnDeformedShape_i.cc @@ -20,20 +20,20 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // -// File : VISU_DeformedShapeAndScalarMap_i.cc +// File : VISU_ScalarMapOnDeformedShape_i.cc // Author : Eugeny Nikolaev // Module : VISU -#include "VISU_DeformedShapeAndScalarMap_i.hh" +#include "VISU_ScalarMapOnDeformedShape_i.hh" #include "VISU_Prs3dUtils.hh" #include "VISU_Result_i.hh" #include "VISU_ScalarMapAct.h" -#include "VISU_DeformedShapeAndScalarMapPL.hxx" +#include "VISU_ScalarMapOnDeformedShapePL.hxx" #include "VISU_Convertor.hxx" #include "SUIT_ResourceMgr.h" -#include "SALOME_Event.h" +#include "SALOME_Event.hxx" #include #include @@ -50,7 +50,7 @@ static int INCMEMORY = 4+12; //--------------------------------------------------------------- size_t -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::IsPossible(Result_i* theResult, const std::string& theMeshName, VISU::Entity theEntity, @@ -87,7 +87,7 @@ VISU::DeformedShapeAndScalarMap_i aSize *= INCMEMORY; aResult = VISU_PipeLine::CheckAvailableMemory(aSize); if(MYDEBUG) - MESSAGE("DeformedShapeAndScalarMap_i::IsPossible - CheckAvailableMemory = "<(theOrigin)){ - DeformedShapeAndScalarMap_i* anOrigin = const_cast(aPrs3d); + if(const ScalarMapOnDeformedShape_i* aPrs3d = dynamic_cast(theOrigin)){ + ScalarMapOnDeformedShape_i* anOrigin = const_cast(aPrs3d); CORBA::String_var aFieldName = anOrigin->GetScalarFieldName(); SetScalarField(anOrigin->GetScalarEntity(), @@ -228,44 +228,44 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- void -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::SetScale(CORBA::Double theScale) { VISU::TSetModified aModified(this); - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedShapeAndScalarMapPL::SetScale, theScale)); + ProcessVoidEvent(new TVoidMemFun1ArgEvent + (GetSpecificPL(), &VISU_ScalarMapOnDeformedShapePL::SetScale, theScale)); } //--------------------------------------------------------------- CORBA::Double -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::GetScale() { - return myDeformedShapeAndScalarMapPL->GetScale(); + return myScalarMapOnDeformedShapePL->GetScale(); } //--------------------------------------------------------------- void -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::CreatePipeLine(VISU_PipeLine* thePipeLine) { if(!thePipeLine){ - myDeformedShapeAndScalarMapPL = VISU_DeformedShapeAndScalarMapPL::New(); + myScalarMapOnDeformedShapePL = VISU_ScalarMapOnDeformedShapePL::New(); }else - myDeformedShapeAndScalarMapPL = dynamic_cast(thePipeLine); + myScalarMapOnDeformedShapePL = dynamic_cast(thePipeLine); - myDeformedShapeAndScalarMapPL->GetMapper()->SetScalarVisibility(1); + myScalarMapOnDeformedShapePL->GetMapper()->SetScalarVisibility(1); - TSuperClass::CreatePipeLine(myDeformedShapeAndScalarMapPL); + TSuperClass::CreatePipeLine(myScalarMapOnDeformedShapePL); } //--------------------------------------------------------------- bool -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::CheckIsPossible() { return IsPossible(GetCResult(),GetCMeshName(),GetEntity(),GetCFieldName(),GetTimeStampNumber(),true); @@ -274,7 +274,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- VISU_Actor* -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::CreateActor() { VISU_Actor* anActor = TSuperClass::CreateActor(true); @@ -291,7 +291,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- void -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::UpdateActor(VISU_Actor* theActor) { if(VISU_ScalarMapAct* anActor = dynamic_cast(theActor)){ @@ -304,7 +304,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- void -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::SetField(VISU::PField theField) { TSuperClass::SetField(theField); @@ -316,7 +316,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- void -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::SetScalarField(VISU::Entity theEntity, const char* theFieldName, CORBA::Long theTimeStampNumber) @@ -351,9 +351,9 @@ VISU::DeformedShapeAndScalarMap_i theTimeStampNumber); vtkUnstructuredGrid* anOutput = anIDMapper->GetUnstructuredGridOutput(); - if(myDeformedShapeAndScalarMapPL && anOutput) - ProcessVoidEvent(new TVoidMemFun1ArgEvent - (GetSpecificPL(), &VISU_DeformedShapeAndScalarMapPL::SetScalars, anOutput)); + if(myScalarMapOnDeformedShapePL && anOutput) + ProcessVoidEvent(new TVoidMemFun1ArgEvent + (GetSpecificPL(), &VISU_ScalarMapOnDeformedShapePL::SetScalars, anOutput)); myScalarEntity = theEntity; myScalarFieldName = theFieldName; @@ -370,7 +370,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- VISU::Entity -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::GetScalarEntity() { return myScalarEntity; @@ -379,7 +379,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- char* -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::GetScalarFieldName() { return CORBA::string_dup(myScalarFieldName.c_str()); @@ -388,7 +388,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- CORBA::Long -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::GetScalarTimeStampNumber() { return myScalarTimeStampNumber; @@ -397,7 +397,7 @@ VISU::DeformedShapeAndScalarMap_i //--------------------------------------------------------------- VISU::PField -VISU::DeformedShapeAndScalarMap_i +VISU::ScalarMapOnDeformedShape_i ::GetScalarField() { return myScalarField; diff --git a/src/VISU_I/VISU_DeformedShapeAndScalarMap_i.hh b/src/VISU_I/VISU_ScalarMapOnDeformedShape_i.hh similarity index 82% rename from src/VISU_I/VISU_DeformedShapeAndScalarMap_i.hh rename to src/VISU_I/VISU_ScalarMapOnDeformedShape_i.hh index 35827d1d..83f2e64d 100644 --- a/src/VISU_I/VISU_DeformedShapeAndScalarMap_i.hh +++ b/src/VISU_I/VISU_ScalarMapOnDeformedShape_i.hh @@ -20,43 +20,43 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // -// File: VISU_DeformedShapeAndScalarMap_i.hh +// File: VISU_ScalarMapOnDeformedShape_i.hh // Author: Eugeny Nikolaev // Module : VISU -#ifndef VISU_DeformedShapeAndScalarMap_i_HeaderFile -#define VISU_DeformedShapeAndScalarMap_i_HeaderFile +#ifndef VISU_ScalarMapOnDeformedShape_i_HeaderFile +#define VISU_ScalarMapOnDeformedShape_i_HeaderFile #include "VISU_ScalarMap_i.hh" -class VISU_DeformedShapeAndScalarMapPL; +class VISU_ScalarMapOnDeformedShapePL; namespace VISU { //---------------------------------------------------------------------------- //! Class of Scalar Map on Deformed Shape presentation. - class VISU_I_EXPORT DeformedShapeAndScalarMap_i : public virtual POA_VISU::DeformedShapeAndScalarMap, - public virtual ScalarMap_i + class VISU_I_EXPORT ScalarMapOnDeformedShape_i : public virtual POA_VISU::ScalarMapOnDeformedShape, + public virtual ScalarMap_i { static int myNbPresent; - DeformedShapeAndScalarMap_i(const DeformedShapeAndScalarMap_i&); + ScalarMapOnDeformedShape_i(const ScalarMapOnDeformedShape_i&); public: //---------------------------------------------------------------------------- typedef ScalarMap_i TSuperClass; - typedef VISU::DeformedShapeAndScalarMap TInterface; + typedef VISU::ScalarMapOnDeformedShape TInterface; explicit - DeformedShapeAndScalarMap_i(EPublishInStudyMode thePublishInStudyModep); + ScalarMapOnDeformedShape_i(EPublishInStudyMode thePublishInStudyModep); virtual - ~DeformedShapeAndScalarMap_i(); + ~ScalarMapOnDeformedShape_i(); virtual VISU::VISUType GetType() { - return VISU::TDEFORMEDSHAPEANDSCALARMAP; + return VISU::TSCALARMAPONDEFORMEDSHAPE; } virtual @@ -71,10 +71,10 @@ namespace VISU void SameAs(const Prs3d_i* theOrigin); - VISU_DeformedShapeAndScalarMapPL* + VISU_ScalarMapOnDeformedShapePL* GetSpecificPL() { - return myDeformedShapeAndScalarMapPL; + return myScalarMapOnDeformedShapePL; } protected: @@ -168,7 +168,7 @@ namespace VISU GetScalarField(); private: - VISU_DeformedShapeAndScalarMapPL *myDeformedShapeAndScalarMapPL; + VISU_ScalarMapOnDeformedShapePL *myScalarMapOnDeformedShapePL; PField myScalarField; VISU::Entity myScalarEntity; diff --git a/src/VISU_I/VISU_ScalarMap_i.cc b/src/VISU_I/VISU_ScalarMap_i.cc index f0aba10a..85e40ce6 100644 --- a/src/VISU_I/VISU_ScalarMap_i.cc +++ b/src/VISU_I/VISU_ScalarMap_i.cc @@ -53,6 +53,7 @@ static int MYDEBUG = 0; static int INCMEMORY = 4; +using namespace std; //---------------------------------------------------------------------------- size_t @@ -171,7 +172,8 @@ VISU::ScalarMap_i //---------------------------------------------------------------------------- VISU::ScalarMap_i:: ScalarMap_i(EPublishInStudyMode thePublishInStudyMode) : - ColoredPrs3d_i(thePublishInStudyMode) + ColoredPrs3d_i(thePublishInStudyMode), + myShowBar(true) {} //---------------------------------------------------------------------------- @@ -191,7 +193,7 @@ VISU::ScalarMap_i ScalarMap_i* anOrigin = const_cast(aPrs3d); SetScaling(anOrigin->GetScaling()); - + SetBarVisible(anOrigin->IsBarVisible()); Update(); } } @@ -217,6 +219,7 @@ VISU::ScalarMap_i else SetScaling(VISU::LINEAR); + myShowBar = true; return this; } @@ -239,6 +242,9 @@ VISU::ScalarMap_i SetScaling(VISU::Scaling(VISU::Storable::FindValue(theMap,"myScaling").toInt())); + QString aVal = VISU::Storable::FindValue(theMap,"myShowBar", "1"); + SetBarVisible((aVal.toInt() == 1)? true : false); + // Check if the icon needs to be updated, update if necessary SALOMEDS::Study_var aStudy = theSObject->GetStudy(); SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); @@ -261,6 +267,7 @@ VISU::ScalarMap_i TSuperClass::ToStream(theStr); Storable::DataToStream( theStr, "myScaling", GetScaling() ); + Storable::DataToStream( theStr, "myShowBar", (IsBarVisible()? 1:0) ); } @@ -362,6 +369,14 @@ VISU::ScalarMap_i return IsPossible(GetCResult(),GetCMeshName(),GetEntity(),GetCFieldName(),GetTimeStampNumber(),true); } +void VISU::ScalarMap_i::SetBarVisible(CORBA::Boolean theVisible) +{ + if (myShowBar == theVisible) + return; + VISU::TSetModified aModified(this); + myShowBar = theVisible; + myParamsTime.Modified(); +} //---------------------------------------------------------------------------- void @@ -378,14 +393,6 @@ VISU::ScalarMap_i TSuperClass::CreatePipeLine(myScalarMapPL); } -//---------------------------------------------------------------------------- -void -VISU::ScalarMap_i -::SetMapScale(double theMapScale) -{ - GetSpecificPL()->SetMapScale(theMapScale); -} - //---------------------------------------------------------------------------- VISU_Actor* VISU::ScalarMap_i @@ -394,7 +401,7 @@ VISU::ScalarMap_i VISU_ScalarMapAct* anActor = VISU_ScalarMapAct::New(); try{ TSuperClass::CreateActor(anActor); - anActor->SetBarVisibility(true); + anActor->SetBarVisibility(myShowBar); SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr(); int aDispMode = aResourceMgr->integerValue("VISU", "scalar_map_represent", 2); bool toShrink = aResourceMgr->booleanValue("VISU", "scalar_map_shrink", false); @@ -402,6 +409,14 @@ VISU::ScalarMap_i anActor->SetRepresentation(aDispMode); if (toShrink && !toSupressShrinking) anActor->SetShrink(); anActor->SetShading(toUseShading); + + anActor->SetFeatureEdgesAngle( aResourceMgr->doubleValue("VISU", "feature_edges_angle", 0.0) ); + anActor->SetFeatureEdgesFlags( aResourceMgr->booleanValue("VISU", "show_feature_edges", false), + aResourceMgr->booleanValue("VISU", "show_boundary_edges", false), + aResourceMgr->booleanValue("VISU", "show_manifold_edges", false), + aResourceMgr->booleanValue("VISU", "show_non_manifold_edges", false) ); + anActor->SetFeatureEdgesColoring( aResourceMgr->booleanValue("VISU", "feature_edges_coloring", false) ); + UpdateActor(anActor); }catch(...){ anActor->Delete(); @@ -424,16 +439,28 @@ VISU::ScalarMap_i ::UpdateActor(VISU_ActorBase* theActor) { if(VISU_ScalarMapAct* anActor = dynamic_cast(theActor)){ + VISU_LookupTable * aLookupTable = GetSpecificPL()->GetBarTable(); + + if ( IsScalarFilterUsed() ) { + aLookupTable->ForceBuild(); + static unsigned char MARK_COLOR[] = { 255, 255, 255 }; + aLookupTable->MarkValueByColor( GetScalarFilterMin(), MARK_COLOR ); + aLookupTable->MarkValueByColor( GetScalarFilterMax(), MARK_COLOR ); + } + VISU_ScalarBarActor *aScalarBar = anActor->GetScalarBar(); - aScalarBar->SetLookupTable(GetSpecificPL()->GetBarTable()); + aScalarBar->SetLookupTable( aLookupTable ); + + aScalarBar->SetDistribution( GetSpecificPL()->GetDistribution() ); + aScalarBar->SetDistributionVisibility( GetIsDistributionVisible() ); + aScalarBar->SetTitle(GetScalarBarTitle().c_str()); aScalarBar->SetOrientation(GetBarOrientation()); aScalarBar->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport(); aScalarBar->GetPositionCoordinate()->SetValue(GetPosX(),GetPosY()); aScalarBar->SetWidth(GetWidth()); aScalarBar->SetHeight(GetHeight()); - aScalarBar->SetRatios(GetTitleWidth(), GetTitleHeight(), - GetLabelWidth(), GetLabelHeight(), + aScalarBar->SetRatios(GetTitleSize(), GetLabelSize(), GetBarWidth(), GetBarHeight()); aScalarBar->SetNumberOfLabels(GetLabels()); aScalarBar->SetLabelFormat(GetLabelsFormat()); @@ -460,7 +487,25 @@ VISU::ScalarMap_i IsItalicLabel()? aLabelProp->ItalicOn() : aLabelProp->ItalicOff(); IsShadowLabel()? aLabelProp->ShadowOn() : aLabelProp->ShadowOff(); + anActor->SetBarVisibility(myShowBar); + aScalarBar->Modified(); + + // Update values labels + + vtkTextProperty* aProp = anActor->GetsValLabelsProps(); + if ( aProp ) + { + aProp->SetFontFamily( GetValLblFontType() ); + aProp->SetFontSize( GetValLblFontSize() ); + aProp->SetBold( IsBoldValLbl() ); + aProp->SetItalic( IsItalicValLbl() ); + aProp->SetShadow( IsShadowValLbl() ); + + vtkFloatingPointType anRGB[ 3 ]; + GetValLblFontColor( anRGB[ 0 ], anRGB[ 1 ], anRGB[ 2 ] ); + aProp->SetColor( anRGB[ 0 ], anRGB[ 1 ], anRGB[ 2 ] ); + } } TSuperClass::UpdateActor(theActor); } diff --git a/src/VISU_I/VISU_ScalarMap_i.hh b/src/VISU_I/VISU_ScalarMap_i.hh index 44a7ba96..4a74f9df 100644 --- a/src/VISU_I/VISU_ScalarMap_i.hh +++ b/src/VISU_I/VISU_ScalarMap_i.hh @@ -98,6 +98,10 @@ namespace VISU { return myScalarMapPL; } + + virtual CORBA::Boolean IsBarVisible() { return myShowBar; } + + virtual void SetBarVisible(CORBA::Boolean theVisible); protected: //! Redefines VISU_ColoredPrs3d_i::DoSetInput @@ -163,10 +167,6 @@ namespace VISU Restore(SALOMEDS::SObject_ptr theSObject, const Storable::TRestoringMap& theMap); - virtual - void - SetMapScale(double theMapScale = 1.0); - virtual void SameAs(const Prs3d_i* theOrigin); @@ -193,6 +193,7 @@ namespace VISU private: VISU_ScalarMapPL* myScalarMapPL; + bool myShowBar; }; } diff --git a/src/VISU_I/VISU_StreamLines_i.cc b/src/VISU_I/VISU_StreamLines_i.cc index 01ebfa16..6b0d58ac 100644 --- a/src/VISU_I/VISU_StreamLines_i.cc +++ b/src/VISU_I/VISU_StreamLines_i.cc @@ -45,6 +45,7 @@ static int MYDEBUG = 0; static int MYDEBUG = 0; #endif +using namespace std; //--------------------------------------------------------------- size_t diff --git a/src/VISU_I/VISU_Table_i.cc b/src/VISU_I/VISU_Table_i.cc index 0910d8dc..4cbc5cc0 100644 --- a/src/VISU_I/VISU_Table_i.cc +++ b/src/VISU_I/VISU_Table_i.cc @@ -38,6 +38,8 @@ #include "utilities.h" +using namespace std; + #ifdef _DEBUG_ static int MYDEBUG = 0; #else @@ -514,6 +516,14 @@ VISU::Storable* VISU::Curve_i::Build(int theRestoring ) true ); // create SObject referenced to real table object mySObj = SALOMEDS::SObject::_duplicate(GetStudyDocument()->FindObjectID(anEntry.c_str())); + + // Set icon + SALOMEDS::StudyBuilder_var aStudyBuilder = GetStudyDocument()->NewBuilder(); + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributePixMap_var aPixmap; + anAttr = aStudyBuilder->FindOrCreateAttribute( mySObj, "AttributePixMap" ); + aPixmap = SALOMEDS::AttributePixMap::_narrow( anAttr ); + aPixmap ->SetPixMap("ICON_TREE_CURVE"); } return this; } @@ -1029,6 +1039,14 @@ VISU::Storable* VISU::Container_i::Build( int theRestoring ) aComment.toLatin1().data(), true ); mySObj = SALOMEDS::SObject::_duplicate(GetStudyDocument()->FindObjectID(anEntry.c_str())); + + // Set icon + SALOMEDS::StudyBuilder_var aStudyBuilder = GetStudyDocument()->NewBuilder(); + SALOMEDS::GenericAttribute_var anAttr; + SALOMEDS::AttributePixMap_var aPixmap; + anAttr = aStudyBuilder->FindOrCreateAttribute( mySObj, "AttributePixMap" ); + aPixmap = SALOMEDS::AttributePixMap::_narrow( anAttr ); + aPixmap ->SetPixMap("ICON_TREE_CONTAINER"); } return this; } diff --git a/src/VISU_I/VISU_TimeAnimation.cxx b/src/VISU_I/VISU_TimeAnimation.cxx index 0fc2b12e..13be9942 100644 --- a/src/VISU_I/VISU_TimeAnimation.cxx +++ b/src/VISU_I/VISU_TimeAnimation.cxx @@ -81,6 +81,7 @@ #include #endif +using namespace std; //------------------------------------------------------------------------ namespace VISU diff --git a/src/VISU_I/VISU_Vectors_i.cc b/src/VISU_I/VISU_Vectors_i.cc index 1ef9bab6..9dab489f 100644 --- a/src/VISU_I/VISU_Vectors_i.cc +++ b/src/VISU_I/VISU_Vectors_i.cc @@ -46,6 +46,7 @@ static int MYDEBUG = 0; static int INCMEMORY = 4+12; +using namespace std; //--------------------------------------------------------------- size_t diff --git a/src/VISU_I/VISU_View_i.hh b/src/VISU_I/VISU_View_i.hh index c388740b..8ebf690f 100644 --- a/src/VISU_I/VISU_View_i.hh +++ b/src/VISU_I/VISU_View_i.hh @@ -28,6 +28,7 @@ #define VISU_View_i_HeaderFile #include "VISUConfig.hh" +#include "SALOME_GenericObj_i.hh" class QWidget; @@ -46,7 +47,8 @@ namespace VISU class Curve_i; class VISU_I_EXPORT View_i : public virtual POA_VISU::View, - public virtual Storable + public virtual SALOME::GenericObj_i, + public virtual Storable { public: View_i (SalomeApp_Application *theApplication, @@ -125,7 +127,7 @@ namespace VISU //=========================================================================== class VISU_I_EXPORT XYPlot_i : public virtual POA_VISU::XYPlot, - public virtual View_i + public virtual View_i { public: typedef VISU::XYPlot TInterface; @@ -216,7 +218,7 @@ namespace VISU //=========================================================================== class VISU_I_EXPORT View3D_i : public virtual POA_VISU::View3D, - public virtual View_i + public virtual View_i { public: typedef VISU::View3D TInterface; diff --git a/src/VISU_SWIG/Makefile.am b/src/VISU_SWIG/Makefile.am index d237a8dd..a37018e6 100644 --- a/src/VISU_SWIG/Makefile.am +++ b/src/VISU_SWIG/Makefile.am @@ -26,18 +26,22 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am -lib_LTLIBRARIES= libVISU_Swigcmodule.la -dist_libVISU_Swigcmodule_la_SOURCES= VISU_Gen_s.cc -nodist_libVISU_Swigcmodule_la_SOURCES= libVISU_Swig_wrap.cxx +SWIG_FLAGS = @SWIG_FLAGS@ -I$(srcdir) +SWIG_DEF = libVISU_Swig.i -SWIG_DEF = libVISU_Swig.i -SWIG_FLAGS= @SWIG_FLAGS@ -I$(srcdir) +salomeinclude_HEADERS = $(SWIG_DEF) VISU_Gen_s.hh + +# Libraries targets +lib_LTLIBRARIES = _libVISU_Swig.la +dist__libVISU_Swig_la_SOURCES = $(SWIG_DEF) VISU_Gen_s.hh VISU_Gen_s.cc +nodist__libVISU_Swig_la_SOURCES = libVISU_Swig_wrap.cxx libVISU_Swig.py: libVISU_Swig_wrap.cxx + libVISU_Swig_wrap.cxx: $(SWIG_DEF) $(SWIG) $(SWIG_FLAGS) -o $@ $< -libVISU_Swigcmodule_la_CPPFLAGS= \ +_libVISU_Swig_la_CPPFLAGS = \ -ftemplate-depth-32 \ $(PYTHON_INCLUDES) \ $(HDF5_INCLUDES) \ @@ -49,20 +53,20 @@ libVISU_Swigcmodule_la_CPPFLAGS= \ $(BOOST_CPPFLAGS) \ -I$(srcdir)/../CONVERTOR -I$(srcdir)/../PIPELINE -libVISU_Swigcmodule_la_LDFLAGS= $(PYTHON_LIBS) ../CONVERTOR/libVisuConvertor.la ../PIPELINE/libVisuPipeLine.la +_libVISU_Swig_la_LDFLAGS = -module +_libVISU_Swig_la_LIBADD = $(PYTHON_LIBS) ../CONVERTOR/libVisuConvertor.la ../PIPELINE/libVisuPipeLine.la -dist_salomescript_DATA= libVISU_Swig.py batchmode_visu.py batchmode_visu_table.py batchmode_visu_view3d.py \ +dist_salomescript_DATA = batchmode_visu.py batchmode_visu_table.py batchmode_visu_view3d.py \ visu_med.py visu_view3d.py visu.py visu_gui.py visu_prs_example.py \ visu_table.py visu_big_table.py visu_view.py visu_delete.py \ visu_swig_test.py visu_split_views.py \ visu_succcessive_animation.py visu_apply_properties.py visu_apply_properties_successive.py \ + batch_test_events.py batchmode_visu_view.py test_events.py visu_cache.py visu_pointmap3d.py \ VISU_Example_01.py VISU_Example_02.py VISU_Example_03.py VISU_Example_04.py \ VISU_Example_05.py VISU_Example_06.py VISU_Example_07.py -dist_sharedpkgpython_DATA= VISU_shared_modules.py -CLEANFILES= libVISU_Swig.py libVISU_Swig_wrap.cxx +nodist_salomescript_DATA = libVISU_Swig.py -install-exec-hook: $(libdir)/_libVISU_Swig.so +dist_sharedpkgpython_DATA = VISU_shared_modules.py -$(libdir)/_libVISU_Swig.so: - ( cd $(libdir); ln -sf libVISU_Swigcmodule.so _libVISU_Swig.so; ) +CLEANFILES = libVISU_Swig.py libVISU_Swig_wrap.cxx diff --git a/src/VISU_SWIG/visu_pointmap3d.py b/src/VISU_SWIG/visu_pointmap3d.py deleted file mode 100755 index f16d6ee0..00000000 --- a/src/VISU_SWIG/visu_pointmap3d.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -import VISU -from visu_gui import * - -aTableFile = os.getenv('DATA_DIR') + '/Tables/table_test.xls' - -aTableSObject = myVisu.ImportTables(aTableFile) - -aTable = None -if aTableSObject: - anIsFound, aSObject = aTableSObject.FindSubObject(1) - if anIsFound: - aTable = aSObject.GetObject() - -aViewManager = myVisu.GetViewManager(); -aView = aViewManager.Create3DView() -if aView is None : print "Creating View Error" -print aTable - -##########Get Values################ -aScaleFactor = aTable.GetScaleFactor(); -anIsContourPrs = aTable.GetIsContourPrs(); -aNbOfContours = aTable.GetNbOfContours(); -aScaling = aTable.GetScaling(); -aMin = aTable.GetMin(); -aMax = aTable.GetMax(); -aSourceMin = aTable.GetSourceMin(); -aSourceMax = aTable.GetSourceMax(); -aPosX = aTable.GetPosX(); -aPosY = aTable.GetPosY(); -aHeight = aTable.GetHeight(); -aWidth = aTable.GetWidth(); -aNbColors = aTable.GetNbColors(); -aLabels = aTable.GetLabels(); -aBarOrientation = aTable.GetBarOrientation(); - - -print "Get Values:" -print "aScaleFactor = ", aScaleFactor -print "anIsContourPrs = ", anIsContourPrs -print "aNbOfContours = ", aNbOfContours -print "aScaling = ", aScaling -print "===== SCALAR BAR =======" -print "aMin = ", aMin -print "aMax = ", aMax -print "aSourceMin = ", aSourceMin -print "aSourceMax = ", aSourceMax -print "aPosX = ", aPosX -print "aPosY = ", aPosY -print "aHeight = ", aHeight -print "aWidth = ", aWidth -print "aNbColors = ", aNbColors -print "aLabels = ", aLabels -print "aBarOrientation = ", aBarOrientation - -aView.DisplayOnly( aTable ) -aView.FitAll() \ No newline at end of file diff --git a/src/VVTK/Makefile.am b/src/VVTK/Makefile.am index c09b3d46..8afb0e31 100755 --- a/src/VVTK/Makefile.am +++ b/src/VVTK/Makefile.am @@ -29,46 +29,17 @@ lib_LTLIBRARIES= libVVTK.la # header files salomeinclude_HEADERS= \ VVTK.h \ - VVTK_ViewManager.h \ - VVTK_ViewModel.h \ - VVTK_InteractorStyle.h \ - VVTK_PickingDlg.h \ - VVTK_SegmentationCursorDlg.h \ VVTK_PrimitiveBox.h \ - VVTK_SizeBox.h \ - VVTK_ViewWindow.h \ - VVTK_MainWindow.h \ - VVTK_ImageWriter.h \ - VVTK_ImageWriterMgr.h \ - VVTK_RecorderDlg.h \ - VVTK_Recorder.h + VVTK_SizeBox.h dist_libVVTK_la_SOURCES= \ - VVTK_ViewManager.cxx \ - VVTK_ViewModel.cxx \ - VVTK_InteractorStyle.cxx \ - VVTK_PickingDlg.cxx \ - VVTK_SegmentationCursorDlg.cxx \ VVTK_PrimitiveBox.cxx \ - VVTK_SizeBox.cxx \ - VVTK_ViewWindow.cxx \ - VVTK_Renderer.cxx \ - VVTK_MainWindow.cxx \ - VVTK_ImageWriter.cxx \ - VVTK_ImageWriterMgr.cxx \ - VVTK_RecorderDlg.cxx \ - VVTK_Recorder.cxx + VVTK_SizeBox.cxx MOC_FILES= \ - VVTK_ViewWindow_moc.cxx \ - VVTK_ViewModel_moc.cxx \ - VVTK_ViewManager_moc.cxx \ - VVTK_PickingDlg_moc.cxx \ - VVTK_SegmentationCursorDlg_moc.cxx \ - VVTK_RecorderDlg_moc.cxx \ VVTK_PrimitiveBox_moc.cxx \ - VVTK_SizeBox_moc.cxx \ - VVTK_MainWindow_moc.cxx + VVTK_SizeBox_moc.cxx + nodist_libVVTK_la_SOURCES=$(MOC_FILES) libVVTK_la_CPPFLAGS= \ diff --git a/src/VVTK/VVTK_MainWindow.cxx b/src/VVTK/VVTK_MainWindow.cxx index 456b2715..158542a5 100644 --- a/src/VVTK/VVTK_MainWindow.cxx +++ b/src/VVTK/VVTK_MainWindow.cxx @@ -58,25 +58,19 @@ #include //---------------------------------------------------------------------------- -VVTK_MainWindow -::VVTK_MainWindow(QWidget* theParent, - const char* theName, - SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow): +VVTK_MainWindow::VVTK_MainWindow(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow): SVTK_MainWindow(theParent,theName,theResourceMgr,theViewWindow), - myInteractorStyle(VVTK_InteractorStyle::New()), myControllerIncrement(VVTK_ControllerIncrement::New()), myControllerOnKeyDown(VVTK_ControllerOnKeyDown::New()) { myToolMgr = new QtxActionToolMgr( this ); - myInteractorStyle->SetControllerIncrement(myControllerIncrement.GetPointer()); - myControllerIncrement->Delete(); - myInteractorStyle->SetControllerOnKeyDown(myControllerOnKeyDown.GetPointer()); + myControllerIncrement->Delete(); myControllerOnKeyDown->Delete(); - myInteractorStyle->Delete(); - // Recording myRecordingToolBar = new QToolBar(tr("LBL_TOOLBAR_RECORD_LABEL"), this); addToolBar(Qt::LeftToolBarArea, myRecordingToolBar ); @@ -132,9 +126,7 @@ QtxActionToolMgr* VVTK_MainWindow::toolMgr() const } //---------------------------------------------------------------------------- -void -VVTK_MainWindow -::Initialize(SVTK_RenderWindowInteractor* theInteractor) +void VVTK_MainWindow::Initialize(SVTK_RenderWindowInteractor* theInteractor) { vtkInteractorStyle* aStyle = theInteractor->GetInteractorStyle(); if(SVTK_InteractorStyle *anInteractorStyle = dynamic_cast(aStyle)){ @@ -189,17 +181,6 @@ void VVTK_MainWindow::onDumpView() QApplication::restoreOverrideCursor(); } -//---------------------------------------------------------------------------- -void -VVTK_MainWindow -::OnInteractorStyleSwitch(bool theIsGaussStyleOn) -{ - if ( theIsGaussStyleOn ) - this->PushInteractorStyle(myInteractorStyle.GetPointer()); - else - this->PopInteractorStyle(); -} - //---------------------------------------------------------------------------- void VVTK_MainWindow::OnStartRecording() { @@ -256,9 +237,7 @@ void VVTK_MainWindow::OnStopRecording() } //---------------------------------------------------------------------------- -void -VVTK_MainWindow -::action( const int accelAction ) +void VVTK_MainWindow::action( const int accelAction ) { if ( accelAction == SUIT_Accel::ZoomFit ) onFitAll(); @@ -269,13 +248,11 @@ VVTK_MainWindow } //---------------------------------------------------------------------------- -VVTK_MainWindow1 -::VVTK_MainWindow1(QSplitter* theParent, - const char* theName, - SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow): +VVTK_MainWindow1::VVTK_MainWindow1(QSplitter* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow): VVTK_MainWindow(theParent,theName,theResourceMgr,theViewWindow), - myStyleSwitchAction(NULL), mySplitter(theParent), myPickingDlg(NULL) { @@ -285,23 +262,6 @@ VVTK_MainWindow1 QPixmap aPixmap; QtxAction* anAction; - aPixmap = theResourceMgr->loadPixmap( "VISU", tr( "ICON_VVTK_INTERACTOR_STYLE_SWITCH" ) ); - anAction = new QtxAction(tr("MNU_VVTK_INTERACTOR_STYLE_SWITCH"), - aPixmap, - tr( "MNU_VVTK_INTERACTOR_STYLE_SWITCH" ), - 0, - this, - //"VVTK/SVTK StyleSwitch", - true); - anAction->setCheckable(true); - anAction->setStatusTip(tr("DSC_VVTK_INTERACTOR_STYLE_SWITCH")); - - myPtsToolBar->addAction( anAction ); - myStyleSwitchAction = anAction; - - if( theResourceMgr->integerValue( "VISU", "mouse_behaviour", true ) == 1 ) - myStyleSwitchAction->toggle(); - aPixmap = theResourceMgr->loadPixmap("VISU",tr("ICON_VVTK_SELECTION_MODE_SWITCH")); myPickingAction = new QtxAction(tr("MNU_VVTK_SELECTION_MODE_SWITCH"), aPixmap, @@ -356,18 +316,12 @@ VVTK_MainWindow1 myPtsToolBar->addAction( aSegmentationAction ); } -void -VVTK_MainWindow1 -::Initialize(SVTK_RenderWindowInteractor* theInteractor, - VVTK_Renderer1* theRenderer) +void VVTK_MainWindow1::Initialize(SVTK_RenderWindowInteractor* theInteractor, + VVTK_Renderer1* theRenderer) { myRenderer = theRenderer; VVTK_MainWindow::Initialize(theInteractor); - if( myStyleSwitchAction->isChecked() ) - PushInteractorStyle(myInteractorStyle.GetPointer()); - connect(myStyleSwitchAction, SIGNAL(toggled(bool)), this, SLOT(OnInteractorStyleSwitch(bool))); - mySegmentationCursorDlg->SetWidgetCtrl( theRenderer->GetWidgetCtrl() ); mySegmentationCursorDlg->SetInteractor( theInteractor ); @@ -375,31 +329,25 @@ VVTK_MainWindow1 myPickingDlg->SetInteractor( theInteractor ); } -VVTK_MainWindow1 -::~VVTK_MainWindow1() +VVTK_MainWindow1::~VVTK_MainWindow1() {} //---------------------------------------------------------------------------- -VVTK_MainWindow2* -VVTK_MainWindow1 -::CreateMainWindow2(QWidget* theParent, - const char* theName, - SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow) +VVTK_MainWindow2* VVTK_MainWindow1::CreateMainWindow2(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow) { myMainWindow2 = new VVTK_MainWindow2(theParent, theName, theResourceMgr, - theViewWindow, - myStyleSwitchAction); + theViewWindow); return myMainWindow2; } //---------------------------------------------------------------------------- -void -VVTK_MainWindow1 -::OnSelectionModeSwitch(bool theIsSelectionOn) +void VVTK_MainWindow1::OnSelectionModeSwitch(bool theIsSelectionOn) { if ( theIsSelectionOn && !isVisible() ) return; @@ -419,9 +367,7 @@ VVTK_MainWindow1 myPickingDlg->hide(); } -void -VVTK_MainWindow1 -::OnSelectionChanged() +void VVTK_MainWindow1::OnSelectionChanged() { Selection_Mode aSelectionMode = SelectionMode(); if(myPickingAction->isChecked() && aSelectionMode != GaussPointSelection) @@ -432,54 +378,40 @@ VVTK_MainWindow1 //---------------------------------------------------------------------------- -VISU_WidgetCtrl* -VVTK_MainWindow1 -::GetWidgetCtrl() +VISU_WidgetCtrl* VVTK_MainWindow1::GetWidgetCtrl() { return myRenderer->GetWidgetCtrl(); } -VISU_InsideCursorSettings* -VVTK_MainWindow1 -::GetInsideCursorSettings() +VISU_InsideCursorSettings* VVTK_MainWindow1::GetInsideCursorSettings() { return mySegmentationCursorDlg->GetInsideCursorSettings(); } -VISU_OutsideCursorSettings* -VVTK_MainWindow1 -::GetOutsideCursorSettings() +VISU_OutsideCursorSettings* VVTK_MainWindow1::GetOutsideCursorSettings() { return mySegmentationCursorDlg->GetOutsideCursorSettings(); } -VISU_PickingSettings* -VVTK_MainWindow1 -::GetPickingSettings() +VISU_PickingSettings* VVTK_MainWindow1::GetPickingSettings() { return myPickingDlg->GetPickingSettings(); } //---------------------------------------------------------------------------- -void -VVTK_MainWindow1 -::SetPlanesSegementation(bool theIsOn) +void VVTK_MainWindow1::SetPlanesSegementation(bool theIsOn) { myPlaneSegmentationAction->setChecked( theIsOn ); OnSegmentationSwitch(myPlaneSegmentationAction); } -void -VVTK_MainWindow1 -::SetSphereSegementation(bool theIsOn) +void VVTK_MainWindow1::SetSphereSegementation(bool theIsOn) { mySphereSegmentationAction->setChecked( theIsOn ); OnSegmentationSwitch(mySphereSegmentationAction); } -void -VVTK_MainWindow1 -::OnSegmentationSwitch(QtxAction* theAction) +void VVTK_MainWindow1::OnSegmentationSwitch(QtxAction* theAction) { bool anIsSegmentationOn = myPlaneSegmentationAction->isChecked() || mySphereSegmentationAction->isChecked(); @@ -516,9 +448,7 @@ VVTK_MainWindow1 } } -void -VVTK_MainWindow1 -::OnSegmentationSwitch() +void VVTK_MainWindow1::OnSegmentationSwitch() { QtxAction* anAction = ( QtxAction* )sender(); OnSegmentationSwitch(anAction); @@ -526,30 +456,20 @@ VVTK_MainWindow1 //---------------------------------------------------------------------------- -VVTK_MainWindow2 -::VVTK_MainWindow2(QWidget* theParent, - const char* theName, - SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow, - QtxAction* theStyleSwitchAction): - VVTK_MainWindow(theParent,theName,theResourceMgr,theViewWindow), - myStyleSwitchAction(theStyleSwitchAction) +VVTK_MainWindow2::VVTK_MainWindow2(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow): + VVTK_MainWindow(theParent,theName,theResourceMgr,theViewWindow) {} -VVTK_MainWindow2 -::~VVTK_MainWindow2() +VVTK_MainWindow2::~VVTK_MainWindow2() {} //---------------------------------------------------------------------------- -void -VVTK_MainWindow2 -::Initialize(SVTK_RenderWindowInteractor* theInteractor) +void VVTK_MainWindow2::Initialize(SVTK_RenderWindowInteractor* theInteractor) { VVTK_MainWindow::Initialize(theInteractor); - - if( myStyleSwitchAction->isChecked() ) - PushInteractorStyle(myInteractorStyle.GetPointer()); - connect(myStyleSwitchAction, SIGNAL(toggled(bool)), this, SLOT(OnInteractorStyleSwitch(bool))); } diff --git a/src/VVTK/VVTK_MainWindow.h b/src/VVTK/VVTK_MainWindow.h index 24718220..068774ea 100644 --- a/src/VVTK/VVTK_MainWindow.h +++ b/src/VVTK/VVTK_MainWindow.h @@ -57,49 +57,28 @@ public: SUIT_ViewWindow* theViewWindow); //! Reimplement SVTK_MainWindow::Initialize - virtual - void - Initialize(SVTK_RenderWindowInteractor* theInteractor); + virtual void Initialize(SVTK_RenderWindowInteractor* theInteractor); //! Destroy instance of the class - virtual - ~VVTK_MainWindow(); + virtual ~VVTK_MainWindow(); public slots: - virtual - void - onDumpView(); + virtual void onDumpView(); - //! To change active interactor style at run-time - virtual - void - OnInteractorStyleSwitch(bool theIsGaussStyleOn); + virtual void action( const int ); - virtual - void - action( const int ); + virtual void OnStartRecording(); - virtual - void - OnStartRecording(); + virtual void OnPlayRecording(); - virtual - void - OnPlayRecording(); + virtual void OnPauseRecording(); - virtual - void - OnPauseRecording(); - - virtual - void - OnStopRecording(); + virtual void OnStopRecording(); protected: virtual QtxActionToolMgr* toolMgr() const; - vtkSmartPointer myInteractorStyle; vtkSmartPointer myControllerIncrement; vtkSmartPointer myControllerOnKeyDown; @@ -128,69 +107,53 @@ public: SUIT_ViewWindow* theViewWindow); //! Reimplement VVTK_MainWindow::Initialize - virtual - void - Initialize(SVTK_RenderWindowInteractor* theInteractor, - VVTK_Renderer1* theRenderer); + virtual void Initialize(SVTK_RenderWindowInteractor* theInteractor, + VVTK_Renderer1* theRenderer); //! Destroy instance of the class - virtual - ~VVTK_MainWindow1(); + virtual ~VVTK_MainWindow1(); //! Create instance of the segmented VVTK_MainWindow /*! The two views (VVTK_MainWindow1 and VVTK_MainWindow2) should change its behaviour in the same time. So, it is necessary to synhronize them through sharing some common pointers. */ - VVTK_MainWindow2* - CreateMainWindow2(QWidget* theParent, - const char* theName, - SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow); + VVTK_MainWindow2* CreateMainWindow2(QWidget* theParent, + const char* theName, + SUIT_ResourceMgr* theResourceMgr, + SUIT_ViewWindow* theViewWindow); VISU_WidgetCtrl* GetWidgetCtrl(); - void - SetPlanesSegementation(bool theIsOn); + void SetPlanesSegementation(bool theIsOn); - void - SetSphereSegementation(bool theIsOn); + void SetSphereSegementation(bool theIsOn); - VISU_InsideCursorSettings* - GetInsideCursorSettings(); + VISU_InsideCursorSettings* GetInsideCursorSettings(); //! Get contained VISU_OutsideCursorSettings - VISU_OutsideCursorSettings* - GetOutsideCursorSettings(); + VISU_OutsideCursorSettings* GetOutsideCursorSettings(); //! Get contained VISU_PickingSettings - VISU_PickingSettings* - GetPickingSettings(); + VISU_PickingSettings* GetPickingSettings(); public slots: //! To activate/ deactivate the segementation cursor at run-time - void - OnSegmentationSwitch();//bool theIsSegmentationOn); + void OnSegmentationSwitch();//bool theIsSegmentationOn); - void - OnSegmentationSwitch(QtxAction* theAction);//bool theIsSegmentationOn); + void OnSegmentationSwitch(QtxAction* theAction);//bool theIsSegmentationOn); //! To change active selection mode at run-time - virtual - void - OnSelectionModeSwitch(bool theIsSelectionOn); + virtual void OnSelectionModeSwitch(bool theIsSelectionOn); //! To adjust to the current selection mode - virtual - void - OnSelectionChanged(); + virtual void OnSelectionChanged(); protected: VVTK_Renderer1* myRenderer; //!< Keeps extended version of SVTK_Renderer VVTK_MainWindow2* myMainWindow2; //!< Refer to segmented view - QtxAction* myStyleSwitchAction; //!< Action for switch interactor style QToolBar* myPtsToolBar; //!< Additional tool bar //! To implement show/hide segmented view on acttivate/ deactivate segementation cursor @@ -218,21 +181,13 @@ class VVTK_EXPORT VVTK_MainWindow2: public VVTK_MainWindow VVTK_MainWindow2(QWidget* theParent, const char* theName, SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow, - QtxAction* theStyleSwitchAction); + SUIT_ViewWindow* theViewWindow); public: //! Destroy instance of the class - virtual - ~VVTK_MainWindow2(); + virtual ~VVTK_MainWindow2(); //! Reimplement SVTK_MainWindow::Initialize - virtual - void - Initialize(SVTK_RenderWindowInteractor* theInteractor); - - protected: - // Refer to the VVTK_MainWindow1::myStyleSwitchAction instance - QtxAction* myStyleSwitchAction; + virtual void Initialize(SVTK_RenderWindowInteractor* theInteractor); }; diff --git a/src/VVTK/VVTK_PickingDlg.cxx b/src/VVTK/VVTK_PickingDlg.cxx index 18b42fee..52d14ff1 100644 --- a/src/VVTK/VVTK_PickingDlg.cxx +++ b/src/VVTK/VVTK_PickingDlg.cxx @@ -24,7 +24,7 @@ #include "VVTK_PickingDlg.h" #include "VISU_GaussPtsAct.h" -#include "VISU_GaussPtsSettings.h" +#include "VISU_PickingSettings.h" #include "VISU_GaussPointsPL.hxx" #include "SUIT_MessageBox.h" @@ -454,29 +454,84 @@ VVTK_PickingDlg::~VVTK_PickingDlg() void VVTK_PickingDlg::AddActor( VISU_GaussPtsAct* theActor ) { - theActor->SetPickingSettings( myPickingSettings.GetPointer() ); + //theActor->SetPickingSettings( myPickingSettings.GetPointer() ); } void VVTK_PickingDlg::RemoveActor( VISU_GaussPtsAct* theActor ) { - theActor->SetPickingSettings( NULL ); + //theActor->SetPickingSettings( NULL ); } void VVTK_PickingDlg::Update() { - myCursorSizeSpinBox->setValue( myPickingSettings->GetCursorSize() ); - myPyramidHeightSpinBox->setValue( myPickingSettings->GetPyramidHeight() ); - myPointToleranceSpinBox->setValue( myPickingSettings->GetPointTolerance() ); - myTransparencySpinBox->setValue( int(myPickingSettings->GetInfoWindowTransparency() * 100.0) ); - myPositionComboBox->setCurrentIndex( myPickingSettings->GetInfoWindowPosition() ); - myZoomFactorSpinBox->setValue( myPickingSettings->GetZoomFactor() ); - myStepNumberSpinBox->setValue( myPickingSettings->GetStepNumber() ); - myDisplayParentMeshCheckBox->setChecked( myPickingSettings->GetDisplayParentMesh() ); - - vtkFloatingPointType* aColor = myPickingSettings->GetColor(); - mySelectionColorButton->setColor( QColor( ( int )( aColor[0] * 255.0 ), - ( int )( aColor[1] * 255.0 ), - ( int )( aColor[2] * 255.0 ) ) ); + float aCursorSize = 0.5; + float aPyramidHeight = 10.0; + float aPointTolerance = 0.1; + QColor aColor = Qt::yellow; + int anInfoWindowTransparency = 50; + int anInfoWindowPosition = VISU_PickingSettings::BelowPoint; + float aZoomFactor = 1.5; + int aStepNumber = 10; + bool aDisplayParentMesh = false; + + //if( !myPickingSettings->GetInitial() ) + { + myCursorSizeSpinBox->setValue( myPickingSettings->GetCursorSize() ); + myPyramidHeightSpinBox->setValue( myPickingSettings->GetPyramidHeight() ); + myPointToleranceSpinBox->setValue( myPickingSettings->GetPointTolerance() ); + myTransparencySpinBox->setValue( int(myPickingSettings->GetInfoWindowTransparency() * 100.0) ); + myPositionComboBox->setCurrentIndex( myPickingSettings->GetInfoWindowPosition() ); + myZoomFactorSpinBox->setValue( myPickingSettings->GetZoomFactor() ); + myStepNumberSpinBox->setValue( myPickingSettings->GetStepNumber() ); + myDisplayParentMeshCheckBox->setChecked( myPickingSettings->GetDisplayParentMesh() ); + + vtkFloatingPointType* aColor = myPickingSettings->GetColor(); + + //QPalette aPalette( mySelectionColorButton->palette() ); + /*aPalette.setColor( mySelectionColorButton->backgroundRole(), + QColor( ( int )( aColor[0] * 255.0 ), + ( int )( aColor[1] * 255.0 ), + ( int )( aColor[2] * 255.0 ) ) ); + mySelectionColorButton->setPalette( aPalette );*/ + mySelectionColorButton->setColor( + QColor( ( int )( aColor[0] * 255.0 ), + ( int )( aColor[1] * 255.0 ), + ( int )( aColor[2] * 255.0 ) ) ); + + return; + } + + SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr(); + + aCursorSize = aResourceMgr->doubleValue( "VISU", "picking_cursor_size", aCursorSize ); + myCursorSizeSpinBox->setValue( aCursorSize ); + + aPyramidHeight = aResourceMgr->doubleValue( "VISU", "picking_pyramid_height", aPyramidHeight ); + myPyramidHeightSpinBox->setValue( aPyramidHeight ); + + aPointTolerance = aResourceMgr->doubleValue( "VISU", "picking_point_tolerance", aPointTolerance ); + myPointToleranceSpinBox->setValue( aPointTolerance ); + + aColor = aResourceMgr->colorValue( "VISU", "picking_selection_color", aColor ); + //QPalette aPalette( mySelectionColorButton->palette() ); + //aPalette.setColor( mySelectionColorButton->backgroundRole(), aColor ); + mySelectionColorButton->setColor( aColor ); + + anInfoWindowTransparency = aResourceMgr->integerValue( "VISU", "picking_transparency", anInfoWindowTransparency ); + myTransparencySpinBox->setValue( anInfoWindowTransparency ); + + anInfoWindowPosition = aResourceMgr->integerValue( "VISU", "picking_position", anInfoWindowPosition ); + myPositionComboBox->setCurrentIndex( anInfoWindowPosition ); + + aZoomFactor = aResourceMgr->doubleValue( "VISU", "picking_zoom_factor", aZoomFactor ); + myZoomFactorSpinBox->setValue( aZoomFactor ); + + aStepNumber = aResourceMgr->integerValue( "VISU", "picking_step_number", aStepNumber ); + myStepNumberSpinBox->setValue( aStepNumber ); + + aDisplayParentMesh = aResourceMgr->booleanValue( "VISU", "picking_display_parent_mesh", aDisplayParentMesh ); + myDisplayParentMeshCheckBox->setChecked( aDisplayParentMesh ); + onClickApply(); } @@ -566,6 +621,8 @@ void VVTK_PickingDlg::KeyPressed() void VVTK_PickingDlg::onClickApply() { + //myPickingSettings->SetInitial( false ); + myPickingSettings->SetCursorSize( myCursorSizeSpinBox->value() ); myPickingSettings->SetPyramidHeight( myPyramidHeightSpinBox->value() ); myPickingSettings->SetPointTolerance( myPointToleranceSpinBox->value() ); diff --git a/src/VVTK/VVTK_Renderer.cxx b/src/VVTK/VVTK_Renderer.cxx index 8b56aede..d0e3d6a1 100644 --- a/src/VVTK/VVTK_Renderer.cxx +++ b/src/VVTK/VVTK_Renderer.cxx @@ -194,7 +194,7 @@ VVTK_Renderer anActor->SetHighlightProperty(myGaussHighlightProperty.GetPointer()); anActor->SetInsideCursorSettings(myInsideCursorSettings); - anActor->SetPickingSettings(myPickingSettings); + //anActor->SetPickingSettings(myPickingSettings); } } @@ -210,7 +210,7 @@ VVTK_Renderer anActor->SetHighlightProperty(NULL); anActor->SetInsideCursorSettings(NULL); - anActor->SetPickingSettings(NULL); + //anActor->SetPickingSettings(NULL); } } diff --git a/src/VVTK/VVTK_ViewModel.cxx b/src/VVTK/VVTK_ViewModel.cxx index 977d3848..5a071c84 100644 --- a/src/VVTK/VVTK_ViewModel.cxx +++ b/src/VVTK/VVTK_ViewModel.cxx @@ -33,35 +33,33 @@ #include //--------------------------------------------------------------- -VVTK_Viewer -::VVTK_Viewer() +VVTK_Viewer::VVTK_Viewer() { } //--------------------------------------------------------------- -VVTK_Viewer -::~VVTK_Viewer() +VVTK_Viewer::~VVTK_Viewer() { } //--------------------------------------------------------------- -SUIT_ViewWindow* -VVTK_Viewer -::createView( SUIT_Desktop* theDesktop ) +SUIT_ViewWindow* VVTK_Viewer::createView( SUIT_Desktop* theDesktop ) { TViewWindow* aViewWindow = new TViewWindow (theDesktop); aViewWindow->Initialize(this); aViewWindow->setBackgroundColor( backgroundColor() ); aViewWindow->SetTrihedronSize( trihedronSize() ); + aViewWindow->SetProjectionMode( projectionMode() ); + aViewWindow->SetInteractionStyle( interactionStyle() ); + aViewWindow->SetIncrementalSpeed( incrementalSpeed(), incrementalSpeedMode() ); + aViewWindow->SetSpacemouseButtons( spacemouseBtn(1), spacemouseBtn(2), spacemouseBtn(3) ); return aViewWindow; } //--------------------------------------------------------------- -void -VVTK_Viewer -::Display(const SALOME_VTKPrs* thePrs) +void VVTK_Viewer::Display(const SALOME_VTKPrs* thePrs) { // try do downcast object if(const SVTK_Prs* aPrs = dynamic_cast(thePrs)){ @@ -106,9 +104,7 @@ namespace VVTK } //--------------------------------------------------------------- -bool -VVTK_Viewer -::isVisible( const Handle(SALOME_InteractiveObject)& theIO ) +bool VVTK_Viewer::isVisible( const Handle(SALOME_InteractiveObject)& theIO ) { QVector aViews = myViewManager->getViews(); for(int i = 0, iEnd = aViews.size(); i < iEnd; i++) -- 2.39.2